diff --git a/Lib/aix3/FCNTL.py b/Lib/aix3/FCNTL.py
deleted file mode 100644
index 90e9ea5..0000000
--- a/Lib/aix3/FCNTL.py
+++ /dev/null
@@ -1,145 +0,0 @@
-# Generated by h2py from /usr/include/fcntl.h
-
-# Included from standards.h
-
-# Included from sys/types.h
-
-# Included from sys/m_types.h
-TRUE = 1
-FALSE = 0
-NBBY = 8
-FHSIZE = 32
-
-# Included from sys/select.h
-
-# Included from sys/time.h
-ITIMER_REAL = 0
-ITIMER_VIRTUAL = 1
-ITIMER_PROF = 2
-ITIMER_VIRT = 3
-TIMEOFDAY = 9
-TIMERID_ALRM = (ITIMER_REAL)
-TIMERID_REAL = (ITIMER_REAL)
-TIMERID_VIRTUAL = (ITIMER_VIRTUAL)
-TIMERID_PROF = (ITIMER_PROF)
-TIMERID_VIRT = (ITIMER_VIRT)
-TIMERID_TOD = (TIMERID_VIRT+1)
-NALRM = 1
-NPROF = 1
-NVIRTUAL = 2
-NTIMEOFDAY = 5
-NTIMERS = (NALRM + NPROF + NVIRTUAL + NTIMEOFDAY)
-MIN_SECS_SINCE_EPOCH = 0
-uS_PER_SECOND = (1000000)
-NS_PER_uS = (1000)
-MAX_SECS_TO_uS = 4000
-MAX_NS_TO_uS = 294967296
-NS_PER_SEC = 1000000000
-uS_PER_SEC = (NS_PER_SEC / 1000)
-NS_PER_MSEC = (NS_PER_SEC / 1000)
-MAX_DEC_SECS = 2
-MAX_DEC_NS = 147483647
-DST_NONE = 0
-DST_USA = 1
-DST_AUST = 2
-DST_WET = 3
-DST_MET = 4
-DST_EET = 5
-DST_CAN = 6
-
-# Included from time.h
-
-# Included from stddef.h
-CLOCKS_PER_SEC = 1000000
-CLK_TCK = 100
-TIMELEN = 26
-NLTBMAX = 64
-NO_TIMEOUT = 0
-INF_TIMEOUT = -1
-def NFDS(x): return ((x) & 0x0000FFFF)
-
-def LOW_HALF(x): return NFDS(x)
-
-def NMSGS(x): return (((x) >> 16) & 0x0000FFFF)
-
-def HIGH_HALF(x): return NMSGS(x)
-
-FD_SETSIZE = 2048
-def major(__x): return (int)((unsigned)(__x)>>16)
-
-def minor(__x): return (int)((__x)&0xFFFF)
-
-
-# Included from sys/flock.h
-F_RDLCK = 01
-F_WRLCK = 02
-F_UNLCK = 03
-INOFLCK = 1
-SETFLCK = 2
-SLPFLCK = 4
-LCK_UNBLOCK = 0
-LCK_BLOCKER = 1
-LCK_BLOCKED = 2
-LCK_WASBLOCK = 4
-MAXEND = 017777777777
-RMTLOCK = 1
-def ENF_LOCK(mode): return (((mode) & (ISGID | IEXEC | (IEXEC >> 3) | (IEXEC >> 6))) == ISGID)
-
-O_RDONLY = 00000000
-O_WRONLY = 00000001
-O_RDWR = 00000002
-O_ACCMODE = 3
-O_NONBLOCK = 00000004
-O_APPEND = 00000010
-O_CREAT = 00000400
-O_TRUNC = 00001000
-O_EXCL = 00002000
-O_NOCTTY = 00004000
-F_DUPFD = 0
-F_GETFD = 1
-F_SETFD = 2
-F_GETFL = 3
-F_SETFL = 4
-F_GETLK = 5
-F_SETLK = 6
-F_SETLKW = 7
-FD_CLOEXEC = 1
-O_SYNC = 00000020
-O_NONE = 00000003
-O_EXEC = 00000040
-O_RSHARE = 00010000
-O_DEFER = 00020000
-O_DELAY = 00040000
-O_NDELAY = 00100000
-O_NSHARE = 00200000
-F_GETOWN = 8
-F_SETOWN = 9
-F_CLOSEM = 10
-FNDELAY = O_NONBLOCK
-O_NDELAY = O_NONBLOCK
-FNDELAY = O_NDELAY
-FNONBLOCK = O_NONBLOCK
-FAPPEND = O_APPEND
-FSYNC = O_SYNC
-FASYNC = 00400000
-FOPEN = (-1)
-FREAD = (O_RDONLY-FOPEN)
-FWRITE = (O_WRONLY-FOPEN)
-FMPX = 00000200
-FMASK = 00374377
-FFCNTL = (FNONBLOCK|FNDELAY|FAPPEND|FSYNC|FASYNC)
-FCREAT = O_CREAT
-FTRUNC = O_TRUNC
-FEXCL = O_EXCL
-FRSHARE = O_RSHARE
-FDEFER = O_DEFER
-FDELAY = O_DELAY
-FNDELAY = O_NDELAY
-FNSHARE = O_NSHARE
-FEXEC = O_EXEC
-FNOCTTY = O_NOCTTY
-FMOUNT = 01000000
-FREVOKED = 0x20000000
-FKERNEL = 0x40000000
-FAIO = 00000100
-FDOCLONE = 0x10000000
diff --git a/Lib/aix3/IN.py b/Lib/aix3/IN.py
deleted file mode 100644
index 2c57362..0000000
--- a/Lib/aix3/IN.py
+++ /dev/null
@@ -1,126 +0,0 @@
-# Generated by h2py from /usr/include/netinet/in.h
-
-# Included from net/nh.h
-
-# Included from sys/machine.h
-LITTLE_ENDIAN = 1234
-BIG_ENDIAN = 4321
-PDP_ENDIAN = 3412
-BYTE_ORDER = BIG_ENDIAN
-DEFAULT_GPR = 0xDEADBEEF
-MSR_EE = 0x8000
-MSR_PR = 0x4000
-MSR_FP = 0x2000
-MSR_ME = 0x1000
-MSR_FE = 0x0800
-MSR_FE0 = 0x0800
-MSR_SE = 0x0400
-MSR_BE = 0x0200
-MSR_IE = 0x0100
-MSR_FE1 = 0x0100
-MSR_AL = 0x0080
-MSR_IP = 0x0040
-MSR_IR = 0x0020
-MSR_DR = 0x0010
-MSR_PM = 0x0004
-DEFAULT_MSR = (MSR_EE | MSR_ME | MSR_AL | MSR_IR | MSR_DR)
-DEFAULT_USER_MSR = (DEFAULT_MSR | MSR_PR)
-CR_LT = 0x80000000
-CR_GT = 0x40000000
-CR_EQ = 0x20000000
-CR_SO = 0x10000000
-CR_FX = 0x08000000
-CR_FEX = 0x04000000
-CR_VX = 0x02000000
-CR_OX = 0x01000000
-XER_SO = 0x80000000
-XER_OV = 0x40000000
-XER_CA = 0x20000000
-def XER_COMP_BYTE(xer): return ((xer >> 8) & 0x000000FF)
-
-def XER_LENGTH(xer): return (xer & 0x0000007F)
-
-DSISR_IO = 0x80000000
-DSISR_PFT = 0x40000000
-DSISR_LOCK = 0x20000000
-DSISR_FPIO = 0x10000000
-DSISR_PROT = 0x08000000
-DSISR_LOOP = 0x04000000
-DSISR_DRST = 0x04000000
-DSISR_ST = 0x02000000
-DSISR_SEGB = 0x01000000
-DSISR_DABR = 0x00400000
-DSISR_EAR = 0x00100000
-SRR_IS_PFT = 0x40000000
-SRR_IS_ISPEC = 0x20000000
-SRR_IS_IIO = 0x10000000
-SRR_IS_PROT = 0x08000000
-SRR_IS_LOOP = 0x04000000
-SRR_PR_FPEN = 0x00100000
-SRR_PR_INVAL = 0x00080000
-SRR_PR_PRIV = 0x00040000
-SRR_PR_TRAP = 0x00020000
-SRR_PR_IMPRE = 0x00010000
-def ntohl(x): return (x)
-
-def ntohs(x): return (x)
-
-def htonl(x): return (x)
-
-def htons(x): return (x)
-
-IPPROTO_IP = 0
-IPPROTO_ICMP = 1
-IPPROTO_GGP = 3
-IPPROTO_TCP = 6
-IPPROTO_EGP = 8
-IPPROTO_PUP = 12
-IPPROTO_UDP = 17
-IPPROTO_IDP = 22
-IPPROTO_TP = 29
-IPPROTO_LOCAL = 63
-IPPROTO_EON = 80
-IPPROTO_BIP = 0x53
-IPPROTO_RAW = 255
-IPPROTO_MAX = 256
-IPPORT_RESERVED = 1024
-IPPORT_USERRESERVED = 5000
-IPPORT_TIMESERVER = 37
-def IN_CLASSA(i): return (((long)(i) & 0x80000000) == 0)
-
-IN_CLASSA_NET = 0xff000000
-IN_CLASSA_NSHIFT = 24
-IN_CLASSA_HOST = 0x00ffffff
-IN_CLASSA_MAX = 128
-def IN_CLASSB(i): return (((long)(i) & 0xc0000000) == 0x80000000)
-
-IN_CLASSB_NET = 0xffff0000
-IN_CLASSB_NSHIFT = 16
-IN_CLASSB_HOST = 0x0000ffff
-IN_CLASSB_MAX = 65536
-def IN_CLASSC(i): return (((long)(i) & 0xe0000000) == 0xc0000000)
-
-IN_CLASSC_NET = 0xffffff00
-IN_CLASSC_NSHIFT = 8
-IN_CLASSC_HOST = 0x000000ff
-def IN_CLASSD(i): return (((long)(i) & 0xf0000000) == 0xe0000000)
-
-def IN_MULTICAST(i): return IN_CLASSD(i)
-
-def IN_EXPERIMENTAL(i): return (((long)(i) & 0xe0000000) == 0xe0000000)
-
-def IN_BADCLASS(i): return (((long)(i) & 0xf0000000) == 0xf0000000)
-
-INADDR_ANY = 0x00000000
-INADDR_LOOPBACK = 0x7f000001
-INADDR_BROADCAST = 0xffffffff
-INADDR_NONE = 0xffffffff
-IN_LOOPBACKNET = 127
-IP_OPTIONS = 1
-IP_HDRINCL = 2
-IP_TOS = 3
-IP_TTL = 4
-IP_RECVOPTS = 5
-IP_RECVRETOPTS = 6
-IP_RECVDSTADDR = 7
-IP_RETOPTS = 8
diff --git a/Lib/aix3/SOCKET.py b/Lib/aix3/SOCKET.py
deleted file mode 100644
index 5e52914..0000000
--- a/Lib/aix3/SOCKET.py
+++ /dev/null
@@ -1,86 +0,0 @@
-# Generated by h2py from /usr/include/sys/socket.h
-SOCK_STREAM = 1
-SOCK_DGRAM = 2
-SOCK_RAW = 3
-SOCK_RDM = 4
-SOCK_SEQPACKET = 5
-SO_DEBUG = 0x0001
-SO_ACCEPTCONN = 0x0002
-SO_REUSEADDR = 0x0004
-SO_KEEPALIVE = 0x0008
-SO_DONTROUTE = 0x0010
-SO_BROADCAST = 0x0020
-SO_USELOOPBACK = 0x0040
-SO_LINGER = 0x0080
-SO_OOBINLINE = 0x0100
-SO_SNDBUF = 0x1001
-SO_RCVBUF = 0x1002
-SO_SNDLOWAT = 0x1003
-SO_RCVLOWAT = 0x1004
-SO_SNDTIMEO = 0x1005
-SO_RCVTIMEO = 0x1006
-SO_ERROR = 0x1007
-SO_TYPE = 0x1008
-SOL_SOCKET = 0xffff
-AF_UNSPEC = 0
-AF_UNIX = 1
-AF_INET = 2
-AF_IMPLINK = 3
-AF_PUP = 4
-AF_CHAOS = 5
-AF_NS = 6
-AF_ISO = 7
-AF_OSI = AF_ISO
-AF_ECMA = 8
-AF_DATAKIT = 9
-AF_CCITT = 10
-AF_SNA = 11
-AF_DECnet = 12
-AF_DLI = 13
-AF_LAT = 14
-AF_HYLINK = 15
-AF_APPLETALK = 16
-AF_ROUTE = 17
-AF_LINK = 18
-pseudo_AF_XTP = 19
-AF_INTF = 20
-AF_RIF = 21
-PF_INTF = AF_INTF
-AF_NETWARE = 22
-AF_NDD = 23
-AF_MAX = 30
-PF_UNSPEC = AF_UNSPEC
-PF_UNIX = AF_UNIX
-PF_INET = AF_INET
-PF_IMPLINK = AF_IMPLINK
-PF_PUP = AF_PUP
-PF_CHAOS = AF_CHAOS
-PF_NS = AF_NS
-PF_ISO = AF_ISO
-PF_OSI = AF_ISO
-PF_ECMA = AF_ECMA
-PF_DATAKIT = AF_DATAKIT
-PF_CCITT = AF_CCITT
-PF_SNA = AF_SNA
-PF_DECnet = AF_DECnet
-PF_DLI = AF_DLI
-PF_LAT = AF_LAT
-PF_HYLINK = AF_HYLINK
-PF_APPLETALK = AF_APPLETALK
-PF_ROUTE = AF_ROUTE
-PF_LINK = AF_LINK
-PF_XTP = pseudo_AF_XTP
-PF_INTF = AF_INTF
-PF_RIF = AF_RIF
-PF_NDD = AF_NDD
-PF_MAX = AF_MAX
-SOMAXCONN = 10
-MSG_OOB = 0x1
-MSG_PEEK = 0x2
-MSG_DONTROUTE = 0x4
-MSG_EOR = 0x8
-MSG_TRUNC = 0x10
-MSG_CTRUNC = 0x20
-MSG_WAITALL = 0x40
-SCM_RIGHTS = 0x01
-MSG_MAXIOVLEN = 16
diff --git a/Lib/aix3/TERMIOS.py b/Lib/aix3/TERMIOS.py
deleted file mode 100644
index a048cd9..0000000
--- a/Lib/aix3/TERMIOS.py
+++ /dev/null
@@ -1,195 +0,0 @@
-# Generated by h2py from /usr/include/termios.h
-
-# Included from standards.h
-
-# Included from sys/types.h
-
-# Included from sys/m_types.h
-TRUE = 1
-FALSE = 0
-NBBY = 8
-FHSIZE = 32
-
-# Included from sys/select.h
-
-# Included from sys/time.h
-ITIMER_REAL = 0
-ITIMER_VIRTUAL = 1
-ITIMER_PROF = 2
-ITIMER_VIRT = 3
-TIMEOFDAY = 9
-TIMERID_ALRM = (ITIMER_REAL)
-TIMERID_REAL = (ITIMER_REAL)
-TIMERID_VIRTUAL = (ITIMER_VIRTUAL)
-TIMERID_PROF = (ITIMER_PROF)
-TIMERID_VIRT = (ITIMER_VIRT)
-TIMERID_TOD = (TIMERID_VIRT+1)
-NALRM = 1
-NPROF = 1
-NVIRTUAL = 2
-NTIMEOFDAY = 5
-NTIMERS = (NALRM + NPROF + NVIRTUAL + NTIMEOFDAY)
-MIN_SECS_SINCE_EPOCH = 0
-uS_PER_SECOND = (1000000)
-NS_PER_uS = (1000)
-MAX_SECS_TO_uS = 4000
-MAX_NS_TO_uS = 294967296
-NS_PER_SEC = 1000000000
-uS_PER_SEC = (NS_PER_SEC / 1000)
-NS_PER_MSEC = (NS_PER_SEC / 1000)
-MAX_DEC_SECS = 2
-MAX_DEC_NS = 147483647
-DST_NONE = 0
-DST_USA = 1
-DST_AUST = 2
-DST_WET = 3
-DST_MET = 4
-DST_EET = 5
-DST_CAN = 6
-
-# Included from time.h
-
-# Included from stddef.h
-CLOCKS_PER_SEC = 1000000
-CLK_TCK = 100
-TIMELEN = 26
-NLTBMAX = 64
-NO_TIMEOUT = 0
-INF_TIMEOUT = -1
-def NFDS(x): return ((x) & 0x0000FFFF)
-
-def LOW_HALF(x): return NFDS(x)
-
-def NMSGS(x): return (((x) >> 16) & 0x0000FFFF)
-
-def HIGH_HALF(x): return NMSGS(x)
-
-FD_SETSIZE = 2048
-def major(__x): return (int)((unsigned)(__x)>>16)
-
-def minor(__x): return (int)((__x)&0xFFFF)
-
-NCCS = 16
-TCSANOW = 0
-TCSADRAIN = 1
-TCSAFLUSH = 2
-TCIFLUSH = 0
-TCOFLUSH = 1
-TCIOFLUSH = 2
-TCOOFF = 0
-TCOON = 1
-TCIOFF = 2
-TCION = 3
-VINTR = 0
-VQUIT = 1
-VERASE = 2
-VKILL = 3
-VEOF = 4
-VEOL = 5
-VSTART = 7
-VSTOP = 8
-VSUSP = 9
-VMIN = 4
-VTIME = 5
-VEOL2 = 6
-VDSUSP = 10
-VREPRINT = 11
-VDISCRD = 12
-VWERSE = 13
-VLNEXT = 14
-VSTRT = VSTART
-B0 = 0x00000000
-B50 = 0x00000001
-B75 = 0x00000002
-B110 = 0x00000003
-B134 = 0x00000004
-B150 = 0x00000005
-B200 = 0x00000006
-B300 = 0x00000007
-B600 = 0x00000008
-B1200 = 0x00000009
-B1800 = 0x0000000a
-B2400 = 0x0000000b
-B4800 = 0x0000000c
-B9600 = 0x0000000d
-B19200 = 0x0000000e
-B38400 = 0x0000000f
-EXTA = B19200
-EXTB = B38400
-IGNBRK = 0x00000001
-BRKINT = 0x00000002
-IGNPAR = 0x00000004
-PARMRK = 0x00000008
-INPCK = 0x00000010
-ISTRIP = 0x00000020
-INLCR = 0x00000040
-IGNCR = 0x00000080
-ICRNL = 0x00000100
-IXON = 0x00000200
-IXOFF = 0x00000400
-IUCLC = 0x00000800
-IXANY = 0x00001000
-IMAXBEL = 0x00010000
-OPOST = 0x00000001
-OLCUC = 0x00000002
-ONLCR = 0x00000004
-OCRNL = 0x00000008
-ONOCR = 0x00000010
-ONLRET = 0x00000020
-OFILL = 0x00000040
-OFDEL = 0x00000080
-CRDLY = 0x00000300
-CR0 = 0x00000000
-CR1 = 0x00000100
-CR2 = 0x00000200
-CR3 = 0x00000300
-TABDLY = 0x00000c00
-TAB0 = 0x00000000
-TAB1 = 0x00000400
-TAB2 = 0x00000800
-TAB3 = 0x00000c00
-BSDLY = 0x00001000
-BS0 = 0x00000000
-BS1 = 0x00001000
-FFDLY = 0x00002000
-FF0 = 0x00000000
-FF1 = 0x00002000
-NLDLY = 0x00004000
-NL0 = 0x00000000
-NL1 = 0x00004000
-VTDLY = 0x00008000
-VT0 = 0x00000000
-VT1 = 0x00008000
-DLY_MASK = (NLDLY | CRDLY | TABDLY | BSDLY | VTDLY | FFDLY)
-_CBAUD = 0x0000000f
-CSIZE = 0x00000030
-CS5 = 0x00000000
-CS6 = 0x00000010
-CS7 = 0x00000020
-CS8 = 0x00000030
-CSTOPB = 0x00000040
-CREAD = 0x00000080
-PARENB = 0x00000100
-PARODD = 0x00000200
-HUPCL = 0x00000400
-CLOCAL = 0x00000800
-_CIBAUD = 0x000f0000
-_IBSHIFT = 16
-CIBAUD = _CIBAUD
-IBSHIFT = _IBSHIFT
-PAREXT = 0x00100000
-ISIG = 0x00000001
-ICANON = 0x00000002
-XCASE = 0x00000004
-ECHO = 0x00000008
-ECHOE = 0x00000010
-ECHOK = 0x00000020
-ECHONL = 0x00000040
-NOFLSH = 0x00000080
-TOSTOP = 0x00010000
-ECHOCTL = 0x00020000
-ECHOPRT = 0x00040000
-ECHOKE = 0x00080000
-FLUSHO = 0x00100000
-PENDIN = 0x20000000
-IEXTEN = 0x00200000
diff --git a/Lib/aix3/regen b/Lib/aix3/regen
deleted file mode 100755
index 256e7d2..0000000
--- a/Lib/aix3/regen
+++ /dev/null
@@ -1,11 +0,0 @@
-#! /bin/sh
-case `uname -sv` in
-'AIX 3'*)  ;;
-*)      echo Probably not on an AIX 3 system 1>&2
-        exit 1;;
-esac
-set -v
-h2py.py /usr/include/fcntl.h
-h2py.py /usr/include/sys/socket.h
-h2py.py -i '(u_long)' /usr/include/netinet/in.h
-h2py.py /usr/include/termios.h
diff --git a/Lib/aix4/FCNTL.py b/Lib/aix4/FCNTL.py
deleted file mode 100644
index 739ada4..0000000
--- a/Lib/aix4/FCNTL.py
+++ /dev/null
@@ -1,387 +0,0 @@
-# Generated by h2py from /usr/include/fcntl.h
-
-# Included from standards.h
-
-# Included from sys/types.h
-
-# Included from sys/m_types.h
-NULL = 0
-TRUE = 1
-FALSE = 0
-NBBY = 8
-FHSIZE = 32
-
-# Included from sys/select.h
-
-# Included from sys/time.h
-ITIMER_REAL = 0
-ITIMER_VIRTUAL = 1
-ITIMER_PROF = 2
-ITIMER_VIRT = 3
-ITIMER_REAL1 = 20
-TIMEOFDAY = 9
-TIMERID_ALRM = (ITIMER_REAL)
-TIMERID_REAL = (ITIMER_REAL)
-TIMERID_VIRTUAL = (ITIMER_VIRTUAL)
-TIMERID_PROF = (ITIMER_PROF)
-TIMERID_VIRT = (ITIMER_VIRT)
-TIMERID_TOD = (TIMERID_VIRT+1)
-TIMERID_REAL1 = (ITIMER_REAL1)
-NALRM = 1
-NPROF = 1
-NVIRTUAL = 2
-NTIMEOFDAY = 5
-NTIMERS = (NALRM + NPROF + NVIRTUAL + NTIMEOFDAY)
-NALRM_THREAD = 1
-NTIMERS_THREAD = (NALRM_THREAD)
-MIN_SECS_SINCE_EPOCH = 0
-uS_PER_SECOND = (1000000)
-NS_PER_uS = (1000)
-MAX_SECS_TO_uS = 4000
-MAX_NS_TO_uS = 294967296
-NS_PER_SEC = 1000000000
-uS_PER_SEC = (NS_PER_SEC / 1000)
-NS_PER_MSEC = (NS_PER_SEC / 1000)
-MAX_DEC_SECS = 2
-MAX_DEC_NS = 147483647
-DST_NONE = 0
-DST_USA = 1
-DST_AUST = 2
-DST_WET = 3
-DST_MET = 4
-DST_EET = 5
-DST_CAN = 6
-
-# Included from time.h
-NULL = 0
-CLOCKS_PER_SEC = 1000000
-CLK_TCK = 100
-
-# Included from stddef.h
-NULL = 0
-TIMELEN = 26
-NLTBMAX = 64
-NO_TIMEOUT = 0
-INF_TIMEOUT = -1
-def NFDS(x): return ((x) & 0x0000FFFF)
-
-def LOW_HALF(x): return NFDS(x)
-
-def NMSGS(x): return (((x) >> 16) & 0x0000FFFF)
-
-def HIGH_HALF(x): return NMSGS(x)
-
-FD_SETSIZE = 2048
-def major(__x): return (int)((unsigned)(__x)>>16)
-
-def minor(__x): return (int)((__x)&0xFFFF)
-
-
-# Included from sys/flock.h
-F_RDLCK = 01
-F_WRLCK = 02
-F_UNLCK = 03
-INOFLCK = 1
-SETFLCK = 2
-SLPFLCK = 4
-LCK_UNBLOCK = 0
-LCK_BLOCKER = 1
-LCK_BLOCKED = 2
-LCK_WASBLOCK = 4
-MAXEND = 017777777777
-RMTLOCK = 1
-def ENF_LOCK(mode): return (((mode) & (ISGID | IEXEC | (IEXEC >> 3) | (IEXEC >> 6))) == ISGID)
-
-O_RDONLY = 00000000
-O_WRONLY = 00000001
-O_RDWR = 00000002
-O_ACCMODE = 3
-O_NONBLOCK = 00000004
-O_APPEND = 00000010
-O_CREAT = 00000400
-O_TRUNC = 00001000
-O_EXCL = 00002000
-O_NOCTTY = 00004000
-F_DUPFD = 0
-F_GETFD = 1
-F_SETFD = 2
-F_GETFL = 3
-F_SETFL = 4
-F_GETLK = 5
-F_SETLK = 6
-F_SETLKW = 7
-FD_CLOEXEC = 1
-
-# Included from unistd.h
-
-# Included from sys/access.h
-F_OK = 00
-X_OK = 01
-W_OK = 02
-R_OK = 04
-R_ACC = 04
-W_ACC = 02
-X_ACC = 01
-E_ACC = 00
-NO_ACC = 00
-ACC_SELF = 0x00
-ACC_INVOKER = 0x01
-ACC_OBJ_OWNER = 0x02
-ACC_OBJ_GROUP = 0x04
-ACC_OTHERS = 0x08
-ACC_ANY = 0x10
-ACC_ALL = 0x20
-ACC_PERMIT = 0x01
-ACC_DENY = 0x02
-ACC_SPECIFY = 0x03
-SEEK_SET = 0
-SEEK_CUR = 1
-SEEK_END = 2
-STDIN_FILENO = 0
-STDOUT_FILENO = 1
-STDERR_FILENO = 2
-_POSIX_JOB_CONTROL = 1
-_POSIX_SAVED_IDS = 1
-_POSIX_VERSION = 199009L
-_POSIX2_VERSION = 199209L
-_POSIX2_C_VERSION = 199209L
-_POSIX_REENTRANT_FUNCTIONS = 1
-_POSIX_THREADS = 1
-_POSIX_THREAD_ATTR_STACKSIZE = 1
-_POSIX_THREAD_PRIORITY_SCHEDULING = 1
-_POSIX_CHOWN_RESTRICTED = 0
-_POSIX_VDISABLE = 0xFF
-_POSIX_NO_TRUNC = 0
-NULL = 0
-_CS_PATH = 1
-_CSPATH = "/usr/bin"
-_PC_CHOWN_RESTRICTED = 10
-_PC_LINK_MAX = 11
-_PC_MAX_CANON = 12
-_PC_MAX_INPUT = 13
-_PC_NAME_MAX = 14
-_PC_NO_TRUNC = 15
-_PC_PATH_MAX = 16
-_PC_PIPE_BUF = 17
-_PC_VDISABLE = 18
-_SC_ARG_MAX = 0
-_SC_CHILD_MAX = 1
-_SC_CLK_TCK = 2
-_SC_NGROUPS_MAX = 3
-_SC_OPEN_MAX = 4
-_SC_STREAM_MAX = 5
-_SC_TZNAME_MAX = 6
-_SC_JOB_CONTROL = 7
-_SC_SAVED_IDS = 8
-_SC_VERSION = 9
-_SC_POSIX_ARG_MAX = 10
-_SC_POSIX_CHILD_MAX = 11
-_SC_POSIX_LINK_MAX = 12
-_SC_POSIX_MAX_CANON = 13
-_SC_POSIX_MAX_INPUT = 14
-_SC_POSIX_NAME_MAX = 15
-_SC_POSIX_NGROUPS_MAX = 16
-_SC_POSIX_OPEN_MAX = 17
-_SC_POSIX_PATH_MAX = 18
-_SC_POSIX_PIPE_BUF = 19
-_SC_POSIX_SSIZE_MAX = 20
-_SC_POSIX_STREAM_MAX = 21
-_SC_POSIX_TZNAME_MAX = 22
-_SC_BC_BASE_MAX = 23
-_SC_BC_DIM_MAX = 24
-_SC_BC_SCALE_MAX = 25
-_SC_BC_STRING_MAX = 26
-_SC_EQUIV_CLASS_MAX = 27
-_SC_EXPR_NEST_MAX = 28
-_SC_LINE_MAX = 29
-_SC_RE_DUP_MAX = 30
-_SC_2_VERSION = 31
-_SC_2_C_DEV = 32
-_SC_2_FORT_DEV = 33
-_SC_2_FORT_RUN = 34
-_SC_2_LOCALEDEF = 35
-_SC_2_SW_DEV = 36
-_SC_POSIX2_BC_BASE_MAX = 37
-_SC_POSIX2_BC_DIM_MAX = 38
-_SC_POSIX2_BC_SCALE_MAX = 39
-_SC_POSIX2_BC_STRING_MAX = 40
-_SC_POSIX2_EQUIV_CLASS_MAX = 41
-_SC_POSIX2_EXPR_NEST_MAX = 42
-_SC_POSIX2_LINE_MAX = 43
-_SC_POSIX2_RE_DUP_MAX = 44
-_SC_PASS_MAX = 45
-_SC_XOPEN_VERSION = 46
-_SC_ATEXIT_MAX = 47
-_SC_PAGE_SIZE = 48
-_SC_AES_OS_VERSION = 49
-_SC_COLL_WEIGHTS_MAX = 50
-_SC_2_C_BIND = 51
-_SC_2_C_VERSION = 52
-_SC_2_UPE = 53
-_SC_2_CHAR_TERM = 54
-_SC_XOPEN_SHM = 55
-_SC_XOPEN_CRYPT = 56
-_SC_XOPEN_ENH_I18N = 57
-_SC_PAGESIZE = _SC_PAGE_SIZE
-_SC_IOV_MAX = 58
-_SC_REENTRANT_FUNCTIONS = 59
-_SC_THREADS = 60
-_SC_THREAD_ATTR_STACKADDR = 61
-_SC_THREAD_ATTR_STACKSIZE = 62
-_SC_THREAD_FORKALL = 63
-_SC_THREAD_PRIORITY_SCHEDULING = 64
-_SC_THREAD_PRIO_INHERIT = 65
-_SC_THREAD_PRIO_PROTECT = 66
-_SC_THREAD_PROCESS_SHARED = 67
-_SC_THREAD_DATAKEYS_MAX = 68
-_SC_THREAD_STACK_MIN = 69
-_SC_THREAD_THREADS_MAX = 70
-_SC_NPROCESSORS_CONF = 71
-_SC_NPROCESSORS_ONLN = 72
-_XOPEN_VERSION = 4
-_XOPEN_XCU_VERSION = 4
-_XOPEN_XPG3 = 1
-_XOPEN_XPG4 = 1
-_POSIX2_C_BIND = 1
-_POSIX2_C_DEV = 1
-_POSIX2_CHAR_TERM = 1
-_POSIX2_LOCALEDEF = 1
-_POSIX2_UPE = 1
-_POSIX2_FORT_DEV = (-1)
-_POSIX2_FORT_RUN = (-1)
-_POSIX2_SW_DEV = 1
-_XOPEN_CRYPT = 1
-_XOPEN_SHM = 1
-_XOPEN_ENH_I18N = 1
-
-# Included from sys/lockf.h
-
-# Included from sys/stat.h
-
-# Included from sys/mode.h
-_S_IFMT = 0170000
-_S_IFREG = 0100000
-_S_IFDIR = 0040000
-_S_IFBLK = 0060000
-_S_IFCHR = 0020000
-_S_IFIFO = 0010000
-S_ISUID = 0004000
-S_ISGID = 0002000
-S_IRWXU = 0000700
-S_IRUSR = 0000400
-S_IWUSR = 0000200
-S_IXUSR = 0000100
-S_IRWXG = 0000070
-S_IRGRP = 0000040
-S_IWGRP = 0000020
-S_IXGRP = 0000010
-S_IRWXO = 0000007
-S_IROTH = 0000004
-S_IWOTH = 0000002
-S_IXOTH = 0000001
-def S_ISFIFO(m): return (((m)&(_S_IFMT)) == (_S_IFIFO))
-
-def S_ISDIR(m): return (((m)&(_S_IFMT)) == (_S_IFDIR))
-
-def S_ISCHR(m): return (((m)&(_S_IFMT)) == (_S_IFCHR))
-
-def S_ISBLK(m): return (((m)&(_S_IFMT)) == (_S_IFBLK))
-
-def S_ISREG(m): return (((m)&(_S_IFMT)) == (_S_IFREG))
-
-S_ISVTX = 0001000
-S_IFMT = _S_IFMT
-S_IFREG = _S_IFREG
-S_IFDIR = _S_IFDIR
-S_IFBLK = _S_IFBLK
-S_IFCHR = _S_IFCHR
-S_IFIFO = _S_IFIFO
-S_IFSOCK = 0140000
-S_IFLNK = 0120000
-S_IREAD = 0000400
-S_IWRITE = 0000200
-S_IEXEC = 0000100
-S_ENFMT = S_ISGID
-S_IFMPX = (S_IFCHR|S_ISVTX)
-def S_ISMPX(m): return (((m)&(S_IFMT|S_ISVTX)) == (S_IFMPX))
-
-def S_ISLNK(m): return (((m)&(S_IFMT)) == (S_IFLNK))
-
-def S_ISSOCK(m): return (((m)&(S_IFMT)) == (S_IFSOCK))
-
-IFMT = S_IFMT
-IFDIR = S_IFDIR
-IFCHR = S_IFCHR
-IFBLK = S_IFBLK
-IFREG = S_IFREG
-IFIFO = S_IFIFO
-IFSOCK = S_IFSOCK
-IFLNK = S_IFLNK
-ISUID = S_ISUID
-ISGID = S_ISGID
-ISVTX = S_ISVTX
-IREAD = S_IREAD
-IWRITE = S_IWRITE
-IEXEC = S_IEXEC
-S_INMOD = 0xC0000000
-S_IXMOD = 0x40000000
-S_IJRNL = 0x04000000
-S_IXACL = 0x02000000
-S_ITCB = 0x01000000
-S_ITP = 0x00800000
-FS_VMP = 01
-FS_MOUNT = FS_VMP
-FS_REMOTE = 02
-SDEV_REMOTE = 0x80000000
-STX_NORMAL = 0x00
-STX_LINK = 0x01
-STX_MOUNT = 0x02
-STX_HIDDEN = 0x04
-S_ENFMT = S_ISGID
-F_ULOCK = 0
-F_LOCK = 1
-F_TLOCK = 2
-F_TEST = 3
-_AES_OS_VERSION = 1
-O_SYNC = 00000020
-O_NONE = 00000003
-O_EXEC = 00000040
-O_RSHARE = 00010000
-O_DEFER = 00020000
-O_DELAY = 00040000
-O_NDELAY = 00100000
-O_NSHARE = 00200000
-F_GETOWN = 8
-F_SETOWN = 9
-F_CLOSEM = 10
-FNDELAY = O_NONBLOCK
-O_NDELAY = O_NONBLOCK
-FNDELAY = O_NDELAY
-FNONBLOCK = O_NONBLOCK
-FAPPEND = O_APPEND
-FSYNC = O_SYNC
-FASYNC = 00400000
-FSYNCALL = 02000000
-FOPEN = (-1)
-FREAD = (O_RDONLY-FOPEN)
-FWRITE = (O_WRONLY-FOPEN)
-FMPX = 00000200
-FMASK = 00374377
-FFCNTL = (FNONBLOCK|FNDELAY|FAPPEND|FSYNC|FASYNC)
-FCREAT = O_CREAT
-FTRUNC = O_TRUNC
-FEXCL = O_EXCL
-FRSHARE = O_RSHARE
-FDEFER = O_DEFER
-FDELAY = O_DELAY
-FNDELAY = O_NDELAY
-FNSHARE = O_NSHARE
-FEXEC = O_EXEC
-FNOCTTY = O_NOCTTY
-FMOUNT = 01000000
-FREVOKED = 0x20000000
-FKERNEL = 0x40000000
-FAIO = 00000100
-FDOCLONE = 0x10000000
-GCFMARK = 0x00100000
-GCFDEFER = 0x00200000
diff --git a/Lib/aix4/IN.py b/Lib/aix4/IN.py
deleted file mode 100644
index 00f0e1f..0000000
--- a/Lib/aix4/IN.py
+++ /dev/null
@@ -1,165 +0,0 @@
-# Generated by h2py from /usr/include/netinet/in.h
-
-# Included from net/nh.h
-
-# Included from sys/machine.h
-LITTLE_ENDIAN = 1234
-BIG_ENDIAN = 4321
-PDP_ENDIAN = 3412
-BYTE_ORDER = BIG_ENDIAN
-DEFAULT_GPR = 0xDEADBEEF
-MSR_EE = 0x8000
-MSR_PR = 0x4000
-MSR_FP = 0x2000
-MSR_ME = 0x1000
-MSR_FE = 0x0800
-MSR_FE0 = 0x0800
-MSR_SE = 0x0400
-MSR_BE = 0x0200
-MSR_IE = 0x0100
-MSR_FE1 = 0x0100
-MSR_AL = 0x0080
-MSR_IP = 0x0040
-MSR_IR = 0x0020
-MSR_DR = 0x0010
-MSR_PM = 0x0004
-DEFAULT_MSR = (MSR_EE | MSR_ME | MSR_AL | MSR_IR | MSR_DR)
-DEFAULT_USER_MSR = (DEFAULT_MSR | MSR_PR)
-CR_LT = 0x80000000
-CR_GT = 0x40000000
-CR_EQ = 0x20000000
-CR_SO = 0x10000000
-CR_FX = 0x08000000
-CR_FEX = 0x04000000
-CR_VX = 0x02000000
-CR_OX = 0x01000000
-XER_SO = 0x80000000
-XER_OV = 0x40000000
-XER_CA = 0x20000000
-def XER_COMP_BYTE(xer): return ((xer >> 8) & 0x000000FF)
-
-def XER_LENGTH(xer): return (xer & 0x0000007F)
-
-DSISR_IO = 0x80000000
-DSISR_PFT = 0x40000000
-DSISR_LOCK = 0x20000000
-DSISR_FPIO = 0x10000000
-DSISR_PROT = 0x08000000
-DSISR_LOOP = 0x04000000
-DSISR_DRST = 0x04000000
-DSISR_ST = 0x02000000
-DSISR_SEGB = 0x01000000
-DSISR_DABR = 0x00400000
-DSISR_EAR = 0x00100000
-SRR_IS_PFT = 0x40000000
-SRR_IS_ISPEC = 0x20000000
-SRR_IS_IIO = 0x10000000
-SRR_IS_GUARD = 0x10000000
-SRR_IS_PROT = 0x08000000
-SRR_IS_LOOP = 0x04000000
-SRR_PR_FPEN = 0x00100000
-SRR_PR_INVAL = 0x00080000
-SRR_PR_PRIV = 0x00040000
-SRR_PR_TRAP = 0x00020000
-SRR_PR_IMPRE = 0x00010000
-def BUID_7F_SRVAL(raddr): return (0x87F00000 | (((uint)(raddr)) >> 28))
-
-BT_256M = 0x1FFC
-BT_128M = 0x0FFC
-BT_64M = 0x07FC
-BT_32M = 0x03FC
-BT_16M = 0x01FC
-BT_8M = 0x00FC
-BT_4M = 0x007C
-BT_2M = 0x003C
-BT_1M = 0x001C
-BT_512K = 0x000C
-BT_256K = 0x0004
-BT_128K = 0x0000
-BT_NOACCESS = 0x0
-BT_RDONLY = 0x1
-BT_WRITE = 0x2
-BT_VS = 0x2
-BT_VP = 0x1
-def BAT_ESEG(dbatu): return (((uint)(dbatu) >> 28))
-
-MIN_BAT_SIZE = 0x00020000
-MAX_BAT_SIZE = 0x10000000
-def ntohl(x): return (x)
-
-def ntohs(x): return (x)
-
-def htonl(x): return (x)
-
-def htons(x): return (x)
-
-IPPROTO_IP = 0
-IPPROTO_ICMP = 1
-IPPROTO_IGMP = 2
-IPPROTO_GGP = 3
-IPPROTO_TCP = 6
-IPPROTO_EGP = 8
-IPPROTO_PUP = 12
-IPPROTO_UDP = 17
-IPPROTO_IDP = 22
-IPPROTO_TP = 29
-IPPROTO_LOCAL = 63
-IPPROTO_EON = 80
-IPPROTO_BIP = 0x53
-IPPROTO_RAW = 255
-IPPROTO_MAX = 256
-IPPORT_RESERVED = 1024
-IPPORT_USERRESERVED = 5000
-IPPORT_TIMESERVER = 37
-def IN_CLASSA(i): return (((long)(i) & 0x80000000) == 0)
-
-IN_CLASSA_NET = 0xff000000
-IN_CLASSA_NSHIFT = 24
-IN_CLASSA_HOST = 0x00ffffff
-IN_CLASSA_MAX = 128
-def IN_CLASSB(i): return (((long)(i) & 0xc0000000) == 0x80000000)
-
-IN_CLASSB_NET = 0xffff0000
-IN_CLASSB_NSHIFT = 16
-IN_CLASSB_HOST = 0x0000ffff
-IN_CLASSB_MAX = 65536
-def IN_CLASSC(i): return (((long)(i) & 0xe0000000) == 0xc0000000)
-
-IN_CLASSC_NET = 0xffffff00
-IN_CLASSC_NSHIFT = 8
-IN_CLASSC_HOST = 0x000000ff
-def IN_CLASSD(i): return (((long)(i) & 0xf0000000) == 0xe0000000)
-
-def IN_MULTICAST(i): return IN_CLASSD(i)
-
-IN_CLASSD_NET = 0xf0000000
-IN_CLASSD_NSHIFT = 28
-IN_CLASSD_HOST = 0x0fffffff
-INADDR_UNSPEC_GROUP = 0xe0000000
-INADDR_ALLHOSTS_GROUP = 0xe0000001
-INADDR_MAX_LOCAL_GROUP = 0xe00000ff
-def IN_EXPERIMENTAL(i): return (((long)(i) & 0xe0000000) == 0xe0000000)
-
-def IN_BADCLASS(i): return (((long)(i) & 0xf0000000) == 0xf0000000)
-
-INADDR_ANY = 0x00000000
-INADDR_BROADCAST = 0xffffffff
-INADDR_LOOPBACK = 0x7f000001
-INADDR_NONE = 0xffffffff
-IN_LOOPBACKNET = 127
-IP_OPTIONS = 1
-IP_HDRINCL = 2
-IP_TOS = 3
-IP_TTL = 4
-IP_RECVOPTS = 5
-IP_RECVRETOPTS = 6
-IP_RECVDSTADDR = 7
-IP_RETOPTS = 8
-IP_MULTICAST_IF = 9
-IP_MULTICAST_TTL = 10
-IP_MULTICAST_LOOP = 11
-IP_ADD_MEMBERSHIP = 12
-IP_DROP_MEMBERSHIP = 13
-IP_DEFAULT_MULTICAST_TTL = 1
-IP_DEFAULT_MULTICAST_LOOP = 1
-IP_MAX_MEMBERSHIPS = 20
diff --git a/Lib/aix4/SOCKET.py b/Lib/aix4/SOCKET.py
deleted file mode 100644
index 5f7ee3e..0000000
--- a/Lib/aix4/SOCKET.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# Generated by h2py from /usr/include/sys/socket.h
-SOCK_STREAM = 1
-SOCK_DGRAM = 2
-SOCK_RAW = 3
-SOCK_RDM = 4
-SOCK_SEQPACKET = 5
-SO_DEBUG = 0x0001
-SO_ACCEPTCONN = 0x0002
-SO_REUSEADDR = 0x0004
-SO_KEEPALIVE = 0x0008
-SO_DONTROUTE = 0x0010
-SO_BROADCAST = 0x0020
-SO_USELOOPBACK = 0x0040
-SO_LINGER = 0x0080
-SO_OOBINLINE = 0x0100
-SO_CKSUMRECV = 0x0800
-SO_SNDBUF = 0x1001
-SO_RCVBUF = 0x1002
-SO_SNDLOWAT = 0x1003
-SO_RCVLOWAT = 0x1004
-SO_SNDTIMEO = 0x1005
-SO_RCVTIMEO = 0x1006
-SO_ERROR = 0x1007
-SO_TYPE = 0x1008
-SOL_SOCKET = 0xffff
-AF_UNSPEC = 0
-AF_UNIX = 1
-AF_INET = 2
-AF_IMPLINK = 3
-AF_PUP = 4
-AF_CHAOS = 5
-AF_NS = 6
-AF_ISO = 7
-AF_OSI = AF_ISO
-AF_ECMA = 8
-AF_DATAKIT = 9
-AF_CCITT = 10
-AF_SNA = 11
-AF_DECnet = 12
-AF_DLI = 13
-AF_LAT = 14
-AF_HYLINK = 15
-AF_APPLETALK = 16
-AF_ROUTE = 17
-AF_LINK = 18
-pseudo_AF_XTP = 19
-AF_INTF = 20
-AF_RIF = 21
-AF_NETWARE = 22
-AF_NDD = 23
-AF_MAX = 30
-AF_MAX = 20
-PF_UNSPEC = AF_UNSPEC
-PF_UNIX = AF_UNIX
-PF_INET = AF_INET
-PF_IMPLINK = AF_IMPLINK
-PF_PUP = AF_PUP
-PF_CHAOS = AF_CHAOS
-PF_NS = AF_NS
-PF_ISO = AF_ISO
-PF_OSI = AF_ISO
-PF_ECMA = AF_ECMA
-PF_DATAKIT = AF_DATAKIT
-PF_CCITT = AF_CCITT
-PF_SNA = AF_SNA
-PF_DECnet = AF_DECnet
-PF_DLI = AF_DLI
-PF_LAT = AF_LAT
-PF_HYLINK = AF_HYLINK
-PF_APPLETALK = AF_APPLETALK
-PF_ROUTE = AF_ROUTE
-PF_LINK = AF_LINK
-PF_XTP = pseudo_AF_XTP
-PF_INTF = AF_INTF
-PF_RIF = AF_RIF
-PF_INTF = AF_INTF
-PF_NDD = AF_NDD
-PF_MAX = AF_MAX
-SOMAXCONN = 10
-SOMAXCONN = 5
-MSG_MAXIOVLEN = 16
-UIO_MAXIOV = 1024
-UIO_SMALLIOV = 8
-MSG_OOB = 0x1
-MSG_PEEK = 0x2
-MSG_DONTROUTE = 0x4
-MSG_EOR = 0x8
-MSG_TRUNC = 0x10
-MSG_CTRUNC = 0x20
-MSG_WAITALL = 0x40
-MSG_NONBLOCK = 0x4000
-MSG_COMPAT = 0x8000
-SCM_RIGHTS = 0x01
diff --git a/Lib/aix4/TERMIOS.py b/Lib/aix4/TERMIOS.py
deleted file mode 100644
index 6b58f03..0000000
--- a/Lib/aix4/TERMIOS.py
+++ /dev/null
@@ -1,206 +0,0 @@
-# Generated by h2py from /usr/include/termios.h
-
-# Included from standards.h
-
-# Included from sys/types.h
-
-# Included from sys/m_types.h
-NULL = 0
-TRUE = 1
-FALSE = 0
-NBBY = 8
-FHSIZE = 32
-
-# Included from sys/select.h
-
-# Included from sys/time.h
-ITIMER_REAL = 0
-ITIMER_VIRTUAL = 1
-ITIMER_PROF = 2
-ITIMER_VIRT = 3
-ITIMER_REAL1 = 20
-TIMEOFDAY = 9
-TIMERID_ALRM = (ITIMER_REAL)
-TIMERID_REAL = (ITIMER_REAL)
-TIMERID_VIRTUAL = (ITIMER_VIRTUAL)
-TIMERID_PROF = (ITIMER_PROF)
-TIMERID_VIRT = (ITIMER_VIRT)
-TIMERID_TOD = (TIMERID_VIRT+1)
-TIMERID_REAL1 = (ITIMER_REAL1)
-NALRM = 1
-NPROF = 1
-NVIRTUAL = 2
-NTIMEOFDAY = 5
-NTIMERS = (NALRM + NPROF + NVIRTUAL + NTIMEOFDAY)
-NALRM_THREAD = 1
-NTIMERS_THREAD = (NALRM_THREAD)
-MIN_SECS_SINCE_EPOCH = 0
-uS_PER_SECOND = (1000000)
-NS_PER_uS = (1000)
-MAX_SECS_TO_uS = 4000
-MAX_NS_TO_uS = 294967296
-NS_PER_SEC = 1000000000
-uS_PER_SEC = (NS_PER_SEC / 1000)
-NS_PER_MSEC = (NS_PER_SEC / 1000)
-MAX_DEC_SECS = 2
-MAX_DEC_NS = 147483647
-DST_NONE = 0
-DST_USA = 1
-DST_AUST = 2
-DST_WET = 3
-DST_MET = 4
-DST_EET = 5
-DST_CAN = 6
-
-# Included from time.h
-NULL = 0
-CLOCKS_PER_SEC = 1000000
-CLK_TCK = 100
-
-# Included from stddef.h
-NULL = 0
-TIMELEN = 26
-NLTBMAX = 64
-NO_TIMEOUT = 0
-INF_TIMEOUT = -1
-def NFDS(x): return ((x) & 0x0000FFFF)
-
-def LOW_HALF(x): return NFDS(x)
-
-def NMSGS(x): return (((x) >> 16) & 0x0000FFFF)
-
-def HIGH_HALF(x): return NMSGS(x)
-
-FD_SETSIZE = 2048
-def major(__x): return (int)((unsigned)(__x)>>16)
-
-def minor(__x): return (int)((__x)&0xFFFF)
-
-NCCS = 16
-CSMAP_DIR = "/usr/lib/nls/csmap/"
-TCSANOW = 0
-TCSADRAIN = 1
-TCSAFLUSH = 2
-TCIFLUSH = 0
-TCOFLUSH = 1
-TCIOFLUSH = 2
-TCOOFF = 0
-TCOON = 1
-TCIOFF = 2
-TCION = 3
-VINTR = 0
-VQUIT = 1
-VERASE = 2
-VKILL = 3
-VEOF = 4
-VEOL = 5
-VSTART = 7
-VSTOP = 8
-VSUSP = 9
-VMIN = 4
-VTIME = 5
-VEOL2 = 6
-VDSUSP = 10
-VREPRINT = 11
-VDISCRD = 12
-VWERSE = 13
-VLNEXT = 14
-VSTRT = VSTART
-B0 = 0x00000000
-B50 = 0x00000001
-B75 = 0x00000002
-B110 = 0x00000003
-B134 = 0x00000004
-B150 = 0x00000005
-B200 = 0x00000006
-B300 = 0x00000007
-B600 = 0x00000008
-B1200 = 0x00000009
-B1800 = 0x0000000a
-B2400 = 0x0000000b
-B4800 = 0x0000000c
-B9600 = 0x0000000d
-B19200 = 0x0000000e
-B38400 = 0x0000000f
-EXTA = B19200
-EXTB = B38400
-IGNBRK = 0x00000001
-BRKINT = 0x00000002
-IGNPAR = 0x00000004
-PARMRK = 0x00000008
-INPCK = 0x00000010
-ISTRIP = 0x00000020
-INLCR = 0x00000040
-IGNCR = 0x00000080
-ICRNL = 0x00000100
-IXON = 0x00000200
-IXOFF = 0x00000400
-IUCLC = 0x00000800
-IXANY = 0x00001000
-IMAXBEL = 0x00010000
-OPOST = 0x00000001
-OLCUC = 0x00000002
-ONLCR = 0x00000004
-OCRNL = 0x00000008
-ONOCR = 0x00000010
-ONLRET = 0x00000020
-OFILL = 0x00000040
-OFDEL = 0x00000080
-CRDLY = 0x00000300
-CR0 = 0x00000000
-CR1 = 0x00000100
-CR2 = 0x00000200
-CR3 = 0x00000300
-TABDLY = 0x00000c00
-TAB0 = 0x00000000
-TAB1 = 0x00000400
-TAB2 = 0x00000800
-TAB3 = 0x00000c00
-BSDLY = 0x00001000
-BS0 = 0x00000000
-BS1 = 0x00001000
-FFDLY = 0x00002000
-FF0 = 0x00000000
-FF1 = 0x00002000
-NLDLY = 0x00004000
-NL0 = 0x00000000
-NL1 = 0x00004000
-VTDLY = 0x00008000
-VT0 = 0x00000000
-VT1 = 0x00008000
-DLY_MASK = (NLDLY | CRDLY | TABDLY | BSDLY | VTDLY | FFDLY)
-OXTABS = 0x00040000
-ONOEOT = 0x00080000
-_CBAUD = 0x0000000f
-CSIZE = 0x00000030
-CS5 = 0x00000000
-CS6 = 0x00000010
-CS7 = 0x00000020
-CS8 = 0x00000030
-CSTOPB = 0x00000040
-CREAD = 0x00000080
-PARENB = 0x00000100
-PARODD = 0x00000200
-HUPCL = 0x00000400
-CLOCAL = 0x00000800
-_CIBAUD = 0x000f0000
-_IBSHIFT = 16
-CIBAUD = _CIBAUD
-IBSHIFT = _IBSHIFT
-PAREXT = 0x00100000
-ISIG = 0x00000001
-ICANON = 0x00000002
-XCASE = 0x00000004
-ECHO = 0x00000008
-ECHOE = 0x00000010
-ECHOK = 0x00000020
-ECHONL = 0x00000040
-NOFLSH = 0x00000080
-TOSTOP = 0x00010000
-ECHOCTL = 0x00020000
-ECHOPRT = 0x00040000
-ECHOKE = 0x00080000
-FLUSHO = 0x00100000
-ALTWERASE = 0x00400000
-PENDIN = 0x20000000
-IEXTEN = 0x00200000
diff --git a/Lib/aix4/regen b/Lib/aix4/regen
deleted file mode 100755
index 94016627..0000000
--- a/Lib/aix4/regen
+++ /dev/null
@@ -1,11 +0,0 @@
-#! /bin/sh
-case `uname -sv` in
-'AIX 4'*)  ;;
-*)      echo Probably not on an AIX 4 system 1>&2
-        exit 1;;
-esac
-set -v
-h2py.py /usr/include/fcntl.h
-h2py.py /usr/include/sys/socket.h
-h2py.py -i '(u_long)' /usr/include/netinet/in.h
-h2py.py /usr/include/termios.h
diff --git a/Lib/freebsd2/FCNTL.py b/Lib/freebsd2/FCNTL.py
deleted file mode 100755
index 8862073..0000000
--- a/Lib/freebsd2/FCNTL.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Generated by h2py from /usr/include/sys/fcntl.h
-
-
-# Included from machine/endian.h
-_MACHINE_ENDIAN_H_ = 1
-_QUAD_HIGHWORD = 1
-_QUAD_LOWWORD = 0
-LITTLE_ENDIAN = 1234
-BIG_ENDIAN = 4321
-PDP_ENDIAN = 3412
-BYTE_ORDER = LITTLE_ENDIAN
-
-# Included from machine/types.h
-NBBY = 8
-FD_SETSIZE = 256
-O_RDONLY = 0x0000
-O_WRONLY = 0x0001
-O_RDWR = 0x0002
-O_ACCMODE = 0x0003
-FREAD = 0x0001
-FWRITE = 0x0002
-O_NONBLOCK = 0x0004
-O_APPEND = 0x0008
-O_SHLOCK = 0x0010
-O_EXLOCK = 0x0020
-O_ASYNC = 0x0040
-O_FSYNC = 0x0080
-O_CREAT = 0x0200
-O_TRUNC = 0x0400
-O_EXCL = 0x0800
-FMARK = 0x1000
-FDEFER = 0x2000
-FHASLOCK = 0x4000
-O_NOCTTY = 0
-
-FAPPEND = O_APPEND
-FASYNC = O_ASYNC
-FFSYNC = O_FSYNC
-FNONBLOCK = O_NONBLOCK
-FNDELAY = O_NONBLOCK
-O_NDELAY = O_NONBLOCK
-F_DUPFD = 0
-F_GETFD = 1
-F_SETFD = 2
-F_GETFL = 3
-F_SETFL = 4
-F_GETOWN = 5
-F_SETOWN = 6
-F_GETLK = 7
-F_SETLK = 8
-F_SETLKW = 9
-FD_CLOEXEC = 1
-F_RDLCK = 1
-F_UNLCK = 2
-F_WRLCK = 3
-F_WAIT = 0x010
-F_FLOCK = 0x020
-F_POSIX = 0x040
-LOCK_SH = 0x01
-LOCK_EX = 0x02
-LOCK_NB = 0x04
-LOCK_UN = 0x08
diff --git a/Lib/freebsd2/regen b/Lib/freebsd2/regen
deleted file mode 100755
index 1516e60..0000000
--- a/Lib/freebsd2/regen
+++ /dev/null
@@ -1,6 +0,0 @@
-#! /bin/sh
-set -v
-#h2py /usr/include/sys/fcntl.h
-h2py /usr/include/sys/socket.h
-h2py -i '(u_long)' /usr/include/netinet/in.h
-h2py /usr/include/termios.h
diff --git a/Lib/generic/regen b/Lib/generic/regen
deleted file mode 100755
index 5c502c2..0000000
--- a/Lib/generic/regen
+++ /dev/null
@@ -1,6 +0,0 @@
-#! /bin/sh
-set -v
-python ../../Tools/scripts/h2py.py /usr/include/fcntl.h
-python ../../Tools/scripts/h2py.py /usr/include/sys/socket.h
-python ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/netinet/in.h
-python ../../Tools/scripts/h2py.py /usr/include/termios.h
diff --git a/Lib/irix5/AL.py b/Lib/irix5/AL.py
deleted file mode 100755
index ed17cde..0000000
--- a/Lib/irix5/AL.py
+++ /dev/null
@@ -1,61 +0,0 @@
-RATE_48000 	= 48000
-RATE_44100	= 44100
-RATE_32000	= 32000
-RATE_22050	= 22050
-RATE_16000	= 16000
-RATE_11025	= 11025
-RATE_8000	= 8000
-
-SAMPFMT_TWOSCOMP= 1
-SAMPFMT_FLOAT	= 32
-SAMPFMT_DOUBLE	= 64
-
-SAMPLE_8	= 1
-SAMPLE_16	= 2
-	# SAMPLE_24 is the low 24 bits of a long, sign extended to 32 bits
-SAMPLE_24	= 4
-
-MONO		= 1
-STEREO		= 2
-QUADRO		= 4			# 4CHANNEL is not a legal Python name
-
-INPUT_LINE	= 0
-INPUT_MIC	= 1
-INPUT_DIGITAL	= 2
-
-MONITOR_OFF	= 0
-MONITOR_ON	= 1
-
-ERROR_NUMBER		= 0
-ERROR_TYPE		= 1
-ERROR_LOCATION_LSP 	= 2
-ERROR_LOCATION_MSP	= 3
-ERROR_LENGTH		= 4
-
-ERROR_INPUT_UNDERFLOW	= 0
-ERROR_OUTPUT_OVERFLOW	= 1
-
-# These seem to be not supported anymore:
-##HOLD, RELEASE			= 0, 1
-##ATTAIL, ATHEAD, ATMARK, ATTIME	= 0, 1, 2, 3
-
-DEFAULT_DEVICE	= 1
-
-INPUT_SOURCE		= 0
-LEFT_INPUT_ATTEN	= 1
-RIGHT_INPUT_ATTEN	= 2
-INPUT_RATE		= 3
-OUTPUT_RATE		= 4
-LEFT_SPEAKER_GAIN	= 5
-RIGHT_SPEAKER_GAIN	= 6
-INPUT_COUNT		= 7
-OUTPUT_COUNT		= 8
-UNUSED_COUNT		= 9
-SYNC_INPUT_TO_AES	= 10
-SYNC_OUTPUT_TO_AES	= 11
-MONITOR_CTL		= 12
-LEFT_MONITOR_ATTEN	= 13
-RIGHT_MONITOR_ATTEN	= 14
-
-ENUM_VALUE	= 0	# only certain values are valid
-RANGE_VALUE	= 1	# any value in range is valid
diff --git a/Lib/irix5/AWARE.py b/Lib/irix5/AWARE.py
deleted file mode 100755
index 30be50b..0000000
--- a/Lib/irix5/AWARE.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# 
-# Copyright (c) 1992 Aware, Inc. All rights reserved.
-# 
-# Copyright Unpublished, Aware Inc.  All Rights Reserved.
-# This software contains proprietary and confidential
-# information of Aware, Inc.  Use, disclosure or
-# reproduction is prohibited without the prior express
-# written consent of Aware, Inc.
-# 
-#
-
-#
-# awareAudio.h - Aware Compression Library Parameter Header
-#
-#   01/21/92	Original Version by Brian Knittel and Jonathon Devine
-#
-
-import CL
-
-# Aware Audio Specific Parameters - For both MPEG Audio and Multirate
-CL.CHANNEL_POLICY = CL.NUMBER_OF_PARAMS + 0
-CL.NOISE_MARGIN = CL.NUMBER_OF_PARAMS + 1
-CL.BITRATE_POLICY = CL.NUMBER_OF_PARAMS + 2
-
-# Additional parameters for MPEG Audio
-CL.BITRATE_TARGET = CL.NUMBER_OF_PARAMS + 3
-CL.LAYER = CL.NUMBER_OF_PARAMS + 4
-
-# read/write for compression configuration
-# read for state during compression/decompression 
-
-#
-# Channel Policy
-#
-AWCMP_STEREO = 1
-AWCMP_JOINT_STEREO = 2
-AWCMP_INDEPENDENT = 3
-
-# 
-# read/write for compression configuration,
-# read for state during compression
-#
-#
-# Bit-rate Policy
-#
-AWCMP_FIXED_RATE = 1
-AWCMP_CONST_QUAL = 2
-AWCMP_LOSSLESS = 4
-
-#
-# Layer values
-#
-AWCMP_MPEG_LAYER_I = 1
-AWCMP_MPEG_LAYER_II = 2
diff --git a/Lib/irix5/CD.py b/Lib/irix5/CD.py
deleted file mode 100755
index ad56561..0000000
--- a/Lib/irix5/CD.py
+++ /dev/null
@@ -1,34 +0,0 @@
-ERROR		= 0
-NODISC		= 1
-READY		= 2
-PLAYING		= 3
-PAUSED		= 4
-STILL		= 5
-
-AUDIO		= 0
-PNUM		= 1
-INDEX		= 2
-PTIME		= 3
-ATIME		= 4
-CATALOG		= 5
-IDENT		= 6
-CONTROL		= 7
-
-CDDA_DATASIZE	= 2352
-
-##CDDA_SUBCODESIZE	= (sizeof(struct subcodeQ))
-##CDDA_BLOCKSIZE	= (sizeof(struct cdframe))
-##CDDA_NUMSAMPLES	= (CDDA_DATASIZE/2)
-##
-##CDQ_PREEMP_MASK	= 0xd
-##CDQ_COPY_MASK	= 0xb
-##CDQ_DDATA_MASK	= 0xd
-##CDQ_BROADCAST_MASK	= 0x8
-##CDQ_PREEMPHASIS	= 0x1
-##CDQ_COPY_PERMITTED	= 0x2		
-##CDQ_DIGITAL_DATA	= 0x4
-##CDQ_BROADCAST_USE	= 0x8
-##
-##CDQ_MODE1	= 0x1
-##CDQ_MODE2	= 0x2
-##CDQ_MODE3	= 0x3
diff --git a/Lib/irix5/CL.py b/Lib/irix5/CL.py
deleted file mode 100755
index 468ecaa..0000000
--- a/Lib/irix5/CL.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Backward compatible module CL.
-# All relevant symbols are now defined in the module cl.
-try:
-	from cl import *
-except ImportError:
-	from CL_old import *
-else:
-	del CompressImage
-	del DecompressImage
-	del GetAlgorithmName
-	del OpenCompressor
-	del OpenDecompressor
-	del QueryAlgorithms
-	del QueryMaxHeaderSize
-	del QueryScheme
-	del QuerySchemeFromName
-	del SetDefault
-	del SetMax
-	del SetMin
-	try:
-		del cvt_type
-	except NameError:
-		pass
-	del error
diff --git a/Lib/irix5/CL_old.py b/Lib/irix5/CL_old.py
deleted file mode 100755
index 41c56e0..0000000
--- a/Lib/irix5/CL_old.py
+++ /dev/null
@@ -1,236 +0,0 @@
-#
-# cl.h - Compression Library typedefs and prototypes
-#
-#   01/07/92	Cleanup by Brian Knittel
-#   02/18/92	Original Version by Brian Knittel
-#
-
-#
-# originalFormat parameter values
-#
-MAX_NUMBER_OF_ORIGINAL_FORMATS = 32
-
-# Audio
-MONO = 0
-STEREO_INTERLEAVED = 1
-
-# Video 
-# YUV is defined to be the same thing as YCrCb (luma and two chroma components).
-# 422 is appended to YUV (or YCrCb) if the chroma is sub-sampled by 2 
-#	horizontally, packed as U Y1 V Y2 (byte order).
-# 422HC is appended to YUV (or YCrCb) if the chroma is sub-sampled by 2 
-#	vertically in addition to horizontally, and is packed the same as 
-#	422 except that U & V are not valid on the second line.
-#
-RGB = 0
-RGBX = 1
-RGBA = 2
-RGB332 = 3
-
-GRAYSCALE = 4
-Y = 4
-YUV = 5	
-YCbCr = 5	
-YUV422 = 6				# 4:2:2 sampling
-YCbCr422 = 6				# 4:2:2 sampling
-YUV422HC = 7				# 4:1:1 sampling
-YCbCr422HC = 7				# 4:1:1 sampling
-YUV422DC = 7				# 4:1:1 sampling
-YCbCr422DC = 7				# 4:1:1 sampling
-
-BEST_FIT = -1	
-
-def BytesPerSample(s):
-	if s in (MONO, YUV):
-		return 2
-	elif s == STEREO_INTERLEAVED:
-		return 4
-	else:
-		return 0
-
-def BytesPerPixel(f):
-	if f in (RGB, YUV):
-		return 3
-	elif f in (RGBX, RGBA):
-		return 4
-	elif f in (RGB332, GRAYSCALE):
-		return 1
-	else:
-		return 2
-
-def AudioFormatName(f):
-	if f == MONO:
-		return 'MONO'
-	elif f == STEREO_INTERLEAVED:
-		return 'STEREO_INTERLEAVED'
-	else:
-		return 'Not a valid format'
-
-def VideoFormatName(f):
-	if f == RGB:
-		return 'RGB'
-	elif f == RGBX:
-		return 'RGBX'
-	elif f == RGBA:
-		return 'RGBA'
-	elif f == RGB332:
-		return 'RGB332'
-	elif f == GRAYSCALE:
-		return 'GRAYSCALE'
-	elif f == YUV:
-		return 'YUV'
-	elif f == YUV422:
-		return 'YUV422'
-	elif f == YUV422DC:
-		return 'YUV422DC'
-	else:
-		return 'Not a valid format'
-
-MAX_NUMBER_OF_AUDIO_ALGORITHMS = 32
-MAX_NUMBER_OF_VIDEO_ALGORITHMS = 32
-
-#
-# Algorithm types
-#
-AUDIO = 0
-VIDEO = 1
-
-def AlgorithmNumber(scheme):
-	return scheme & 0x7fff
-def AlgorithmType(scheme):
-	return (scheme >> 15) & 1
-def Algorithm(type, n):
-	return n | ((type & 1) << 15)
-
-#
-# "compressionScheme" argument values
-#
-UNKNOWN_SCHEME = -1
-
-UNCOMPRESSED_AUDIO = Algorithm(AUDIO, 0)
-G711_ULAW = Algorithm(AUDIO, 1)
-ULAW = Algorithm(AUDIO, 1)
-G711_ALAW = Algorithm(AUDIO, 2)
-ALAW = Algorithm(AUDIO, 2)
-AWARE_MPEG_AUDIO = Algorithm(AUDIO, 3)
-AWARE_MULTIRATE = Algorithm(AUDIO, 4)
-    
-UNCOMPRESSED = Algorithm(VIDEO, 0)
-UNCOMPRESSED_VIDEO = Algorithm(VIDEO, 0)
-RLE = Algorithm(VIDEO, 1)
-JPEG = Algorithm(VIDEO, 2)
-MPEG_VIDEO = Algorithm(VIDEO, 3)
-MVC1 = Algorithm(VIDEO, 4)
-RTR = Algorithm(VIDEO, 5)
-RTR1 = Algorithm(VIDEO, 5)
-
-#
-# Parameters
-#
-MAX_NUMBER_OF_PARAMS = 256
-# Default Parameters
-IMAGE_WIDTH = 0
-IMAGE_HEIGHT = 1 
-ORIGINAL_FORMAT = 2
-INTERNAL_FORMAT = 3
-COMPONENTS = 4
-BITS_PER_COMPONENT = 5
-FRAME_RATE = 6
-COMPRESSION_RATIO = 7
-EXACT_COMPRESSION_RATIO = 8
-FRAME_BUFFER_SIZE = 9 
-COMPRESSED_BUFFER_SIZE = 10
-BLOCK_SIZE = 11
-PREROLL = 12
-FRAME_TYPE = 13
-ALGORITHM_ID = 14
-ALGORITHM_VERSION = 15
-ORIENTATION = 16
-NUMBER_OF_FRAMES = 17
-SPEED = 18
-LAST_FRAME_INDEX = 19
-NUMBER_OF_PARAMS = 20
-
-# JPEG Specific Parameters
-QUALITY_FACTOR = NUMBER_OF_PARAMS + 0
-
-# MPEG Specific Parameters
-END_OF_SEQUENCE = NUMBER_OF_PARAMS + 0
-
-# RTR Specific Parameters
-QUALITY_LEVEL = NUMBER_OF_PARAMS + 0
-ZOOM_X = NUMBER_OF_PARAMS + 1
-ZOOM_Y = NUMBER_OF_PARAMS + 2
-
-#
-# Parameter value types
-#
-ENUM_VALUE = 0				# only certain constant values are valid
-RANGE_VALUE = 1				# any value in a given range is valid
-FLOATING_ENUM_VALUE = 2			# only certain constant floating point values are valid
-FLOATING_RANGE_VALUE = 3		# any value in a given floating point range is valid
-
-#
-# Algorithm Functionality
-#
-DECOMPRESSOR = 1
-COMPRESSOR = 2
-CODEC = 3
-
-#
-# Buffer types
-#
-NONE = 0
-FRAME = 1
-DATA = 2
-
-#
-# Frame types
-#
-NONE = 0
-KEYFRAME = 1
-INTRA = 1
-PREDICTED = 2
-BIDIRECTIONAL = 3
-
-#
-# Orientations
-#
-TOP_DOWN = 0
-BOTTOM_UP = 1
-
-#
-# SGI Proprietaty Algorithm Header Start Code
-#
-HEADER_START_CODE = 0xc1C0DEC
-
-#
-# error codes
-#
-
-BAD_NO_BUFFERSPACE =  -2		# no space for internal buffers
-BAD_PVBUFFER =  -3			# param/val buffer doesn't make sense
-BAD_BUFFERLENGTH_NEG =  -4		# negative buffer length
-BAD_BUFFERLENGTH_ODD =  -5		# odd length parameter/value buffer
-BAD_PARAM =  -6				# invalid parameter
-BAD_COMPRESSION_SCHEME =  -7		# compression scheme parameter invalid
-BAD_COMPRESSOR_HANDLE =  -8		# compression handle parameter invalid
-BAD_COMPRESSOR_HANDLE_POINTER = -9	# compression handle pointer invalid
-BAD_BUFFER_HANDLE = -10			# buffer handle invalid
-BAD_BUFFER_QUERY_SIZE = -11		# buffer query size too large
-JPEG_ERROR = -12			# error from libjpeg
-BAD_FRAME_SIZE = -13			# frame size invalid
-PARAM_OUT_OF_RANGE = -14		# parameter out of range
-ADDED_ALGORITHM_ERROR = -15		# added algorithm had a unique error
-BAD_ALGORITHM_TYPE = -16		# bad algorithm type
-BAD_ALGORITHM_NAME = -17		# bad algorithm name
-BAD_BUFFERING = -18			# bad buffering calls
-BUFFER_NOT_CREATED = -19		# buffer not created
-BAD_BUFFER_EXISTS = -20			# buffer already created
-BAD_INTERNAL_FORMAT = -21		# invalid internal format
-BAD_BUFFER_POINTER = -22		# invalid buffer pointer
-FRAME_BUFFER_SIZE_ZERO = -23		# frame buffer has zero size
-BAD_STREAM_HEADER = -24			# invalid stream header
-
-BAD_LICENSE = -25			# netls license not valid
-AWARE_ERROR = -26			# error from libawcmp
diff --git a/Lib/irix5/DEVICE.py b/Lib/irix5/DEVICE.py
deleted file mode 100755
index 7ace8cb..0000000
--- a/Lib/irix5/DEVICE.py
+++ /dev/null
@@ -1,400 +0,0 @@
-NULLDEV = 0
-BUTOFFSET = 1
-VALOFFSET = 256
-PSEUDOFFSET = 512
-BUT2OFFSET = 3840
-TIMOFFSET = 515
-XKBDOFFSET = 143
-BUTCOUNT = 255
-VALCOUNT = 256
-TIMCOUNT = 4
-XKBDCOUNT = 28
-USERBUTOFFSET = 4096
-USERVALOFFSET = 12288
-USERPSEUDOFFSET = 16384
-BUT0 = 1
-BUT1 = 2
-BUT2 = 3
-BUT3 = 4
-BUT4 = 5
-BUT5 = 6
-BUT6 = 7
-BUT7 = 8
-BUT8 = 9
-BUT9 = 10
-BUT10 = 11
-BUT11 = 12
-BUT12 = 13
-BUT13 = 14
-BUT14 = 15
-BUT15 = 16
-BUT16 = 17
-BUT17 = 18
-BUT18 = 19
-BUT19 = 20
-BUT20 = 21
-BUT21 = 22
-BUT22 = 23
-BUT23 = 24
-BUT24 = 25
-BUT25 = 26
-BUT26 = 27
-BUT27 = 28
-BUT28 = 29
-BUT29 = 30
-BUT30 = 31
-BUT31 = 32
-BUT32 = 33
-BUT33 = 34
-BUT34 = 35
-BUT35 = 36
-BUT36 = 37
-BUT37 = 38
-BUT38 = 39
-BUT39 = 40
-BUT40 = 41
-BUT41 = 42
-BUT42 = 43
-BUT43 = 44
-BUT44 = 45
-BUT45 = 46
-BUT46 = 47
-BUT47 = 48
-BUT48 = 49
-BUT49 = 50
-BUT50 = 51
-BUT51 = 52
-BUT52 = 53
-BUT53 = 54
-BUT54 = 55
-BUT55 = 56
-BUT56 = 57
-BUT57 = 58
-BUT58 = 59
-BUT59 = 60
-BUT60 = 61
-BUT61 = 62
-BUT62 = 63
-BUT63 = 64
-BUT64 = 65
-BUT65 = 66
-BUT66 = 67
-BUT67 = 68
-BUT68 = 69
-BUT69 = 70
-BUT70 = 71
-BUT71 = 72
-BUT72 = 73
-BUT73 = 74
-BUT74 = 75
-BUT75 = 76
-BUT76 = 77
-BUT77 = 78
-BUT78 = 79
-BUT79 = 80
-BUT80 = 81
-BUT81 = 82
-BUT82 = 83
-MAXKBDBUT = 83
-BUT100 = 101
-BUT101 = 102
-BUT102 = 103
-BUT103 = 104
-BUT104 = 105
-BUT105 = 106
-BUT106 = 107
-BUT107 = 108
-BUT108 = 109
-BUT109 = 110
-BUT110 = 111
-BUT111 = 112
-BUT112 = 113
-BUT113 = 114
-BUT114 = 115
-BUT115 = 116
-BUT116 = 117
-BUT117 = 118
-BUT118 = 119
-BUT119 = 120
-BUT120 = 121
-BUT121 = 122
-BUT122 = 123
-BUT123 = 124
-BUT124 = 125
-BUT125 = 126
-BUT126 = 127
-BUT127 = 128
-BUT128 = 129
-BUT129 = 130
-BUT130 = 131
-BUT131 = 132
-BUT132 = 133
-BUT133 = 134
-BUT134 = 135
-BUT135 = 136
-BUT136 = 137
-BUT137 = 138
-BUT138 = 139
-BUT139 = 140
-BUT140 = 141
-BUT141 = 142
-BUT142 = 143
-BUT143 = 144
-BUT144 = 145
-BUT145 = 146
-BUT146 = 147
-BUT147 = 148
-BUT148 = 149
-BUT149 = 150
-BUT150 = 151
-BUT151 = 152
-BUT152 = 153
-BUT153 = 154
-BUT154 = 155
-BUT155 = 156
-BUT156 = 157
-BUT157 = 158
-BUT158 = 159
-BUT159 = 160
-BUT160 = 161
-BUT161 = 162
-BUT162 = 163
-BUT163 = 164
-BUT164 = 165
-BUT165 = 166
-BUT166 = 167
-BUT167 = 168
-BUT168 = 169
-BUT181 = 182
-BUT182 = 183
-BUT183 = 184
-BUT184 = 185
-BUT185 = 186
-BUT186 = 187
-BUT187 = 188
-BUT188 = 189
-BUT189 = 190
-MOUSE1 = 101
-MOUSE2 = 102
-MOUSE3 = 103
-LEFTMOUSE = 103
-MIDDLEMOUSE = 102
-RIGHTMOUSE = 101
-LPENBUT = 104
-BPAD0 = 105
-BPAD1 = 106
-BPAD2 = 107
-BPAD3 = 108
-LPENVALID = 109
-SWBASE = 111
-SW0 = 111
-SW1 = 112
-SW2 = 113
-SW3 = 114
-SW4 = 115
-SW5 = 116
-SW6 = 117
-SW7 = 118
-SW8 = 119
-SW9 = 120
-SW10 = 121
-SW11 = 122
-SW12 = 123
-SW13 = 124
-SW14 = 125
-SW15 = 126
-SW16 = 127
-SW17 = 128
-SW18 = 129
-SW19 = 130
-SW20 = 131
-SW21 = 132
-SW22 = 133
-SW23 = 134
-SW24 = 135
-SW25 = 136
-SW26 = 137
-SW27 = 138
-SW28 = 139
-SW29 = 140
-SW30 = 141
-SW31 = 142
-SBBASE = 182
-SBPICK = 182
-SBBUT1 = 183
-SBBUT2 = 184
-SBBUT3 = 185
-SBBUT4 = 186
-SBBUT5 = 187
-SBBUT6 = 188
-SBBUT7 = 189
-SBBUT8 = 190
-AKEY = 11
-BKEY = 36
-CKEY = 28
-DKEY = 18
-EKEY = 17
-FKEY = 19
-GKEY = 26
-HKEY = 27
-IKEY = 40
-JKEY = 34
-KKEY = 35
-LKEY = 42
-MKEY = 44
-NKEY = 37
-OKEY = 41
-PKEY = 48
-QKEY = 10
-RKEY = 24
-SKEY = 12
-TKEY = 25
-UKEY = 33
-VKEY = 29
-WKEY = 16
-XKEY = 21
-YKEY = 32
-ZKEY = 20
-ZEROKEY = 46
-ONEKEY = 8
-TWOKEY = 14
-THREEKEY = 15
-FOURKEY = 22
-FIVEKEY = 23
-SIXKEY = 30
-SEVENKEY = 31
-EIGHTKEY = 38
-NINEKEY = 39
-BREAKKEY = 1
-SETUPKEY = 2
-CTRLKEY = 3
-LEFTCTRLKEY = CTRLKEY
-CAPSLOCKKEY = 4
-RIGHTSHIFTKEY = 5
-LEFTSHIFTKEY = 6
-NOSCRLKEY = 13
-ESCKEY = 7
-TABKEY = 9
-RETKEY = 51
-SPACEKEY = 83
-LINEFEEDKEY = 60
-BACKSPACEKEY = 61
-DELKEY = 62
-SEMICOLONKEY = 43
-PERIODKEY = 52
-COMMAKEY = 45
-QUOTEKEY = 50
-ACCENTGRAVEKEY = 55
-MINUSKEY = 47
-VIRGULEKEY = 53
-BACKSLASHKEY = 57
-EQUALKEY = 54
-LEFTBRACKETKEY = 49
-RIGHTBRACKETKEY = 56
-LEFTARROWKEY = 73
-DOWNARROWKEY = 74
-RIGHTARROWKEY = 80
-UPARROWKEY = 81
-PAD0 = 59
-PAD1 = 58
-PAD2 = 64
-PAD3 = 65
-PAD4 = 63
-PAD5 = 69
-PAD6 = 70
-PAD7 = 67
-PAD8 = 68
-PAD9 = 75
-PADPF1 = 72
-PADPF2 = 71
-PADPF3 = 79
-PADPF4 = 78
-PADPERIOD = 66
-PADMINUS = 76
-PADCOMMA = 77
-PADENTER = 82
-LEFTALTKEY = 143
-RIGHTALTKEY = 144
-RIGHTCTRLKEY = 145
-F1KEY = 146
-F2KEY = 147
-F3KEY = 148
-F4KEY = 149
-F5KEY = 150
-F6KEY = 151
-F7KEY = 152
-F8KEY = 153
-F9KEY = 154
-F10KEY = 155
-F11KEY = 156
-F12KEY = 157
-PRINTSCREENKEY = 158
-SCROLLLOCKKEY = 159
-PAUSEKEY = 160
-INSERTKEY = 161
-HOMEKEY = 162
-PAGEUPKEY = 163
-ENDKEY = 164
-PAGEDOWNKEY = 165
-NUMLOCKKEY = 166
-PADVIRGULEKEY = 167
-PADASTERKEY = 168
-PADPLUSKEY = 169
-SGIRESERVED = 256
-DIAL0 = 257
-DIAL1 = 258
-DIAL2 = 259
-DIAL3 = 260
-DIAL4 = 261
-DIAL5 = 262
-DIAL6 = 263
-DIAL7 = 264
-DIAL8 = 265
-MOUSEX = 266
-MOUSEY = 267
-LPENX = 268
-LPENY = 269
-BPADX = 270
-BPADY = 271
-CURSORX = 272
-CURSORY = 273
-GHOSTX = 274
-GHOSTY = 275
-SBTX = 276
-SBTY = 277
-SBTZ = 278
-SBRX = 279
-SBRY = 280
-SBRZ = 281
-SBPERIOD = 282
-TIMER0 = 515
-TIMER1 = 516
-TIMER2 = 517
-TIMER3 = 518
-KEYBD = 513
-RAWKEYBD = 514
-VALMARK = 523
-REDRAW = 528
-INPUTCHANGE = 534
-QFULL = 535
-QREADERROR = 538
-WINFREEZE = 539
-WINTHAW = 540
-REDRAWICONIC = 541
-WINQUIT = 542
-DEPTHCHANGE = 543
-WINSHUT = 546
-DRAWOVERLAY = 547
-VIDEO = 548
-MENUBUTTON = RIGHTMOUSE
-WINCLOSE = 537
-KEYBDFNAMES = 544
-KEYBDFSTRINGS = 545
-MAXSGIDEVICE = 20000
-GERROR = 524
-WMSEND = 529
-WMREPLY = 530
-WMGFCLOSE = 531
-WMTXCLOSE = 532
-MODECHANGE = 533
-PIECECHANGE = 536
diff --git a/Lib/irix5/ERRNO.py b/Lib/irix5/ERRNO.py
deleted file mode 100755
index d49e964..0000000
--- a/Lib/irix5/ERRNO.py
+++ /dev/null
@@ -1,147 +0,0 @@
-# Generated by h2py from /usr/include/errno.h
-
-# Included from sys/errno.h
-__KBASE = 1000
-__IRIXBASE = 1000
-EPERM = 1
-ENOENT = 2
-ESRCH = 3
-EINTR = 4
-EIO = 5
-ENXIO = 6
-E2BIG = 7
-ENOEXEC = 8
-EBADF = 9
-ECHILD = 10
-EAGAIN = 11
-ENOMEM = 12
-EACCES = 13
-EFAULT = 14
-ENOTBLK = 15
-EBUSY = 16
-EEXIST = 17
-EXDEV = 18
-ENODEV = 19
-ENOTDIR = 20
-EISDIR = 21
-EINVAL = 22
-ENFILE = 23
-EMFILE = 24
-ENOTTY = 25
-ETXTBSY = 26
-EFBIG = 27
-ENOSPC = 28
-ESPIPE = 29
-EROFS = 30
-EMLINK = 31
-EPIPE = 32
-EDOM = 33
-ERANGE = 34
-ENOMSG = 35
-EIDRM = 36
-ECHRNG = 37
-EL2NSYNC = 38
-EL3HLT = 39
-EL3RST = 40
-ELNRNG = 41
-EUNATCH = 42
-ENOCSI = 43
-EL2HLT = 44
-EDEADLK = 45
-ENOLCK = 46
-EBADE = 50
-EBADR = 51
-EXFULL = 52
-ENOANO = 53
-EBADRQC = 54
-EBADSLT = 55
-EDEADLOCK = 56
-EBFONT = 57
-ENOSTR = 60
-ENODATA = 61
-ETIME = 62
-ENOSR = 63
-ENONET = 64
-ENOPKG = 65
-EREMOTE = 66
-ENOLINK = 67
-EADV = 68
-ESRMNT = 69
-ECOMM = 70
-EPROTO = 71
-EMULTIHOP = 74
-EBADMSG = 77
-ENAMETOOLONG = 78
-EOVERFLOW = 79
-ENOTUNIQ = 80
-EBADFD = 81
-EREMCHG = 82
-ELIBACC = 83
-ELIBBAD = 84
-ELIBSCN = 85
-ELIBMAX = 86
-ELIBEXEC = 87
-EILSEQ = 88
-ENOSYS = 89
-ELOOP = 90
-ERESTART = 91
-ESTRPIPE = 92
-ENOTEMPTY = 93
-EUSERS = 94
-ENOTSOCK = 95
-EDESTADDRREQ = 96
-EMSGSIZE = 97
-EPROTOTYPE = 98
-ENOPROTOOPT = 99
-EPROTONOSUPPORT = 120
-ESOCKTNOSUPPORT = 121
-EOPNOTSUPP = 122
-EPFNOSUPPORT = 123
-EAFNOSUPPORT = 124
-EADDRINUSE = 125
-EADDRNOTAVAIL = 126
-ENETDOWN = 127
-ENETUNREACH = 128
-ENETRESET = 129
-ECONNABORTED = 130
-ECONNRESET = 131
-ENOBUFS = 132
-EISCONN = 133
-ENOTCONN = 134
-ESHUTDOWN = 143
-ETOOMANYREFS = 144
-ETIMEDOUT = 145
-ECONNREFUSED = 146
-EHOSTDOWN = 147
-EHOSTUNREACH = 148
-EWOULDBLOCK = __KBASE+101
-EWOULDBLOCK = EAGAIN
-EALREADY = 149
-EINPROGRESS = 150
-ESTALE = 151
-EIORESID = 500
-EUCLEAN = 135
-ENOTNAM = 137
-ENAVAIL = 138
-EISNAM = 139
-EREMOTEIO = 140
-EINIT = 141
-EREMDEV = 142
-ECANCELED = 158
-ECANCELED = 1000
-EDQUOT = 1133
-ENFSREMOTE = 1135
-ETCP_EBASE = 100
-ETCP_ELIMIT = 129
-ENAMI_EBASE = 129
-ENAMI_ELIMIT = 131
-ENFS_EBASE = 131
-ENFS_ELIMIT = 135
-ELASTERRNO = 135
-TCP_EBASE = ETCP_EBASE
-TCP_ELIMIT = ETCP_ELIMIT
-NAMI_EBASE = ENAMI_EBASE
-NAMI_ELIMIT = ENAMI_ELIMIT
-NFS_EBASE = ENFS_EBASE
-NFS_ELIMIT = ENFS_ELIMIT
-LASTERRNO = ELASTERRNO
diff --git a/Lib/irix5/FCNTL.py b/Lib/irix5/FCNTL.py
deleted file mode 100755
index 96d8451..0000000
--- a/Lib/irix5/FCNTL.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# Generated by h2py from /usr/include/sys/fcntl.h
-
-# Included from sys/types.h
-
-# Included from sgidefs.h
-_MIPS_ISA_MIPS1 = 1
-_MIPS_ISA_MIPS2 = 2
-_MIPS_ISA_MIPS3 = 3
-_MIPS_ISA_MIPS4 = 4
-_MIPS_SIM_ABI32 = 1
-_MIPS_SIM_NABI32 = 2
-_MIPS_SIM_ABI64 = 3
-P_MYID = (-1)
-P_MYHOSTID = (-1)
-
-# Included from sys/bsd_types.h
-
-# Included from sys/mkdev.h
-ONBITSMAJOR = 7
-ONBITSMINOR = 8
-OMAXMAJ = 0x7f
-OMAXMIN = 0xff
-NBITSMAJOR = 14
-NBITSMINOR = 18
-MAXMAJ = 0x1ff
-MAXMIN = 0x3ffff
-OLDDEV = 0
-NEWDEV = 1
-MKDEV_VER = NEWDEV
-def major(dev): return __major(MKDEV_VER, dev)
-
-def minor(dev): return __minor(MKDEV_VER, dev)
-
-
-# Included from sys/select.h
-FD_SETSIZE = 1024
-NBBY = 8
-FNDELAY = 0x04
-FAPPEND = 0x08
-FSYNC = 0x10
-FNONBLOCK = 0x80
-FASYNC = 0x1000
-FNONBLK = FNONBLOCK
-FDIRECT = 0x8000
-FCREAT = 0x0100
-FTRUNC = 0x0200
-FEXCL = 0x0400
-FNOCTTY = 0x0800
-O_RDONLY = 0
-O_WRONLY = 1
-O_RDWR = 2
-O_NDELAY = 0x04
-O_APPEND = 0x08
-O_SYNC = 0x10
-O_NONBLOCK = 0x80
-O_DIRECT = 0x8000
-O_CREAT = 0x100
-O_TRUNC = 0x200
-O_EXCL = 0x400
-O_NOCTTY = 0x800
-F_DUPFD = 0
-F_GETFD = 1
-F_SETFD = 2
-F_GETFL = 3
-F_SETFL = 4
-F_GETLK = 14
-F_SETLK = 6
-F_SETLKW = 7
-F_CHKFL = 8
-F_ALLOCSP = 10
-F_FREESP = 11
-F_SETBSDLK = 12
-F_SETBSDLKW = 13
-F_DIOINFO = 30
-F_FSGETXATTR = 31
-F_FSSETXATTR = 32
-F_GETLK64 = 33
-F_SETLK64 = 34
-F_SETLKW64 = 35
-F_ALLOCSP64 = 36
-F_FREESP64 = 37
-F_GETBMAP = 38
-F_FSSETDM = 39
-F_RSETLK = 20
-F_RGETLK = 21
-F_RSETLKW = 22
-F_GETOWN = 23
-F_SETOWN = 24
-F_O_GETLK = 5
-F_O_GETOWN = 10
-F_O_SETOWN = 11
-F_RDLCK = 01
-F_WRLCK = 02
-F_UNLCK = 03
-O_ACCMODE = 3
-FD_CLOEXEC = 1
-FD_NODUP_FORK = 4
diff --git a/Lib/irix5/FILE.py b/Lib/irix5/FILE.py
deleted file mode 100755
index 05697c1..0000000
--- a/Lib/irix5/FILE.py
+++ /dev/null
@@ -1,239 +0,0 @@
-# Generated by h2py from /usr/include/sys/file.h
-
-# Included from sys/types.h
-
-# Included from sgidefs.h
-_MIPS_ISA_MIPS1 = 1
-_MIPS_ISA_MIPS2 = 2
-_MIPS_ISA_MIPS3 = 3
-_MIPS_ISA_MIPS4 = 4
-_MIPS_SIM_ABI32 = 1
-_MIPS_SIM_NABI32 = 2
-_MIPS_SIM_ABI64 = 3
-P_MYID = (-1)
-P_MYHOSTID = (-1)
-
-# Included from sys/bsd_types.h
-
-# Included from sys/mkdev.h
-ONBITSMAJOR = 7
-ONBITSMINOR = 8
-OMAXMAJ = 0x7f
-OMAXMIN = 0xff
-NBITSMAJOR = 14
-NBITSMINOR = 18
-MAXMAJ = 0x1ff
-MAXMIN = 0x3ffff
-OLDDEV = 0
-NEWDEV = 1
-MKDEV_VER = NEWDEV
-def major(dev): return __major(MKDEV_VER, dev)
-
-def minor(dev): return __minor(MKDEV_VER, dev)
-
-
-# Included from sys/select.h
-FD_SETSIZE = 1024
-NBBY = 8
-
-# Included from sys/sema.h
-HP_NOPOLICY = 0
-HP_ADDOFF = 1
-HP_MULOFF = 2
-SEMA_NAMSZ = 8
-SEMA_NOHIST = 0x1
-SEMA_LIFO = 0x2
-SEMA_MUTEX = 0x4
-SEMA_METER = 0x8
-SEMAOP_PSEMA = 1
-SEMAOP_VSEMA = 2
-SEMAOP_CPSEMA = 3
-SEMAOP_CVSEMA = 4
-SEMAOP_WSEMA = 5
-SEMAOP_UNSEMA = 6
-SEMAOP_INIT = 7
-SEMAOP_FREE = 8
-SSOP_PHIT = 1
-SSOP_PSLP = 2
-SSOP_PWAKE = 6
-SSOP_PRESIG = 7
-SSOP_POSTSIG = 8
-SSOP_VNOWAKE = 3
-SSOP_VWAKE = 4
-SSOP_CPHIT = 1
-SSOP_CPMISS = 5
-SSOP_CVNOWAKE = 3
-SSOP_CVWAKE = 4
-SSOP_WMISS = 5
-SSOP_WWAKE = 4
-SSOP_RMV = 9
-TZERO = 10
-SEMA_NOP = 0
-SEMA_WAKE = 1
-SEMA_VSEMA = 2
-SEMA_SPINOP = 3
-MR_ACCESS = 0x1
-MR_UPDATE = 0x2
-def cv_signal(cv): return cvsema(cv);
-
-def cv_destroy(cv): return freesema(cv)
-
-def mutex_enter(m): return psema(m, PZERO | PNOSTOP)
-
-def mutex_exit(m): return vsema(m)
-
-def mutex_destroy(m): return freesema(m)
-
-def MUTEX_HELD(m): return (ownsema(m))
-
-def MUTEX_HELD(m): return (1)
-
-RW_READER = MR_ACCESS
-RW_WRITER = MR_UPDATE
-def rw_exit(r): return mrunlock(r)
-
-def rw_tryupgrade(r): return cmrpromote(r)
-
-def rw_downgrade(r): return mrdemote(r)
-
-def rw_destroy(r): return mrfree(r)
-
-def RW_WRITE_HELD(r): return ismrlocked(r, MR_UPDATE)
-
-def RW_READ_HELD(r): return ismrlocked(r, MR_ACCESS)
-
-
-# Included from sys/splock.h
-SPLOCKNAMSIZ = 8
-SPLOCK_NONE = 0
-SPLOCK_SOFT = 1
-SPLOCK_HARD = 2
-OWNER_NONE = -1
-MAP_LOCKID = 0
-SPLOCK_MAX = (96*1024)
-SPLOCK_MAX = 32768
-MIN_POOL_SIZE = 256
-MAX_POOL_SIZE = 16384
-DEF_SEMA_POOL = 8192
-DEF_VNODE_POOL = 1024
-DEF_FILE_POOL = 1024
-def ownlock(x): return 1
-
-def splock(x): return 1
-
-def io_splock(x): return 1
-
-def apvsema(x): return vsema(x)
-
-def apcpsema(x): return cpsema(x)
-
-def apcvsema(x): return cvsema(x)
-
-def mp_mrunlock(a): return mrunlock(a)
-
-def apvsema(x): return 0
-
-def apcpsema(x): return 1
-
-def apcvsema(x): return 0
-
-def mp_mrunlock(a): return 0
-
-
-# Included from sys/fcntl.h
-FNDELAY = 0x04
-FAPPEND = 0x08
-FSYNC = 0x10
-FNONBLOCK = 0x80
-FASYNC = 0x1000
-FNONBLK = FNONBLOCK
-FDIRECT = 0x8000
-FCREAT = 0x0100
-FTRUNC = 0x0200
-FEXCL = 0x0400
-FNOCTTY = 0x0800
-O_RDONLY = 0
-O_WRONLY = 1
-O_RDWR = 2
-O_NDELAY = 0x04
-O_APPEND = 0x08
-O_SYNC = 0x10
-O_NONBLOCK = 0x80
-O_DIRECT = 0x8000
-O_CREAT = 0x100
-O_TRUNC = 0x200
-O_EXCL = 0x400
-O_NOCTTY = 0x800
-F_DUPFD = 0
-F_GETFD = 1
-F_SETFD = 2
-F_GETFL = 3
-F_SETFL = 4
-F_GETLK = 14
-F_SETLK = 6
-F_SETLKW = 7
-F_CHKFL = 8
-F_ALLOCSP = 10
-F_FREESP = 11
-F_SETBSDLK = 12
-F_SETBSDLKW = 13
-F_DIOINFO = 30
-F_FSGETXATTR = 31
-F_FSSETXATTR = 32
-F_GETLK64 = 33
-F_SETLK64 = 34
-F_SETLKW64 = 35
-F_ALLOCSP64 = 36
-F_FREESP64 = 37
-F_GETBMAP = 38
-F_FSSETDM = 39
-F_RSETLK = 20
-F_RGETLK = 21
-F_RSETLKW = 22
-F_GETOWN = 23
-F_SETOWN = 24
-F_O_GETLK = 5
-F_O_GETOWN = 10
-F_O_SETOWN = 11
-F_RDLCK = 01
-F_WRLCK = 02
-F_UNLCK = 03
-O_ACCMODE = 3
-FD_CLOEXEC = 1
-FD_NODUP_FORK = 4
-FMASK = 0x90FF
-FOPEN = 0xFFFFFFFF
-FREAD = 0x01
-FWRITE = 0x02
-FNDELAY = 0x04
-FAPPEND = 0x08
-FSYNC = 0x10
-FNONBLOCK = 0x80
-FASYNC = 0x1000
-FNONBLK = FNONBLOCK
-FDIRECT = 0x8000
-FCREAT = 0x0100
-FTRUNC = 0x0200
-FEXCL = 0x0400
-FNOCTTY = 0x0800
-IRIX4_FASYNC = 0x40
-FMARK = 0x4000
-FDEFER = 0x2000
-FINPROGRESS = 0x0400
-FINVIS = 0x0100
-FNMFS = 0x2000
-FCLOSEXEC = 001
-FDSHD = 0x0001
-FDNOMARK = 0x0002
-FDIGNPROGRESS = 0x0004
-LOCK_SH = 1
-LOCK_EX = 2
-LOCK_NB = 4
-LOCK_UN = 8
-F_OK = 0
-X_OK = 1
-W_OK = 2
-R_OK = 4
-L_SET = 0
-L_INCR = 1
-L_XTND = 2
diff --git a/Lib/irix5/FL.py b/Lib/irix5/FL.py
deleted file mode 100755
index f85237b..0000000
--- a/Lib/irix5/FL.py
+++ /dev/null
@@ -1,289 +0,0 @@
-# Constants used by the FORMS library (module fl).
-# This corresponds to "forms.h".
-# Recommended use: import FL; ... FL.NORMAL_BOX ... etc.
-# Alternate use: from FL import *; ... NORMAL_BOX ... etc.
-
-_v20 = 1
-_v21 = 1
-##import fl
-##try:
-##	_v20 = (fl.get_rgbmode <> None)
-##except:
-##	_v20 = 0
-##del fl
-
-NULL = 0
-FALSE = 0
-TRUE = 1
-
-EVENT = -1
-
-LABEL_SIZE = 64
-if _v20:
-	SHORTCUT_SIZE = 32
-PLACE_FREE = 0
-PLACE_SIZE = 1
-PLACE_ASPECT = 2
-PLACE_MOUSE = 3
-PLACE_CENTER = 4
-PLACE_POSITION = 5
-FL_PLACE_FULLSCREEN = 6
-FIND_INPUT = 0
-FIND_AUTOMATIC = 1
-FIND_MOUSE = 2
-BEGIN_GROUP = 10000
-END_GROUP = 20000
-ALIGN_TOP = 0
-ALIGN_BOTTOM = 1
-ALIGN_LEFT = 2
-ALIGN_RIGHT = 3
-ALIGN_CENTER = 4
-NO_BOX = 0
-UP_BOX = 1
-DOWN_BOX = 2
-FLAT_BOX = 3
-BORDER_BOX = 4
-SHADOW_BOX = 5
-FRAME_BOX = 6
-ROUNDED_BOX = 7
-RFLAT_BOX = 8
-RSHADOW_BOX = 9
-TOP_BOUND_COL = 51
-LEFT_BOUND_COL = 55
-BOT_BOUND_COL = 40
-RIGHT_BOUND_COL = 35
-COL1 = 47
-MCOL = 49
-LCOL = 0
-BOUND_WIDTH = 3.0
-DRAW = 0
-PUSH = 1
-RELEASE = 2
-ENTER = 3
-LEAVE = 4
-MOUSE = 5
-FOCUS = 6
-UNFOCUS = 7
-KEYBOARD = 8
-STEP = 9
-MOVE = 10
-FONT_NAME = 'Helvetica'
-FONT_BOLDNAME = 'Helvetica-Bold'
-FONT_ITALICNAME = 'Helvetica-Oblique'
-FONT_FIXEDNAME = 'Courier'
-FONT_ICONNAME = 'Icon'
-SMALL_FONT = 8.0
-NORMAL_FONT = 11.0
-LARGE_FONT = 20.0
-NORMAL_STYLE = 0
-BOLD_STYLE = 1
-ITALIC_STYLE = 2
-FIXED_STYLE = 3
-ENGRAVED_STYLE = 4
-ICON_STYLE = 5
-BITMAP = 3
-NORMAL_BITMAP = 0
-BITMAP_BOXTYPE = NO_BOX
-BITMAP_COL1 = 0
-BITMAP_COL2 = COL1
-BITMAP_LCOL = LCOL
-BITMAP_ALIGN = ALIGN_BOTTOM
-BITMAP_MAXSIZE = 128*128
-BITMAP_BW = BOUND_WIDTH
-BOX = 1
-BOX_BOXTYPE = UP_BOX
-BOX_COL1 = COL1
-BOX_LCOL = LCOL
-BOX_ALIGN = ALIGN_CENTER
-BOX_BW = BOUND_WIDTH
-BROWSER = 71
-NORMAL_BROWSER = 0
-SELECT_BROWSER = 1
-HOLD_BROWSER = 2
-MULTI_BROWSER = 3
-BROWSER_BOXTYPE = DOWN_BOX
-BROWSER_COL1 = COL1
-BROWSER_COL2 = 3
-BROWSER_LCOL = LCOL
-BROWSER_ALIGN = ALIGN_BOTTOM
-BROWSER_SLCOL = COL1
-BROWSER_BW = BOUND_WIDTH
-BROWSER_LINELENGTH = 128
-BROWSER_MAXLINE = 512
-BUTTON = 11
-NORMAL_BUTTON = 0
-PUSH_BUTTON = 1
-RADIO_BUTTON = 2
-HIDDEN_BUTTON = 3
-TOUCH_BUTTON = 4
-INOUT_BUTTON = 5
-RETURN_BUTTON = 6
-if _v20:
-	HIDDEN_RET_BUTTON = 7
-BUTTON_BOXTYPE = UP_BOX
-BUTTON_COL1 = COL1
-BUTTON_COL2 = COL1
-BUTTON_LCOL = LCOL
-BUTTON_ALIGN = ALIGN_CENTER
-BUTTON_MCOL1 = MCOL
-BUTTON_MCOL2 = MCOL
-BUTTON_BW = BOUND_WIDTH
-if _v20:
-	CHART = 4
-	BAR_CHART = 0
-	HORBAR_CHART = 1
-	LINE_CHART = 2
-	FILLED_CHART = 3
-	SPIKE_CHART = 4
-	PIE_CHART = 5
-	SPECIALPIE_CHART = 6
-	CHART_BOXTYPE = BORDER_BOX
-	CHART_COL1 = COL1
-	CHART_LCOL = LCOL
-	CHART_ALIGN = ALIGN_BOTTOM
-	CHART_BW = BOUND_WIDTH
-	CHART_MAX = 128
-CHOICE = 42
-NORMAL_CHOICE = 0
-CHOICE_BOXTYPE = DOWN_BOX
-CHOICE_COL1 = COL1
-CHOICE_COL2 = LCOL
-CHOICE_LCOL = LCOL
-CHOICE_ALIGN = ALIGN_LEFT
-CHOICE_BW = BOUND_WIDTH
-CHOICE_MCOL = MCOL
-CHOICE_MAXITEMS = 128
-CHOICE_MAXSTR = 64
-CLOCK = 61
-SQUARE_CLOCK = 0
-ROUND_CLOCK = 1
-CLOCK_BOXTYPE = UP_BOX
-CLOCK_COL1 = 37
-CLOCK_COL2 = 42
-CLOCK_LCOL = LCOL
-CLOCK_ALIGN = ALIGN_BOTTOM
-CLOCK_TOPCOL = COL1
-CLOCK_BW = BOUND_WIDTH
-COUNTER = 25
-NORMAL_COUNTER = 0
-SIMPLE_COUNTER = 1
-COUNTER_BOXTYPE = UP_BOX
-COUNTER_COL1 = COL1
-COUNTER_COL2 = 4
-COUNTER_LCOL = LCOL
-COUNTER_ALIGN = ALIGN_BOTTOM
-if _v20:
-	COUNTER_BW = BOUND_WIDTH
-else:
-	DEFAULT = 51
-	RETURN_DEFAULT = 0
-	ALWAYS_DEFAULT = 1
-DIAL = 22
-NORMAL_DIAL = 0
-LINE_DIAL = 1
-DIAL_BOXTYPE = NO_BOX
-DIAL_COL1 = COL1
-DIAL_COL2 = 37
-DIAL_LCOL = LCOL
-DIAL_ALIGN = ALIGN_BOTTOM
-DIAL_TOPCOL = COL1
-DIAL_BW = BOUND_WIDTH
-FREE = 101
-NORMAL_FREE = 1
-SLEEPING_FREE = 2
-INPUT_FREE = 3
-CONTINUOUS_FREE = 4
-ALL_FREE = 5
-INPUT = 31
-NORMAL_INPUT = 0
-if _v20:
-	FLOAT_INPUT = 1
-	INT_INPUT = 2
-	HIDDEN_INPUT = 3
-	if _v21:
-		MULTILINE_INPUT = 4
-		SECRET_INPUT = 5
-else:
-	ALWAYS_INPUT = 1
-INPUT_BOXTYPE = DOWN_BOX
-INPUT_COL1 = 13
-INPUT_COL2 = 5
-INPUT_LCOL = LCOL
-INPUT_ALIGN = ALIGN_LEFT
-INPUT_TCOL = LCOL
-INPUT_CCOL = 4
-INPUT_BW = BOUND_WIDTH
-INPUT_MAX = 128
-LIGHTBUTTON = 12
-LIGHTBUTTON_BOXTYPE = UP_BOX
-LIGHTBUTTON_COL1 = 39
-LIGHTBUTTON_COL2 = 3
-LIGHTBUTTON_LCOL = LCOL
-LIGHTBUTTON_ALIGN = ALIGN_CENTER
-LIGHTBUTTON_TOPCOL = COL1
-LIGHTBUTTON_MCOL = MCOL
-LIGHTBUTTON_BW1 = BOUND_WIDTH
-LIGHTBUTTON_BW2 = BOUND_WIDTH/2.0
-LIGHTBUTTON_MINSIZE = 12.0
-MENU = 41
-TOUCH_MENU = 0
-PUSH_MENU = 1
-MENU_BOXTYPE = BORDER_BOX
-MENU_COL1 = 55
-MENU_COL2 = 37
-MENU_LCOL = LCOL
-MENU_ALIGN = ALIGN_CENTER
-MENU_BW = BOUND_WIDTH
-MENU_MAX = 300
-POSITIONER = 23
-NORMAL_POSITIONER = 0
-POSITIONER_BOXTYPE = DOWN_BOX
-POSITIONER_COL1 = COL1
-POSITIONER_COL2 = 1
-POSITIONER_LCOL = LCOL
-POSITIONER_ALIGN = ALIGN_BOTTOM
-POSITIONER_BW = BOUND_WIDTH
-ROUNDBUTTON = 13
-ROUNDBUTTON_BOXTYPE = NO_BOX
-ROUNDBUTTON_COL1 = 7
-ROUNDBUTTON_COL2 = 3
-ROUNDBUTTON_LCOL = LCOL
-ROUNDBUTTON_ALIGN = ALIGN_CENTER
-ROUNDBUTTON_TOPCOL = COL1
-ROUNDBUTTON_MCOL = MCOL
-ROUNDBUTTON_BW = BOUND_WIDTH
-SLIDER = 21
-VALSLIDER = 24
-VERT_SLIDER = 0
-HOR_SLIDER = 1
-VERT_FILL_SLIDER = 2
-HOR_FILL_SLIDER = 3
-VERT_NICE_SLIDER = 4
-HOR_NICE_SLIDER = 5
-SLIDER_BOXTYPE = DOWN_BOX
-SLIDER_COL1 = COL1
-SLIDER_COL2 = COL1
-SLIDER_LCOL = LCOL
-SLIDER_ALIGN = ALIGN_BOTTOM
-SLIDER_BW1 = BOUND_WIDTH
-SLIDER_BW2 = BOUND_WIDTH*0.75
-SLIDER_FINE = 0.05
-SLIDER_WIDTH = 0.08
-TEXT = 2
-NORMAL_TEXT = 0
-TEXT_BOXTYPE = NO_BOX
-TEXT_COL1 = COL1
-TEXT_LCOL = LCOL
-TEXT_ALIGN = ALIGN_LEFT
-TEXT_BW = BOUND_WIDTH
-TIMER = 62
-NORMAL_TIMER = 0
-VALUE_TIMER = 1
-HIDDEN_TIMER = 2
-TIMER_BOXTYPE = DOWN_BOX
-TIMER_COL1 = COL1
-TIMER_COL2 = 1
-TIMER_LCOL = LCOL
-TIMER_ALIGN = ALIGN_CENTER
-TIMER_BW = BOUND_WIDTH
-TIMER_BLINKRATE = 0.2
diff --git a/Lib/irix5/GET.py b/Lib/irix5/GET.py
deleted file mode 100755
index 9c3d7d6..0000000
--- a/Lib/irix5/GET.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Symbols from <gl/get.h>
-
-BCKBUFFER = 0x1
-FRNTBUFFER = 0x2
-DRAWZBUFFER = 0x4
-DMRGB = 0
-DMSINGLE = 1
-DMDOUBLE = 2
-DMRGBDOUBLE = 5
-HZ30 = 0
-HZ60 = 1
-NTSC = 2
-HDTV = 3
-VGA = 4
-IRIS3K = 5
-PR60 = 6
-PAL = 9
-HZ30_SG = 11
-A343 = 14
-STR_RECT = 15
-VOF0 = 16
-VOF1 = 17
-VOF2 = 18
-VOF3 = 19
-SGI0 = 20
-SGI1 = 21
-SGI2 = 22
-HZ72 = 23
-GL_VIDEO_REG = 0x00800000
-GLV_GENLOCK = 0x00000001
-GLV_UNBLANK = 0x00000002
-GLV_SRED = 0x00000004
-GLV_SGREEN = 0x00000008
-GLV_SBLUE = 0x00000010
-GLV_SALPHA = 0x00000020
-GLV_TTLGENLOCK = 0x00000080
-GLV_TTLSYNC = GLV_TTLGENLOCK
-GLV_GREENGENLOCK = 0x0000100
-LEFTPLANE = 0x0001
-RIGHTPLANE = 0x0002
-BOTTOMPLANE = 0x0004
-TOPPLANE = 0x0008
-NEARPLANE = 0x0010
-FARPLANE = 0x0020
-## GETDEF = __GL_GET_H__
-NOBUFFER = 0x0
-BOTHBUFFERS = 0x3
-DMINTENSITYSINGLE = 3
-DMINTENSITYDOUBLE = 4
-MONSPECIAL = 0x20
-HZ50 = 3
-MONA = 5
-MONB = 6
-MONC = 7
-MOND = 8
-MON_ALL = 12
-MON_GEN_ALL = 13
-CMAPMULTI = 0
-CMAPONE = 1
diff --git a/Lib/irix5/GL.py b/Lib/irix5/GL.py
deleted file mode 100755
index 9f02f65..0000000
--- a/Lib/irix5/GL.py
+++ /dev/null
@@ -1,393 +0,0 @@
-NULL = 0
-FALSE = 0
-TRUE = 1
-ATTRIBSTACKDEPTH = 10
-VPSTACKDEPTH = 8
-MATRIXSTACKDEPTH = 32
-NAMESTACKDEPTH = 1025
-STARTTAG = -2
-ENDTAG = -3
-BLACK = 0
-RED = 1
-GREEN = 2
-YELLOW = 3
-BLUE = 4
-MAGENTA = 5
-CYAN = 6
-WHITE = 7
-PUP_CLEAR = 0
-PUP_COLOR = 1
-PUP_BLACK = 2
-PUP_WHITE = 3
-NORMALDRAW = 0x010
-PUPDRAW = 0x020
-OVERDRAW = 0x040
-UNDERDRAW = 0x080
-CURSORDRAW = 0x100
-DUALDRAW = 0x200
-PATTERN_16 = 16
-PATTERN_32 = 32
-PATTERN_64 = 64
-PATTERN_16_SIZE = 16
-PATTERN_32_SIZE = 64
-PATTERN_64_SIZE = 256
-SRC_AUTO = 0
-SRC_FRONT = 1
-SRC_BACK = 2
-SRC_ZBUFFER = 3
-SRC_PUP = 4
-SRC_OVER = 5
-SRC_UNDER = 6
-SRC_FRAMEGRABBER = 7
-BF_ZERO = 0
-BF_ONE = 1
-BF_DC = 2
-BF_SC = 2
-BF_MDC = 3
-BF_MSC = 3
-BF_SA = 4
-BF_MSA = 5
-BF_DA = 6
-BF_MDA = 7
-BF_MIN_SA_MDA = 8
-AF_NEVER = 0
-AF_LESS = 1
-AF_EQUAL = 2
-AF_LEQUAL = 3
-AF_GREATER = 4
-AF_NOTEQUAL = 5
-AF_GEQUAL = 6
-AF_ALWAYS = 7
-ZF_NEVER = 0
-ZF_LESS = 1
-ZF_EQUAL = 2
-ZF_LEQUAL = 3
-ZF_GREATER = 4
-ZF_NOTEQUAL = 5
-ZF_GEQUAL = 6
-ZF_ALWAYS = 7
-ZSRC_DEPTH = 0
-ZSRC_COLOR = 1
-SMP_OFF = 0x0
-SMP_ON = 0x1
-SMP_SMOOTHER = 0x2
-SML_OFF = 0x0
-SML_ON = 0x1
-SML_SMOOTHER = 0x2
-SML_END_CORRECT = 0x4
-PYSM_OFF = 0
-PYSM_ON = 1
-PYSM_SHRINK = 2
-DT_OFF = 0
-DT_ON = 1
-PUP_NONE = 0
-PUP_GREY = 0x1
-PUP_BOX = 0x2
-PUP_CHECK = 0x4
-GLC_OLDPOLYGON = 0
-GLC_ZRANGEMAP = 1
-GLC_MQUEUERATE = 2
-GLC_SOFTATTACH = 3
-GLC_MANAGEBG = 4
-GLC_SLOWMAPCOLORS = 5
-GLC_INPUTCHANGEBUG = 6
-GLC_NOBORDERBUG = 7
-GLC_SET_VSYNC = 8
-GLC_GET_VSYNC = 9
-GLC_VSYNC_SLEEP = 10
-GLC_COMPATRATE = 15
-C16X1 = 0
-C16X2 = 1
-C32X1 = 2
-C32X2 = 3
-CCROSS = 4
-FLAT = 0
-GOURAUD = 1
-LO_ZERO = 0x0
-LO_AND = 0x1
-LO_ANDR = 0x2
-LO_SRC = 0x3
-LO_ANDI = 0x4
-LO_DST = 0x5
-LO_XOR = 0x6
-LO_OR = 0x7
-LO_NOR = 0x8
-LO_XNOR = 0x9
-LO_NDST = 0xa
-LO_ORR = 0xb
-LO_NSRC = 0xc
-LO_ORI = 0xd
-LO_NAND = 0xe
-LO_ONE = 0xf
-INFOCUSSCRN = -2
-ST_KEEP = 0
-ST_ZERO = 1
-ST_REPLACE = 2
-ST_INCR = 3
-ST_DECR = 4
-ST_INVERT = 5
-SF_NEVER = 0
-SF_LESS = 1
-SF_EQUAL = 2
-SF_LEQUAL = 3
-SF_GREATER = 4
-SF_NOTEQUAL = 5
-SF_GEQUAL = 6
-SF_ALWAYS = 7
-SS_OFF = 0
-SS_DEPTH = 1
-PYM_FILL = 1
-PYM_POINT = 2
-PYM_LINE = 3
-PYM_HOLLOW = 4
-PYM_LINE_FAST = 5
-FG_OFF = 0
-FG_ON = 1
-FG_DEFINE = 2
-FG_VTX_EXP = 2
-FG_VTX_LIN = 3
-FG_PIX_EXP = 4
-FG_PIX_LIN = 5
-FG_VTX_EXP2 = 6
-FG_PIX_EXP2 = 7
-PM_SHIFT = 0
-PM_EXPAND = 1
-PM_C0 = 2
-PM_C1 = 3
-PM_ADD24 = 4
-PM_SIZE = 5
-PM_OFFSET = 6
-PM_STRIDE = 7
-PM_TTOB = 8
-PM_RTOL = 9
-PM_ZDATA = 10
-PM_WARP = 11
-PM_RDX = 12
-PM_RDY = 13
-PM_CDX = 14
-PM_CDY = 15
-PM_XSTART = 16
-PM_YSTART = 17
-PM_VO1 = 1000
-NAUTO = 0
-NNORMALIZE = 1
-AC_CLEAR = 0
-AC_ACCUMULATE = 1
-AC_CLEAR_ACCUMULATE = 2
-AC_RETURN = 3
-AC_MULT = 4
-AC_ADD = 5
-CP_OFF = 0
-CP_ON = 1
-CP_DEFINE = 2
-SB_RESET = 0
-SB_TRACK = 1
-SB_HOLD = 2
-RD_FREEZE = 0x00000001
-RD_ALPHAONE = 0x00000002
-RD_IGNORE_UNDERLAY = 0x00000004
-RD_IGNORE_OVERLAY = 0x00000008
-RD_IGNORE_PUP = 0x00000010
-RD_OFFSCREEN = 0x00000020
-GD_XPMAX = 0
-GD_YPMAX = 1
-GD_XMMAX = 2
-GD_YMMAX = 3
-GD_ZMIN = 4
-GD_ZMAX = 5
-GD_BITS_NORM_SNG_RED = 6
-GD_BITS_NORM_SNG_GREEN = 7
-GD_BITS_NORM_SNG_BLUE = 8
-GD_BITS_NORM_DBL_RED = 9
-GD_BITS_NORM_DBL_GREEN = 10
-GD_BITS_NORM_DBL_BLUE = 11
-GD_BITS_NORM_SNG_CMODE = 12
-GD_BITS_NORM_DBL_CMODE = 13
-GD_BITS_NORM_SNG_MMAP = 14
-GD_BITS_NORM_DBL_MMAP = 15
-GD_BITS_NORM_ZBUFFER = 16
-GD_BITS_OVER_SNG_CMODE = 17
-GD_BITS_UNDR_SNG_CMODE = 18
-GD_BITS_PUP_SNG_CMODE = 19
-GD_BITS_NORM_SNG_ALPHA = 21
-GD_BITS_NORM_DBL_ALPHA = 22
-GD_BITS_CURSOR = 23
-GD_OVERUNDER_SHARED = 24
-GD_BLEND = 25
-GD_CIFRACT = 26
-GD_CROSSHAIR_CINDEX = 27
-GD_DITHER = 28
-GD_LINESMOOTH_CMODE = 30
-GD_LINESMOOTH_RGB = 31
-GD_LOGICOP = 33
-GD_NSCRNS = 35
-GD_NURBS_ORDER = 36
-GD_NBLINKS = 37
-GD_NVERTEX_POLY = 39
-GD_PATSIZE_64 = 40
-GD_PNTSMOOTH_CMODE = 41
-GD_PNTSMOOTH_RGB = 42
-GD_PUP_TO_OVERUNDER = 43
-GD_READSOURCE = 44
-GD_READSOURCE_ZBUFFER = 48
-GD_STEREO = 50
-GD_SUBPIXEL_LINE = 51
-GD_SUBPIXEL_PNT = 52
-GD_SUBPIXEL_POLY = 53
-GD_TRIMCURVE_ORDER = 54
-GD_WSYS = 55
-GD_ZDRAW_GEOM = 57
-GD_ZDRAW_PIXELS = 58
-GD_SCRNTYPE = 61
-GD_TEXTPORT = 62
-GD_NMMAPS = 63
-GD_FRAMEGRABBER = 64
-GD_TIMERHZ = 66
-GD_DBBOX = 67
-GD_AFUNCTION = 68
-GD_ALPHA_OVERUNDER = 69
-GD_BITS_ACBUF = 70
-GD_BITS_ACBUF_HW = 71
-GD_BITS_STENCIL = 72
-GD_CLIPPLANES = 73
-GD_FOGVERTEX = 74
-GD_LIGHTING_TWOSIDE = 76
-GD_POLYMODE = 77
-GD_POLYSMOOTH = 78
-GD_SCRBOX = 79
-GD_TEXTURE = 80
-GD_FOGPIXEL = 81
-GD_TEXTURE_PERSP = 82
-GD_MUXPIPES = 83
-GD_NOLIMIT = -2
-GD_WSYS_NONE = 0
-GD_WSYS_4S = 1
-GD_SCRNTYPE_WM = 0
-GD_SCRNTYPE_NOWM = 1
-N_PIXEL_TOLERANCE = 1
-N_CULLING = 2
-N_DISPLAY = 3
-N_ERRORCHECKING = 4
-N_SUBDIVISIONS = 5
-N_S_STEPS = 6
-N_T_STEPS = 7
-N_TILES = 8
-N_TMP1 = 9
-N_TMP2 = 10
-N_TMP3 = 11
-N_TMP4 = 12
-N_TMP5 = 13
-N_TMP6 = 14
-N_FILL = 1.0
-N_OUTLINE_POLY = 2.0
-N_OUTLINE_PATCH = 5.0
-N_ISOLINE_S = 12.0
-N_ST = 0x8
-N_STW = 0xd
-N_XYZ = 0x4c
-N_XYZW = 0x51
-N_TEX = 0x88
-N_TEXW = 0x8d
-N_RGBA = 0xd0
-N_RGBAW = 0xd5
-N_P2D = 0x8
-N_P2DR = 0xd
-N_V3D = 0x4c
-N_V3DR = 0x51
-N_T2D = 0x88
-N_T2DR = 0x8d
-N_C4D = 0xd0
-N_C4DR = 0xd5
-LMNULL = 0.0
-MSINGLE = 0
-MPROJECTION = 1
-MVIEWING = 2
-MTEXTURE = 3
-MAXLIGHTS = 8
-MAXRESTRICTIONS = 4
-DEFMATERIAL = 0
-EMISSION = 1
-AMBIENT = 2
-DIFFUSE = 3
-SPECULAR = 4
-SHININESS = 5
-COLORINDEXES = 6
-ALPHA = 7
-DEFLIGHT = 100
-LCOLOR = 101
-POSITION = 102
-SPOTDIRECTION = 103
-SPOTLIGHT = 104
-DEFLMODEL = 200
-LOCALVIEWER = 201
-ATTENUATION = 202
-ATTENUATION2 = 203
-TWOSIDE = 204
-MATERIAL = 1000
-BACKMATERIAL = 1001
-LIGHT0 = 1100
-LIGHT1 = 1101
-LIGHT2 = 1102
-LIGHT3 = 1103
-LIGHT4 = 1104
-LIGHT5 = 1105
-LIGHT6 = 1106
-LIGHT7 = 1107
-LMODEL = 1200
-LMC_COLOR = 0
-LMC_EMISSION = 1
-LMC_AMBIENT = 2
-LMC_DIFFUSE = 3
-LMC_SPECULAR = 4
-LMC_AD = 5
-LMC_NULL = 6
-TX_MINFILTER = 0x100
-TX_MAGFILTER = 0x200
-TX_WRAP = 0x300
-TX_WRAP_S = 0x310
-TX_WRAP_T = 0x320
-TX_TILE = 0x400
-TX_BORDER = 0x500
-TX_NULL = 0x000
-TX_POINT = 0x110
-TX_BILINEAR = 0x220
-TX_MIPMAP = 0x120
-TX_MIPMAP_POINT = 0x121
-TX_MIPMAP_LINEAR = 0x122
-TX_MIPMAP_BILINEAR = 0x123
-TX_MIPMAP_TRILINEAR = 0x124
-TX_REPEAT = 0x301
-TX_CLAMP = 0x302
-TX_SELECT = 0x303
-TX_TEXTURE_0 = 0
-TV_MODULATE = 0x101
-TV_BLEND = 0x102
-TV_DECAL = 0x103
-TV_COLOR = 0x200
-TV_NULL = 0x000
-TV_ENV0 = 0
-TX_S = 0
-TX_T = 1
-TG_OFF = 0
-TG_ON = 1
-TG_CONTOUR = 2
-TG_LINEAR = 3
-TG_SPHEREMAP = 4
-TG_REFRACTMAP = 5
-DGLSINK = 0
-DGLLOCAL = 1
-DGLTSOCKET = 2
-DGL4DDN = 3
-PUP_CURSOR = PUP_COLOR
-FATAL = 1
-WARNING = 2
-ASK_CONT = 3
-ASK_RESTART = 4
-XMAXSCREEN = 1279
-YMAXSCREEN = 1023
-XMAXMEDIUM = 1023
-YMAXMEDIUM = 767
-XMAX170 = 645
-YMAX170 = 484
-XMAXPAL = 779
-YMAXPAL = 574
diff --git a/Lib/irix5/GLWS.py b/Lib/irix5/GLWS.py
deleted file mode 100755
index 69dab71..0000000
--- a/Lib/irix5/GLWS.py
+++ /dev/null
@@ -1,12 +0,0 @@
-NOERROR = 0
-NOCONTEXT = -1
-NODISPLAY = -2
-NOWINDOW = -3
-NOGRAPHICS = -4
-NOTTOP = -5
-NOVISUAL = -6
-BUFSIZE = -7
-BADWINDOW = -8
-ALREADYBOUND = -100
-BINDFAILED = -101
-SETFAILED = -102
diff --git a/Lib/irix5/IN.py b/Lib/irix5/IN.py
deleted file mode 100755
index 2d67892..0000000
--- a/Lib/irix5/IN.py
+++ /dev/null
@@ -1,141 +0,0 @@
-# Generated by h2py from /usr/include/netinet/in.h
-
-# Included from sys/endian.h
-LITTLE_ENDIAN = 1234
-BIG_ENDIAN = 4321
-PDP_ENDIAN = 3412
-BYTE_ORDER = BIG_ENDIAN
-BYTE_ORDER = LITTLE_ENDIAN
-def ntohl(x): return (x)
-
-def ntohs(x): return (x)
-
-def htonl(x): return (x)
-
-def htons(x): return (x)
-
-def htonl(x): return ntohl(x)
-
-def htons(x): return ntohs(x)
-
-
-# Included from sys/bsd_types.h
-
-# Included from sys/mkdev.h
-ONBITSMAJOR = 7
-ONBITSMINOR = 8
-OMAXMAJ = 0x7f
-OMAXMIN = 0xff
-NBITSMAJOR = 14
-NBITSMINOR = 18
-MAXMAJ = 0x1ff
-MAXMIN = 0x3ffff
-OLDDEV = 0
-NEWDEV = 1
-MKDEV_VER = NEWDEV
-def major(dev): return __major(MKDEV_VER, dev)
-
-def minor(dev): return __minor(MKDEV_VER, dev)
-
-
-# Included from sys/select.h
-FD_SETSIZE = 1024
-NBBY = 8
-IPPROTO_IP = 0
-IPPROTO_ICMP = 1
-IPPROTO_IGMP = 2
-IPPROTO_GGP = 3
-IPPROTO_ENCAP = 4
-IPPROTO_TCP = 6
-IPPROTO_EGP = 8
-IPPROTO_PUP = 12
-IPPROTO_UDP = 17
-IPPROTO_IDP = 22
-IPPROTO_TP = 29
-IPPROTO_XTP = 36
-IPPROTO_HELLO = 63
-IPPROTO_ND = 77
-IPPROTO_EON = 80
-IPPROTO_RAW = 255
-IPPROTO_MAX = 256
-IPPORT_RESERVED = 1024
-IPPORT_USERRESERVED = 5000
-IPPORT_MAXPORT = 65535
-def IN_CLASSA(i): return (((long)(i) & 0x80000000) == 0)
-
-IN_CLASSA_NET = 0xff000000
-IN_CLASSA_NSHIFT = 24
-IN_CLASSA_HOST = 0x00ffffff
-IN_CLASSA_MAX = 128
-def IN_CLASSB(i): return (((long)(i) & 0xc0000000) == 0x80000000)
-
-IN_CLASSB_NET = 0xffff0000
-IN_CLASSB_NSHIFT = 16
-IN_CLASSB_HOST = 0x0000ffff
-IN_CLASSB_MAX = 65536
-def IN_CLASSC(i): return (((long)(i) & 0xe0000000) == 0xc0000000)
-
-IN_CLASSC_NET = 0xffffff00
-IN_CLASSC_NSHIFT = 8
-IN_CLASSC_HOST = 0x000000ff
-def IN_CLASSD(i): return (((long)(i) & 0xf0000000) == 0xe0000000)
-
-IN_CLASSD_NET = 0xf0000000
-IN_CLASSD_NSHIFT = 28
-IN_CLASSD_HOST = 0x0fffffff
-def IN_MULTICAST(i): return IN_CLASSD(i)
-
-def IN_EXPERIMENTAL(i): return (((long)(i) & 0xf0000000) == 0xf0000000)
-
-def IN_BADCLASS(i): return (((long)(i) & 0xf0000000) == 0xf0000000)
-
-INADDR_ANY = 0x00000000
-INADDR_BROADCAST = 0xffffffff
-INADDR_LOOPBACK = 0x7F000001
-INADDR_UNSPEC_GROUP = 0xe0000000
-INADDR_ALLHOSTS_GROUP = 0xe0000001
-INADDR_MAX_LOCAL_GROUP = 0xe00000ff
-INADDR_NONE = 0xffffffff
-IN_LOOPBACKNET = 127
-IP_OPTIONS = 1
-IP_MULTICAST_IF = 2
-IP_MULTICAST_TTL = 3
-IP_MULTICAST_LOOP = 4
-IP_ADD_MEMBERSHIP = 5
-IP_DROP_MEMBERSHIP = 6
-IP_HDRINCL = 7
-IP_TOS = 8
-IP_TTL = 9
-IP_RECVOPTS = 10
-IP_RECVRETOPTS = 11
-IP_RECVDSTADDR = 12
-IP_RETOPTS = 13
-IP_OPTIONS = 1
-IP_HDRINCL = 2
-IP_TOS = 3
-IP_TTL = 4
-IP_RECVOPTS = 5
-IP_RECVRETOPTS = 6
-IP_RECVDSTADDR = 7
-IP_RETOPTS = 8
-IP_MULTICAST_IF = 20
-IP_MULTICAST_TTL = 21
-IP_MULTICAST_LOOP = 22
-IP_ADD_MEMBERSHIP = 23
-IP_DROP_MEMBERSHIP = 24
-IRIX4_IP_OPTIONS = 1
-IRIX4_IP_MULTICAST_IF = 2
-IRIX4_IP_MULTICAST_TTL = 3
-IRIX4_IP_MULTICAST_LOOP = 4
-IRIX4_IP_ADD_MEMBERSHIP = 5
-IRIX4_IP_DROP_MEMBERSHIP = 6
-IRIX4_IP_HDRINCL = 7
-IRIX4_IP_TOS = 8
-IRIX4_IP_TTL = 9
-IRIX4_IP_RECVOPTS = 10
-IRIX4_IP_RECVRETOPTS = 11
-IRIX4_IP_RECVDSTADDR = 12
-IRIX4_IP_RETOPTS = 13
-IP_DEFAULT_MULTICAST_TTL = 1
-IP_DEFAULT_MULTICAST_LOOP = 1
-IP_MAX_MEMBERSHIPS = 20
diff --git a/Lib/irix5/IOCTL.py b/Lib/irix5/IOCTL.py
deleted file mode 100755
index cec3c3f..0000000
--- a/Lib/irix5/IOCTL.py
+++ /dev/null
@@ -1,233 +0,0 @@
-# These lines were mostly generated by h2py.py (see demo/scripts)
-# from <sys/ioctl.h>, <sys/termio.h> and <termios.h> on Irix 4.0.2
-# with some manual changes to cope with imperfections in h2py.py.
-# The applicability on other systems is not clear; especially non-SYSV
-# systems may have a totally different set of ioctls.
-
-IOCTYPE = 0xff00
-LIOC = (ord('l')<<8)
-LIOCGETP = (LIOC|1)
-LIOCSETP = (LIOC|2)
-LIOCGETS = (LIOC|5)
-LIOCSETS = (LIOC|6)
-DIOC = (ord('d')<<8)
-DIOCGETC = (DIOC|1)
-DIOCGETB = (DIOC|2)
-DIOCSETE = (DIOC|3)
-IOCPARM_MASK = 0x7f
-IOC_VOID = 0x20000000
-IOC_OUT = 0x40000000
-IOC_IN = 0x80000000
-IOC_INOUT = (IOC_IN|IOC_OUT)
-int = 'i'
-short = 'h'
-long = 'l'
-def sizeof(t): import struct; return struct.calcsize(t)
-def _IO(x,y): return (IOC_VOID|((x)<<8)|y)
-def _IOR(x,y,t): return (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|y)
-def _IOW(x,y,t): return (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|y)
-# this should be _IORW, but stdio got there first
-def _IOWR(x,y,t): return (IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|y)
-FIONREAD = _IOR(ord('f'), 127, int)
-FIONBIO = _IOW(ord('f'), 126, int)
-FIOASYNC = _IOW(ord('f'), 125, int)
-FIOSETOWN = _IOW(ord('f'), 124, int)
-FIOGETOWN = _IOR(ord('f'), 123, int)
-NCC = 8
-NCC_PAD = 7
-NCC_EXT = 16
-NCCS = (NCC+NCC_PAD+NCC_EXT)
-VINTR = 0
-VQUIT = 1
-VERASE = 2
-VKILL = 3
-VEOF = 4
-VEOL = 5
-VEOL2 = 6
-VMIN = VEOF
-VTIME = VEOL
-VSWTCH = 7
-VLNEXT = (NCC+NCC_PAD+0)
-VWERASE = (NCC+NCC_PAD+1)
-VRPRNT = (NCC+NCC_PAD+2)
-VFLUSHO = (NCC+NCC_PAD+3)
-VSTOP = (NCC+NCC_PAD+4)
-VSTART = (NCC+NCC_PAD+5)
-CNUL = '\0'
-CDEL = '\377'
-CESC = '\\'
-CINTR = '\177'
-CQUIT = '\34'
-CBRK = '\377'
-def CTRL(c): return ord(c) & 0x0f
-CERASE = CTRL('H')
-CKILL = CTRL('U')
-CEOF = CTRL('d')
-CEOT = CEOF
-CSTART = CTRL('q')
-CSTOP = CTRL('s')
-CSWTCH = CTRL('z')
-CSUSP = CSWTCH
-CNSWTCH = 0
-CLNEXT = CTRL('v')
-CWERASE = CTRL('w')
-CFLUSHO = CTRL('o')
-CFLUSH = CFLUSHO
-CRPRNT = CTRL('r')
-CDSUSP = CTRL('y')
-IGNBRK = 0000001
-BRKINT = 0000002
-IGNPAR = 0000004
-PARMRK = 0000010
-INPCK = 0000020
-ISTRIP = 0000040
-INLCR = 0000100
-IGNCR = 0000200
-ICRNL = 0000400
-IUCLC = 0001000
-IXON = 0002000
-IXANY = 0004000
-IXOFF = 0010000
-IBLKMD = 0020000
-OPOST = 0000001
-OLCUC = 0000002
-ONLCR = 0000004
-OCRNL = 0000010
-ONOCR = 0000020
-ONLRET = 0000040
-OFILL = 0000100
-OFDEL = 0000200
-NLDLY = 0000400
-NL0 = 0
-NL1 = 0000400
-CRDLY = 0003000
-CR0 = 0
-CR1 = 0001000
-CR2 = 0002000
-CR3 = 0003000
-TABDLY = 0014000
-TAB0 = 0
-TAB1 = 0004000
-TAB2 = 0010000
-TAB3 = 0014000
-BSDLY = 0020000
-BS0 = 0
-BS1 = 0020000
-VTDLY = 0040000
-VT0 = 0
-VT1 = 0040000
-FFDLY = 0100000
-FF0 = 0
-FF1 = 0100000
-CBAUD = 0000017
-B0 = 0
-B50 = 0000001
-B75 = 0000002
-B110 = 0000003
-B134 = 0000004
-B150 = 0000005
-B200 = 0000006
-B300 = 0000007
-B600 = 0000010
-B1200 = 0000011
-B1800 = 0000012
-B2400 = 0000013
-B4800 = 0000014
-B9600 = 0000015
-B19200 = 0000016
-EXTA = 0000016
-B38400 = 0000017
-EXTB = 0000017
-CSIZE = 0000060
-CS5 = 0
-CS6 = 0000020
-CS7 = 0000040
-CS8 = 0000060
-CSTOPB = 0000100
-CREAD = 0000200
-PARENB = 0000400
-PARODD = 0001000
-HUPCL = 0002000
-CLOCAL = 0004000
-LOBLK = 0040000
-ISIG = 0000001
-ICANON = 0000002
-XCASE = 0000004
-ECHO = 0000010
-ECHOE = 0000020
-ECHOK = 0000040
-ECHONL = 0000100
-NOFLSH = 0000200
-IIEXTEN = 0000400
-ITOSTOP = 0001000
-SSPEED = B9600
-IOCTYPE = 0xff00
-TIOC = (ord('T')<<8)
-oTCGETA = (TIOC|1)
-oTCSETA = (TIOC|2)
-oTCSETAW = (TIOC|3)
-oTCSETAF = (TIOC|4)
-TCSBRK = (TIOC|5)
-TCXONC = (TIOC|6)
-TCFLSH = (TIOC|7)
-TCGETA = (TIOC|8)
-TCSETA = (TIOC|9)
-TCSETAW = (TIOC|10)
-TCSETAF = (TIOC|11)
-TIOCFLUSH = (TIOC|12)
-TCDSET = (TIOC|32)
-TCBLKMD = (TIOC|33)
-TIOCPKT = (TIOC|112)
-TIOCPKT_DATA = 0x00
-TIOCPKT_FLUSHREAD = 0x01
-TIOCPKT_FLUSHWRITE = 0x02
-TIOCPKT_NOSTOP = 0x10
-TIOCPKT_DOSTOP = 0x20
-TIOCNOTTY = (TIOC|113)
-TIOCSTI = (TIOC|114)
-TIOCSPGRP = _IOW(ord('t'), 118, int)
-TIOCGPGRP = _IOR(ord('t'), 119, int)
-TIOCCONS = _IOW(ord('t'), 120, int)
-struct_winsize = 'hhhh'
-TIOCGWINSZ = _IOR(ord('t'), 104, struct_winsize)
-TIOCSWINSZ = _IOW(ord('t'), 103, struct_winsize)
-TFIOC = (ord('F')<<8)
-oFIONREAD = (TFIOC|127)
-LDIOC = (ord('D')<<8)
-LDOPEN = (LDIOC|0)
-LDCLOSE = (LDIOC|1)
-LDCHG = (LDIOC|2)
-LDGETT = (LDIOC|8)
-LDSETT = (LDIOC|9)
-TERM_NONE = 0
-TERM_TEC = 1
-TERM_V61 = 2
-TERM_V10 = 3
-TERM_TEX = 4
-TERM_D40 = 5
-TERM_H45 = 6
-TERM_D42 = 7
-TM_NONE = 0000
-TM_SNL = 0001
-TM_ANL = 0002
-TM_LCF = 0004
-TM_CECHO = 0010
-TM_CINVIS = 0020
-TM_SET = 0200
-LDISC0 = 0
-LDISC1 = 1
-NTTYDISC = LDISC1
-VSUSP = VSWTCH
-TCSANOW = 0
-TCSADRAIN = 1
-TCSAFLUSH = 2
-TCIFLUSH = 0
-TCOFLUSH = 1
-TCIOFLUSH = 2
-TCOOFF = 0
-TCOON = 1
-TCIOFF = 2
-TCION = 3
-TO_STOP = LOBLK
-IEXTEN = IIEXTEN
-TOSTOP = ITOSTOP
diff --git a/Lib/irix5/SOCKET.py b/Lib/irix5/SOCKET.py
deleted file mode 100755
index 401de2b..0000000
--- a/Lib/irix5/SOCKET.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# Generated by h2py from /usr/include/sys/socket.h
-
-# Included from sys/bsd_types.h
-
-# Included from sys/mkdev.h
-ONBITSMAJOR = 7
-ONBITSMINOR = 8
-OMAXMAJ = 0x7f
-OMAXMIN = 0xff
-NBITSMAJOR = 14
-NBITSMINOR = 18
-MAXMAJ = 0x1ff
-MAXMIN = 0x3ffff
-OLDDEV = 0
-NEWDEV = 1
-MKDEV_VER = NEWDEV
-def major(dev): return __major(MKDEV_VER, dev)
-
-def minor(dev): return __minor(MKDEV_VER, dev)
-
-
-# Included from sys/select.h
-FD_SETSIZE = 1024
-NBBY = 8
-SOCK_STREAM = 1
-SOCK_DGRAM = 2
-SOCK_RAW = 3
-SOCK_RDM = 4
-SOCK_SEQPACKET = 5
-NC_TPI_CLTS = 1
-NC_TPI_COTS = 2
-NC_TPI_COTS_ORD = 3
-NC_TPI_RAW = 4
-SOCK_DGRAM = NC_TPI_CLTS
-SOCK_STREAM = NC_TPI_COTS
-SOCK_RAW = NC_TPI_RAW
-SOCK_RDM = 5
-SOCK_SEQPACKET = 6
-IRIX4_SOCK_STREAM = 1
-IRIX4_SOCK_DGRAM = 2
-IRIX4_SOCK_RAW = 3
-IRIX4_SOCK_RDM = 4
-IRIX4_SOCK_SEQPACKET = 5
-SO_DEBUG = 0x0001
-SO_ACCEPTCONN = 0x0002
-SO_REUSEADDR = 0x0004
-SO_KEEPALIVE = 0x0008
-SO_DONTROUTE = 0x0010
-SO_BROADCAST = 0x0020
-SO_USELOOPBACK = 0x0040
-SO_LINGER = 0x0080
-SO_OOBINLINE = 0x0100
-SO_REUSEPORT = 0x0200
-SO_ORDREL = 0x0200
-SO_IMASOCKET = 0x0400
-SO_CHAMELEON = 0x1000
-SO_SNDBUF = 0x1001
-SO_RCVBUF = 0x1002
-SO_SNDLOWAT = 0x1003
-SO_RCVLOWAT = 0x1004
-SO_SNDTIMEO = 0x1005
-SO_RCVTIMEO = 0x1006
-SO_ERROR = 0x1007
-SO_TYPE = 0x1008
-SO_PROTOTYPE = 0x1009
-SOL_SOCKET = 0xffff
-AF_UNSPEC = 0
-AF_UNIX = 1
-AF_INET = 2
-AF_IMPLINK = 3
-AF_PUP = 4
-AF_CHAOS = 5
-AF_NS = 6
-AF_ISO = 7
-AF_ECMA = 8
-AF_DATAKIT = 9
-AF_CCITT = 10
-AF_SNA = 11
-AF_DECnet = 12
-AF_DLI = 13
-AF_LAT = 14
-AF_HYLINK = 15
-AF_APPLETALK = 16
-AF_ROUTE = 17
-AF_RAW = 18
-AF_LINK = 18
-pseudo_AF_XTP = 19
-AF_NIT = 17
-AF_802 = 18
-AF_OSI = 19
-AF_X25 = 20
-AF_OSINET = 21
-AF_GOSIP = 22
-AF_SDL = 23
-AF_MAX = (AF_SDL+1)
-def OPTLEN(x): return ((((x) + sizeof(long) - 1) / sizeof(long)) * sizeof(long))
-
-PF_UNSPEC = AF_UNSPEC
-PF_UNIX = AF_UNIX
-PF_INET = AF_INET
-PF_IMPLINK = AF_IMPLINK
-PF_PUP = AF_PUP
-PF_CHAOS = AF_CHAOS
-PF_NS = AF_NS
-PF_ISO = AF_ISO
-PF_ECMA = AF_ECMA
-PF_DATAKIT = AF_DATAKIT
-PF_CCITT = AF_CCITT
-PF_SNA = AF_SNA
-PF_DECnet = AF_DECnet
-PF_DLI = AF_DLI
-PF_LAT = AF_LAT
-PF_HYLINK = AF_HYLINK
-PF_APPLETALK = AF_APPLETALK
-PF_ROUTE = AF_ROUTE
-PF_LINK = AF_LINK
-PF_XTP = pseudo_AF_XTP
-PF_RAW = AF_RAW
-PF_NIT = AF_NIT
-PF_802 = AF_802
-PF_OSI = AF_OSI
-PF_X25 = AF_X25
-PF_OSINET = AF_OSINET
-PF_GOSIP = AF_GOSIP
-PF_MAX = AF_MAX
-SOMAXCONN = 5
-MSG_OOB = 0x1
-MSG_PEEK = 0x2
-MSG_DONTROUTE = 0x4
-MSG_EOR = 0x8
-MSG_BTAG = 0x40
-MSG_ETAG = 0x80
-MSG_MAXIOVLEN = 16
diff --git a/Lib/irix5/SV.py b/Lib/irix5/SV.py
deleted file mode 100755
index 08fb917..0000000
--- a/Lib/irix5/SV.py
+++ /dev/null
@@ -1,120 +0,0 @@
-NTSC_XMAX = 640
-NTSC_YMAX = 480
-PAL_XMAX = 768
-PAL_YMAX = 576
-BLANKING_BUFFER_SIZE = 2
-
-MAX_SOURCES = 2
-
-# mode parameter for Bind calls
-IN_OFF = 0				# No Video
-IN_OVER = 1				# Video over graphics
-IN_UNDER = 2				# Video under graphics
-IN_REPLACE = 3				# Video replaces entire win
-
-# mode parameters for LoadMap calls.  Specifies buffer, always 256 entries
-INPUT_COLORMAP = 0			# tuples of 8-bit RGB
-CHROMA_KEY_MAP = 1			# tuples of 8-bit RGB
-COLOR_SPACE_MAP = 2			# tuples of 8-bit RGB
-GAMMA_MAP = 3				# tuples of 24-bit red values
-
-# mode parameters for UseExclusive calls
-INPUT = 0
-OUTPUT = 1
-IN_OUT = 2
-
-# Format constants for the capture routines
-RGB8_FRAMES = 0				# noninterleaved 8 bit 3:2:3 RBG fields
-RGB32_FRAMES = 1			# 32-bit 8:8:8 RGB frames
-YUV411_FRAMES = 2			# interleaved, 8:2:2 YUV format
-YUV411_FRAMES_AND_BLANKING_BUFFER = 3
-
-#
-# sv.SetParam is passed variable length argument lists,
-# consisting of <name, value> pairs.   The following
-# constants identify argument names.
-#
-_NAME_BASE = 1000
-SOURCE = (_NAME_BASE + 0)
-SOURCE1 = 0
-SOURCE2 = 1
-SOURCE3 = 2
-COLOR = (_NAME_BASE + 1)
-DEFAULT_COLOR = 0
-USER_COLOR = 1
-MONO = 2
-OUTPUTMODE = (_NAME_BASE + 2)
-LIVE_OUTPUT = 0
-STILL24_OUT = 1
-FREEZE = (_NAME_BASE + 3)
-DITHER = (_NAME_BASE + 4)
-OUTPUT_FILTER = (_NAME_BASE + 5)
-HUE = (_NAME_BASE + 6)
-GENLOCK = (_NAME_BASE + 7)
-GENLOCK_OFF = 0
-GENLOCK_ON = 1
-GENLOCK_HOUSE = 2
-BROADCAST = (_NAME_BASE + 8)
-NTSC = 0
-PAL = 1
-VIDEO_MODE = (_NAME_BASE + 9)
-COMP = 0
-SVIDEO = 1
-INPUT_BYPASS = (_NAME_BASE + 10)
-FIELDDROP = (_NAME_BASE + 11)
-SLAVE = (_NAME_BASE + 12)
-APERTURE_FACTOR = (_NAME_BASE + 13)
-AFACTOR_0 = 0
-AFACTOR_QTR = 1
-AFACTOR_HLF = 2
-AFACTOR_ONE = 3
-CORING = (_NAME_BASE + 14)
-COR_OFF = 0
-COR_1LSB = 1
-COR_2LSB = 2
-COR_3LSB = 3
-APERTURE_BANDPASS = (_NAME_BASE + 15)
-ABAND_F0 = 0
-ABAND_F1 = 1
-ABAND_F2 = 2
-ABAND_F3 = 3
-PREFILTER = (_NAME_BASE + 16)
-CHROMA_TRAP = (_NAME_BASE + 17)
-CK_THRESHOLD = (_NAME_BASE + 18)
-PAL_SENSITIVITY = (_NAME_BASE + 19)
-GAIN_CONTROL = (_NAME_BASE + 20)
-GAIN_SLOW = 0
-GAIN_MEDIUM = 1
-GAIN_FAST = 2
-GAIN_FROZEN = 3
-AUTO_CKILL = (_NAME_BASE + 21)
-VTR_MODE = (_NAME_BASE + 22)
-VTR_INPUT = 0
-CAMERA_INPUT = 1
-LUMA_DELAY = (_NAME_BASE + 23)
-VNOISE = (_NAME_BASE + 24)
-VNOISE_NORMAL = 0
-VNOISE_SEARCH = 1
-VNOISE_AUTO = 2
-VNOISE_BYPASS = 3
-CHCV_PAL = (_NAME_BASE + 25)
-CHCV_NTSC = (_NAME_BASE + 26)
-CCIR_LEVELS = (_NAME_BASE + 27)
-STD_CHROMA = (_NAME_BASE + 28)
-DENC_VTBYPASS = (_NAME_BASE + 29)
-FAST_TIMECONSTANT = (_NAME_BASE + 30)
-GENLOCK_DELAY = (_NAME_BASE + 31)
-PHASE_SYNC = (_NAME_BASE + 32)
-VIDEO_OUTPUT = (_NAME_BASE + 33)
-CHROMA_PHASEOUT = (_NAME_BASE + 34)
-CHROMA_CENTER = (_NAME_BASE + 35)
-YUV_TO_RGB_INVERT = (_NAME_BASE + 36)
-SOURCE1_BROADCAST = (_NAME_BASE + 37)
-SOURCE1_MODE = (_NAME_BASE + 38)
-SOURCE2_BROADCAST = (_NAME_BASE + 39)
-SOURCE2_MODE = (_NAME_BASE + 40)
-SOURCE3_BROADCAST = (_NAME_BASE + 41)
-SOURCE3_MODE = (_NAME_BASE + 42)
-SIGNAL_STD = (_NAME_BASE + 43)
-NOSIGNAL = 2
-SIGNAL_COLOR = (_NAME_BASE + 44)
diff --git a/Lib/irix5/TERMIOS.py b/Lib/irix5/TERMIOS.py
deleted file mode 100755
index 2ac7487..0000000
--- a/Lib/irix5/TERMIOS.py
+++ /dev/null
@@ -1,576 +0,0 @@
-# Generated by h2py from /usr/include/sys/termios.h
-
-# Included from sys/ttydev.h
-B0 = 0
-B50 = 0000001
-B75 = 0000002
-B110 = 0000003
-B134 = 0000004
-B150 = 0000005
-B200 = 0000006
-B300 = 0000007
-B600 = 0000010
-B1200 = 0000011
-B1800 = 0000012
-B2400 = 0000013
-B4800 = 0000014
-B9600 = 0000015
-B19200 = 0000016
-EXTA = 0000016
-B38400 = 0000017
-EXTB = 0000017
-
-# Included from sys/types.h
-
-# Included from sgidefs.h
-_MIPS_ISA_MIPS1 = 1
-_MIPS_ISA_MIPS2 = 2
-_MIPS_ISA_MIPS3 = 3
-_MIPS_ISA_MIPS4 = 4
-_MIPS_SIM_ABI32 = 1
-_MIPS_SIM_NABI32 = 2
-_MIPS_SIM_ABI64 = 3
-P_MYID = (-1)
-P_MYHOSTID = (-1)
-
-# Included from sys/bsd_types.h
-
-# Included from sys/mkdev.h
-ONBITSMAJOR = 7
-ONBITSMINOR = 8
-OMAXMAJ = 0x7f
-OMAXMIN = 0xff
-NBITSMAJOR = 14
-NBITSMINOR = 18
-MAXMAJ = 0x1ff
-MAXMIN = 0x3ffff
-OLDDEV = 0
-NEWDEV = 1
-MKDEV_VER = NEWDEV
-def major(dev): return __major(MKDEV_VER, dev)
-
-def minor(dev): return __minor(MKDEV_VER, dev)
-
-
-# Included from sys/select.h
-FD_SETSIZE = 1024
-NBBY = 8
-_POSIX_VDISABLE = 0
-def CTRL(c): return ((c)&037)
-
-IBSHIFT = 16
-NCC = 8
-NCCS = 23
-VINTR = 0
-VQUIT = 1
-VERASE = 2
-VKILL = 3
-VEOF = 4
-VEOL = 5
-VEOL2 = 6
-VMIN = 4
-VTIME = 5
-VSWTCH = 7
-VSTART = 8
-VSTOP = 9
-VSUSP = 10
-VDSUSP = 11
-VREPRINT = 12
-VDISCARD = 13
-VWERASE = 14
-VLNEXT = 15
-VRPRNT = VREPRINT
-VFLUSHO = VDISCARD
-VCEOF = NCC
-VCEOL = (NCC + 1)
-CNUL = 0
-CDEL = 0377
-CESC = ord('\\')
-CINTR = 0177
-CQUIT = 034
-CERASE = CTRL(ord('H'))
-CKILL = CTRL(ord('U'))
-CEOL = 0
-CEOL2 = 0
-CEOF = CTRL(ord('d'))
-CEOT = CEOF
-CSTART = CTRL(ord('q'))
-CSTOP = CTRL(ord('s'))
-CSWTCH = CTRL(ord('z'))
-CNSWTCH = 0
-CSUSP = CSWTCH
-CLNEXT = CTRL(ord('v'))
-CWERASE = CTRL(ord('w'))
-CFLUSHO = CTRL(ord('o'))
-CFLUSH = CFLUSHO
-CRPRNT = CTRL(ord('r'))
-CDSUSP = CTRL(ord('y'))
-CBRK = 0377
-IGNBRK = 0000001
-BRKINT = 0000002
-IGNPAR = 0000004
-PARMRK = 0000010
-INPCK = 0000020
-ISTRIP = 0000040
-INLCR = 0000100
-IGNCR = 0000200
-ICRNL = 0000400
-IUCLC = 0001000
-IXON = 0002000
-IXANY = 0004000
-IXOFF = 0010000
-IMAXBEL = 0020000
-IBLKMD = 0040000
-OPOST = 0000001
-OLCUC = 0000002
-ONLCR = 0000004
-OCRNL = 0000010
-ONOCR = 0000020
-ONLRET = 0000040
-OFILL = 0000100
-OFDEL = 0000200
-NLDLY = 0000400
-NL0 = 0
-NL1 = 0000400
-CRDLY = 0003000
-CR0 = 0
-CR1 = 0001000
-CR2 = 0002000
-CR3 = 0003000
-TABDLY = 0014000
-TAB0 = 0
-TAB1 = 0004000
-TAB2 = 0010000
-TAB3 = 0014000
-XTABS = 0014000
-BSDLY = 0020000
-BS0 = 0
-BS1 = 0020000
-VTDLY = 0040000
-VT0 = 0
-VT1 = 0040000
-FFDLY = 0100000
-FF0 = 0
-FF1 = 0100000
-PAGEOUT = 0200000
-WRAP = 0400000
-CBAUD = 000000017
-CSIZE = 000000060
-CS5 = 0
-CS6 = 000000020
-CS7 = 000000040
-CS8 = 000000060
-CSTOPB = 000000100
-CREAD = 000000200
-PARENB = 000000400
-PARODD = 000001000
-HUPCL = 000002000
-CLOCAL = 000004000
-RCV1EN = 000010000
-XMT1EN = 000020000
-LOBLK = 000040000
-XCLUDE = 000100000
-CIBAUD = 003600000
-PAREXT = 004000000
-CNEW_RTSCTS = 010000000
-ISIG = 0000001
-ICANON = 0000002
-XCASE = 0000004
-ECHO = 0000010
-ECHOE = 0000020
-ECHOK = 0000040
-ECHONL = 0000100
-NOFLSH = 0000200
-IEXTEN = 0000400
-ITOSTOP = 0100000
-TOSTOP = ITOSTOP
-ECHOCTL = 0001000
-ECHOPRT = 0002000
-ECHOKE = 0004000
-DEFECHO = 0010000
-FLUSHO = 0020000
-PENDIN = 0040000
-TIOC = (ord('T')<<8)
-TCGETA = (TIOC|1)
-TCSETA = (TIOC|2)
-TCSETAW = (TIOC|3)
-TCSETAF = (TIOC|4)
-TCSBRK = (TIOC|5)
-TCXONC = (TIOC|6)
-TCFLSH = (TIOC|7)
-
-# Included from sys/ioctl.h
-IOCTYPE = 0xff00
-LIOC = (ord('l')<<8)
-LIOCGETP = (LIOC|1)
-LIOCSETP = (LIOC|2)
-LIOCGETS = (LIOC|5)
-LIOCSETS = (LIOC|6)
-DIOC = (ord('d')<<8)
-DIOCGETC = (DIOC|1)
-DIOCGETB = (DIOC|2)
-DIOCSETE = (DIOC|3)
-
-# Included from sys/ioccom.h
-IOCPARM_MASK = 0xff
-IOC_VOID = 0x20000000
-IOC_OUT = 0x40000000
-IOC_IN = 0x80000000
-IOC_INOUT = (IOC_IN|IOC_OUT)
-
-# Included from net/soioctl.h
-
-# Included from sys/termio.h
-
-# Included from sys/termios.h
-_POSIX_VDISABLE = 0
-def CTRL(c): return ((c)&037)
-
-IBSHIFT = 16
-NCC = 8
-NCCS = 23
-VINTR = 0
-VQUIT = 1
-VERASE = 2
-VKILL = 3
-VEOF = 4
-VEOL = 5
-VEOL2 = 6
-VMIN = 4
-VTIME = 5
-VSWTCH = 7
-VSTART = 8
-VSTOP = 9
-VSUSP = 10
-VDSUSP = 11
-VREPRINT = 12
-VDISCARD = 13
-VWERASE = 14
-VLNEXT = 15
-VRPRNT = VREPRINT
-VFLUSHO = VDISCARD
-VCEOF = NCC
-VCEOL = (NCC + 1)
-CNUL = 0
-CDEL = 0377
-CESC = ord('\\')
-CINTR = 0177
-CQUIT = 034
-CERASE = CTRL(ord('H'))
-CKILL = CTRL(ord('U'))
-CEOL = 0
-CEOL2 = 0
-CEOF = CTRL(ord('d'))
-CEOT = CEOF
-CSTART = CTRL(ord('q'))
-CSTOP = CTRL(ord('s'))
-CSWTCH = CTRL(ord('z'))
-CNSWTCH = 0
-CSUSP = CSWTCH
-CLNEXT = CTRL(ord('v'))
-CWERASE = CTRL(ord('w'))
-CFLUSHO = CTRL(ord('o'))
-CFLUSH = CFLUSHO
-CRPRNT = CTRL(ord('r'))
-CDSUSP = CTRL(ord('y'))
-CBRK = 0377
-IGNBRK = 0000001
-BRKINT = 0000002
-IGNPAR = 0000004
-PARMRK = 0000010
-INPCK = 0000020
-ISTRIP = 0000040
-INLCR = 0000100
-IGNCR = 0000200
-ICRNL = 0000400
-IUCLC = 0001000
-IXON = 0002000
-IXANY = 0004000
-IXOFF = 0010000
-IMAXBEL = 0020000
-IBLKMD = 0040000
-OPOST = 0000001
-OLCUC = 0000002
-ONLCR = 0000004
-OCRNL = 0000010
-ONOCR = 0000020
-ONLRET = 0000040
-OFILL = 0000100
-OFDEL = 0000200
-NLDLY = 0000400
-NL0 = 0
-NL1 = 0000400
-CRDLY = 0003000
-CR0 = 0
-CR1 = 0001000
-CR2 = 0002000
-CR3 = 0003000
-TABDLY = 0014000
-TAB0 = 0
-TAB1 = 0004000
-TAB2 = 0010000
-TAB3 = 0014000
-XTABS = 0014000
-BSDLY = 0020000
-BS0 = 0
-BS1 = 0020000
-VTDLY = 0040000
-VT0 = 0
-VT1 = 0040000
-FFDLY = 0100000
-FF0 = 0
-FF1 = 0100000
-PAGEOUT = 0200000
-WRAP = 0400000
-CBAUD = 000000017
-CSIZE = 000000060
-CS5 = 0
-CS6 = 000000020
-CS7 = 000000040
-CS8 = 000000060
-CSTOPB = 000000100
-CREAD = 000000200
-PARENB = 000000400
-PARODD = 000001000
-HUPCL = 000002000
-CLOCAL = 000004000
-RCV1EN = 000010000
-XMT1EN = 000020000
-LOBLK = 000040000
-XCLUDE = 000100000
-CIBAUD = 003600000
-PAREXT = 004000000
-CNEW_RTSCTS = 010000000
-ISIG = 0000001
-ICANON = 0000002
-XCASE = 0000004
-ECHO = 0000010
-ECHOE = 0000020
-ECHOK = 0000040
-ECHONL = 0000100
-NOFLSH = 0000200
-IEXTEN = 0000400
-ITOSTOP = 0100000
-TOSTOP = ITOSTOP
-ECHOCTL = 0001000
-ECHOPRT = 0002000
-ECHOKE = 0004000
-DEFECHO = 0010000
-FLUSHO = 0020000
-PENDIN = 0040000
-TIOC = (ord('T')<<8)
-TCGETA = (TIOC|1)
-TCSETA = (TIOC|2)
-TCSETAW = (TIOC|3)
-TCSETAF = (TIOC|4)
-TCSBRK = (TIOC|5)
-TCXONC = (TIOC|6)
-TCFLSH = (TIOC|7)
-LDISC0 = 0
-LDISC1 = 1
-NTTYDISC = LDISC1
-TIOCFLUSH = (TIOC|12)
-TCSETLABEL = (TIOC|31)
-TCDSET = (TIOC|32)
-TCBLKMD = (TIOC|33)
-TIOCPKT = (TIOC|112)
-TIOCPKT_DATA = 0x00
-TIOCPKT_FLUSHREAD = 0x01
-TIOCPKT_FLUSHWRITE = 0x02
-TIOCPKT_NOSTOP = 0x10
-TIOCPKT_DOSTOP = 0x20
-TIOCPKT_IOCTL = 0x40
-TIOCNOTTY = (TIOC|113)
-TIOCSTI = (TIOC|114)
-TFIOC = (ord('F')<<8)
-oFIONREAD = (TFIOC|127)
-TO_STOP = LOBLK
-IOCTYPE = 0xff00
-TCGETS = (TIOC|13)
-TCSETS = (TIOC|14)
-TCSETSW = (TIOC|15)
-TCSETSF = (TIOC|16)
-TCSANOW = ((ord('T')<<8)|14)
-TCSADRAIN = ((ord('T')<<8)|15)
-TCSAFLUSH = ((ord('T')<<8)|16)
-TCIFLUSH = 0
-TCOFLUSH = 1
-TCIOFLUSH = 2
-TCOOFF = 0
-TCOON = 1
-TCIOFF = 2
-TCION = 3
-tIOC = (ord('t')<<8)
-TIOCGETD = (tIOC|0)
-TIOCSETD = (tIOC|1)
-TIOCHPCL = (tIOC|2)
-TIOCGETP = (tIOC|8)
-TIOCSETP = (tIOC|9)
-TIOCSETN = (tIOC|10)
-TIOCEXCL = (tIOC|13)
-TIOCNXCL = (tIOC|14)
-TIOCSETC = (tIOC|17)
-TIOCGETC = (tIOC|18)
-TIOCLBIS = (tIOC|127)
-TIOCLBIC = (tIOC|126)
-TIOCLSET = (tIOC|125)
-TIOCLGET = (tIOC|124)
-TIOCSBRK = (tIOC|123)
-TIOCCBRK = (tIOC|122)
-TIOCSDTR = (tIOC|121)
-TIOCCDTR = (tIOC|120)
-TIOCSLTC = (tIOC|117)
-TIOCGLTC = (tIOC|116)
-TIOCOUTQ = (tIOC|115)
-TIOCSTOP = (tIOC|111)
-TIOCSTART = (tIOC|110)
-TIOCGSID = (tIOC|22)
-TIOCSSID = (tIOC|24)
-TIOCMSET = (tIOC|26)
-TIOCMBIS = (tIOC|27)
-TIOCMBIC = (tIOC|28)
-TIOCMGET = (tIOC|29)
-TIOCM_LE = 0001
-TIOCM_DTR = 0002
-TIOCM_RTS = 0004
-TIOCM_ST = 0010
-TIOCM_SR = 0020
-TIOCM_CTS = 0040
-TIOCM_CAR = 0100
-TIOCM_CD = TIOCM_CAR
-TIOCM_RNG = 0200
-TIOCM_RI = TIOCM_RNG
-TIOCM_DSR = 0400
-TIOCREMOTE = (tIOC|30)
-TIOCSIGNAL = (tIOC|31)
-ISPTM = ((ord('P')<<8)|1)
-UNLKPT = ((ord('P')<<8)|2)
-SVR4SOPEN = ((ord('P')<<8)|100)
-LDIOC = (ord('D')<<8)
-LDOPEN = (LDIOC|0)
-LDCLOSE = (LDIOC|1)
-LDCHG = (LDIOC|2)
-LDGETT = (LDIOC|8)
-LDSETT = (LDIOC|9)
-LDSMAP = (LDIOC|10)
-LDGMAP = (LDIOC|11)
-LDNMAP = (LDIOC|12)
-DIOC = (ord('d')<<8)
-DIOCGETP = (DIOC|8)
-DIOCSETP = (DIOC|9)
-FIORDCHK = ((ord('f')<<8)|3)
-CLNEXT = CTRL(ord('v'))
-CWERASE = CTRL(ord('w'))
-CFLUSHO = CTRL(ord('o'))
-CFLUSH = CFLUSHO
-CRPRNT = CTRL(ord('r'))
-CDSUSP = CTRL(ord('y'))
-SSPEED = B9600
-TERM_NONE = 0
-TERM_TEC = 1
-TERM_V61 = 2
-TERM_V10 = 3
-TERM_TEX = 4
-TERM_D40 = 5
-TERM_H45 = 6
-TERM_D42 = 7
-TM_NONE = 0000
-TM_SNL = 0001
-TM_ANL = 0002
-TM_LCF = 0004
-TM_CECHO = 0010
-TM_CINVIS = 0020
-TM_SET = 0200
-LDISC0 = 0
-LDISC1 = 1
-NTTYDISC = LDISC1
-TIOCFLUSH = (TIOC|12)
-TCSETLABEL = (TIOC|31)
-TCDSET = (TIOC|32)
-TCBLKMD = (TIOC|33)
-TIOCPKT = (TIOC|112)
-TIOCPKT_DATA = 0x00
-TIOCPKT_FLUSHREAD = 0x01
-TIOCPKT_FLUSHWRITE = 0x02
-TIOCPKT_NOSTOP = 0x10
-TIOCPKT_DOSTOP = 0x20
-TIOCPKT_IOCTL = 0x40
-TIOCNOTTY = (TIOC|113)
-TIOCSTI = (TIOC|114)
-TFIOC = (ord('F')<<8)
-oFIONREAD = (TFIOC|127)
-TO_STOP = LOBLK
-IOCTYPE = 0xff00
-TCGETS = (TIOC|13)
-TCSETS = (TIOC|14)
-TCSETSW = (TIOC|15)
-TCSETSF = (TIOC|16)
-TCSANOW = ((ord('T')<<8)|14)
-TCSADRAIN = ((ord('T')<<8)|15)
-TCSAFLUSH = ((ord('T')<<8)|16)
-TCIFLUSH = 0
-TCOFLUSH = 1
-TCIOFLUSH = 2
-TCOOFF = 0
-TCOON = 1
-TCIOFF = 2
-TCION = 3
-tIOC = (ord('t')<<8)
-TIOCGETD = (tIOC|0)
-TIOCSETD = (tIOC|1)
-TIOCHPCL = (tIOC|2)
-TIOCGETP = (tIOC|8)
-TIOCSETP = (tIOC|9)
-TIOCSETN = (tIOC|10)
-TIOCEXCL = (tIOC|13)
-TIOCNXCL = (tIOC|14)
-TIOCSETC = (tIOC|17)
-TIOCGETC = (tIOC|18)
-TIOCLBIS = (tIOC|127)
-TIOCLBIC = (tIOC|126)
-TIOCLSET = (tIOC|125)
-TIOCLGET = (tIOC|124)
-TIOCSBRK = (tIOC|123)
-TIOCCBRK = (tIOC|122)
-TIOCSDTR = (tIOC|121)
-TIOCCDTR = (tIOC|120)
-TIOCSLTC = (tIOC|117)
-TIOCGLTC = (tIOC|116)
-TIOCOUTQ = (tIOC|115)
-TIOCSTOP = (tIOC|111)
-TIOCSTART = (tIOC|110)
-TIOCGSID = (tIOC|22)
-TIOCSSID = (tIOC|24)
-TIOCMSET = (tIOC|26)
-TIOCMBIS = (tIOC|27)
-TIOCMBIC = (tIOC|28)
-TIOCMGET = (tIOC|29)
-TIOCM_LE = 0001
-TIOCM_DTR = 0002
-TIOCM_RTS = 0004
-TIOCM_ST = 0010
-TIOCM_SR = 0020
-TIOCM_CTS = 0040
-TIOCM_CAR = 0100
-TIOCM_CD = TIOCM_CAR
-TIOCM_RNG = 0200
-TIOCM_RI = TIOCM_RNG
-TIOCM_DSR = 0400
-TIOCREMOTE = (tIOC|30)
-TIOCSIGNAL = (tIOC|31)
-ISPTM = ((ord('P')<<8)|1)
-UNLKPT = ((ord('P')<<8)|2)
-SVR4SOPEN = ((ord('P')<<8)|100)
-LDIOC = (ord('D')<<8)
-LDOPEN = (LDIOC|0)
-LDCLOSE = (LDIOC|1)
-LDCHG = (LDIOC|2)
-LDGETT = (LDIOC|8)
-LDSETT = (LDIOC|9)
-LDSMAP = (LDIOC|10)
-LDGMAP = (LDIOC|11)
-LDNMAP = (LDIOC|12)
-DIOC = (ord('d')<<8)
-DIOCGETP = (DIOC|8)
-DIOCSETP = (DIOC|9)
-FIORDCHK = ((ord('f')<<8)|3)
diff --git a/Lib/irix5/WAIT.py b/Lib/irix5/WAIT.py
deleted file mode 100755
index bfd0133..0000000
--- a/Lib/irix5/WAIT.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Generated by h2py from /usr/include/sys/wait.h
-_WSTOPPED = 0177
-WNOHANG = 0100
-WEXITED = 0001
-WTRAPPED = 0002
-WSTOPPED = 0004
-WCONTINUED = 0010
-WNOWAIT = 0200
-WOPTMASK = (WEXITED|WTRAPPED|WSTOPPED|WCONTINUED|WNOHANG|WNOWAIT)
-WSTOPFLG = 0177
-WCONTFLG = 0177777
-WCOREFLAG = 0200
-WSIGMASK = 0177
-WUNTRACED = 0004
diff --git a/Lib/irix5/cddb.py b/Lib/irix5/cddb.py
deleted file mode 100755
index 57cf3c6..0000000
--- a/Lib/irix5/cddb.py
+++ /dev/null
@@ -1,208 +0,0 @@
-# This file implements a class which forms an interface to the .cddb
-# directory that is maintained by SGI's cdman program.
-#
-# Usage is as follows:
-#
-# import readcd
-# r = readcd.Readcd()
-# c = Cddb(r.gettrackinfo())
-#
-# Now you can use c.artist, c.title and c.track[trackno] (where trackno
-# starts at 1).  When the CD is not recognized, all values will be the empty
-# string.
-# It is also possible to set the above mentioned variables to new values.
-# You can then use c.write() to write out the changed values to the
-# .cdplayerrc file.
-
-import string, posix, os
-
-_cddbrc = '.cddb'
-_DB_ID_NTRACKS = 5
-_dbid_map = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@_=+abcdefghijklmnopqrstuvwxyz'
-def _dbid(v):
-	if v >= len(_dbid_map):
-		return string.zfill(v, 2)
-	else:
-		return _dbid_map[v]
-
-def tochash(toc):
-	if type(toc) == type(''):
-		tracklist = []
-		for i in range(2, len(toc), 4):
-			tracklist.append((None,
-				  (string.atoi(toc[i:i+2]),
-				   string.atoi(toc[i+2:i+4]))))
-	else:
-		tracklist = toc
-	ntracks = len(tracklist)
-	hash = _dbid((ntracks >> 4) & 0xF) + _dbid(ntracks & 0xF)
-	if ntracks <= _DB_ID_NTRACKS:
-		nidtracks = ntracks
-	else:
-		nidtracks = _DB_ID_NTRACKS - 1
-		min = 0
-		sec = 0
-		for track in tracklist:
-			start, length = track
-			min = min + length[0]
-			sec = sec + length[1]
-		min = min + sec / 60
-		sec = sec % 60
-		hash = hash + _dbid(min) + _dbid(sec)
-	for i in range(nidtracks):
-		start, length = tracklist[i]
-		hash = hash + _dbid(length[0]) + _dbid(length[1])
-	return hash
-	
-class Cddb:
-	def __init__(self, tracklist):
-		if os.environ.has_key('CDDB_PATH'):
-			path = os.environ['CDDB_PATH']
-			cddb_path = string.splitfields(path, ',')
-		else:
-			home = os.environ['HOME']
-			cddb_path = [home + '/' + _cddbrc]
-
-		self._get_id(tracklist)
-
-		for dir in cddb_path:
-			file = dir + '/' + self.id + '.rdb'
-			try:
-				f = open(file, 'r')
-				self.file = file
-				break
-			except IOError:
-				pass
-		ntracks = string.atoi(self.id[:2], 16)
-		self.artist = ''
-		self.title = ''
-		self.track = [None] + [''] * ntracks
-		self.trackartist = [None] + [''] * ntracks
-		self.notes = []
-		if not hasattr(self, 'file'):
-			return
-		import regex
-		reg = regex.compile('^\\([^.]*\\)\\.\\([^:]*\\):[\t ]+\\(.*\\)')
-		while 1:
-			line = f.readline()
-			if not line:
-				break
-			if reg.match(line) == -1:
-				print 'syntax error in ' + file
-				continue
-			name1 = line[reg.regs[1][0]:reg.regs[1][1]]
-			name2 = line[reg.regs[2][0]:reg.regs[2][1]]
-			value = line[reg.regs[3][0]:reg.regs[3][1]]
-			if name1 == 'album':
-				if name2 == 'artist':
-					self.artist = value
-				elif name2 == 'title':
-					self.title = value
-				elif name2 == 'toc':
-					if not self.toc:
-						self.toc = value
-					if self.toc != value:
-						print 'toc\'s don\'t match'
-				elif name2 == 'notes':
-					self.notes.append(value)
-			elif name1[:5] == 'track':
-				try:
-					trackno = string.atoi(name1[5:])
-				except strings.atoi_error:
-					print 'syntax error in ' + file
-					continue
-				if trackno > ntracks:
-					print 'track number ' + `trackno` + \
-						  ' in file ' + file + \
-						  ' out of range'
-					continue
-				if name2 == 'title':
-					self.track[trackno] = value
-				elif name2 == 'artist':
-					self.trackartist[trackno] = value
-		f.close()
-		for i in range(2, len(self.track)):
-			track = self.track[i]
-			# if track title starts with `,', use initial part
-			# of previous track's title
-			if track and track[0] == ',':
-				try:
-					off = string.index(self.track[i - 1],
-							   ',')
-				except string.index_error:
-					pass
-				else:
-					self.track[i] = self.track[i-1][:off] \
-							+ track
-
-	def _get_id(self, tracklist):
-		# fill in self.id and self.toc.
-		# if the argument is a string ending in .rdb, the part
-		# upto the suffix is taken as the id.
-		if type(tracklist) == type(''):
-			if tracklist[-4:] == '.rdb':
-				self.id = tracklist[:-4]
-				self.toc = ''
-				return
-			t = []
-			for i in range(2, len(tracklist), 4):
-				t.append((None, \
-					  (string.atoi(tracklist[i:i+2]), \
-					   string.atoi(tracklist[i+2:i+4]))))
-			tracklist = t
-		ntracks = len(tracklist)
-		self.id = _dbid((ntracks >> 4) & 0xF) + _dbid(ntracks & 0xF)
-		if ntracks <= _DB_ID_NTRACKS:
-			nidtracks = ntracks
-		else:
-			nidtracks = _DB_ID_NTRACKS - 1
-			min = 0
-			sec = 0
-			for track in tracklist:
-				start, length = track
-				min = min + length[0]
-				sec = sec + length[1]
-			min = min + sec / 60
-			sec = sec % 60
-			self.id = self.id + _dbid(min) + _dbid(sec)
-		for i in range(nidtracks):
-			start, length = tracklist[i]
-			self.id = self.id + _dbid(length[0]) + _dbid(length[1])
-		self.toc = string.zfill(ntracks, 2)
-		for track in tracklist:
-			start, length = track
-			self.toc = self.toc + string.zfill(length[0], 2) + \
-				  string.zfill(length[1], 2)
-
-	def write(self):
-		import posixpath
-		if os.environ.has_key('CDDB_WRITE_DIR'):
-			dir = os.environ['CDDB_WRITE_DIR']
-		else:
-			dir = os.environ['HOME'] + '/' + _cddbrc
-		file = dir + '/' + self.id + '.rdb'
-		if posixpath.exists(file):
-			# make backup copy
-			posix.rename(file, file + '~')
-		f = open(file, 'w')
-		f.write('album.title:\t' + self.title + '\n')
-		f.write('album.artist:\t' + self.artist + '\n')
-		f.write('album.toc:\t' + self.toc + '\n')
-		for note in self.notes:
-			f.write('album.notes:\t' + note + '\n')
-		prevpref = None
-		for i in range(1, len(self.track)):
-			if self.trackartist[i]:
-				f.write('track'+`i`+'.artist:\t'+self.trackartist[i]+'\n')
-			track = self.track[i]
-			try:
-				off = string.index(track, ',')
-			except string.index_error:
-				prevpref = None
-			else:
-				if prevpref and track[:off] == prevpref:
-					track = track[off:]
-				else:
-					prevpref = track[:off]
-			f.write('track' + `i` + '.title:\t' + track + '\n')
-		f.close()
diff --git a/Lib/irix5/cdplayer.py b/Lib/irix5/cdplayer.py
deleted file mode 100755
index 5c2c95a..0000000
--- a/Lib/irix5/cdplayer.py
+++ /dev/null
@@ -1,89 +0,0 @@
-# This file implements a class which forms an interface to the .cdplayerrc
-# file that is maintained by SGI's cdplayer program.
-#
-# Usage is as follows:
-#
-# import readcd
-# r = readcd.Readcd()
-# c = Cdplayer(r.gettrackinfo())
-#
-# Now you can use c.artist, c.title and c.track[trackno] (where trackno
-# starts at 1).  When the CD is not recognized, all values will be the empty
-# string.
-# It is also possible to set the above mentioned variables to new values.
-# You can then use c.write() to write out the changed values to the
-# .cdplayerrc file.
-
-cdplayerrc = '.cdplayerrc'
-
-class Cdplayer:
-	def __init__(self, tracklist):
-		import string
-		self.artist = ''
-		self.title = ''
-		if type(tracklist) == type(''):
-			t = []
-			for i in range(2, len(tracklist), 4):
-				t.append((None, \
-					  (string.atoi(tracklist[i:i+2]), \
-					   string.atoi(tracklist[i+2:i+4]))))
-			tracklist = t
-		self.track = [None] + [''] * len(tracklist)
-		self.id = 'd' + string.zfill(len(tracklist), 2)
-		for track in tracklist:
-			start, length = track
-			self.id = self.id + string.zfill(length[0], 2) + \
-				  string.zfill(length[1], 2)
-		try:
-			import posix
-			f = open(posix.environ['HOME'] + '/' + cdplayerrc, 'r')
-		except IOError:
-			return
-		import regex
-		reg = regex.compile('^\\([^:]*\\):\t\\(.*\\)')
-		s = self.id + '.'
-		l = len(s)
-		while 1:
-			line = f.readline()
-			if line == '':
-				break
-			if line[:l] == s:
-				line = line[l:]
-				if reg.match(line) == -1:
-					print 'syntax error in ~/' + cdplayerrc
-					continue
-				name = line[reg.regs[1][0]:reg.regs[1][1]]
-				value = line[reg.regs[2][0]:reg.regs[2][1]]
-				if name == 'title':
-					self.title = value
-				elif name == 'artist':
-					self.artist = value
-				elif name[:5] == 'track':
-					trackno = string.atoi(name[6:])
-					self.track[trackno] = value
-		f.close()
-
-	def write(self):
-		import posix
-		filename = posix.environ['HOME'] + '/' + cdplayerrc
-		try:
-			old = open(filename, 'r')
-		except IOError:
-			old = open('/dev/null', 'r')
-		new = open(filename + '.new', 'w')
-		s = self.id + '.'
-		l = len(s)
-		while 1:
-			line = old.readline()
-			if line == '':
-				break
-			if line[:l] <> s:
-				new.write(line)
-		new.write(self.id + '.title:\t' + self.title + '\n')
-		new.write(self.id + '.artist:\t' + self.artist + '\n')
-		for i in range(1, len(self.track)):
-			new.write(self.id + '.track.' + `i` + ':\t' + \
-				  self.track[i] + '\n')
-		old.close()
-		new.close()
-		posix.rename(filename + '.new', filename)
diff --git a/Lib/irix5/flp.doc b/Lib/irix5/flp.doc
deleted file mode 100755
index 1a2f374..0000000
--- a/Lib/irix5/flp.doc
+++ /dev/null
@@ -1,117 +0,0 @@
-.SH
-Module flp
-.LP
-The flp module loads fl-forms from fd files, as generated
-by fdesign. The module is designed to be flexible enough to allow
-almost anything to be done with the loaded form.
-.LP
-Loadform defines 
-two types of functions: functions to parse fd files and functions to
-create the forms from the templates returned by the parse functions.
-There are fairly low-level create functions that create single objects,
-and convenience routines that create complete forms, including callbacks,
-etc.
-.LP
-The exception flp.error is raised whenever an error occurs while parsing a forms
-definition file or creating a form.
-.SH 2
-Parsing functions
-.LP
-There are two parsing functions, parse_form() and parse_forms(). They
-take the following form:
-.LP
-.ft C
-ftuple = parse_form(filename, formname)
-.br
-ftdict = parse_forms(filename)
-.IP
-Parse_form parses a single form, and returns a tuple (ftmp, otmplist).
-Ftmp is a template for a form, otmplist is a list of templates for
-objects. See below for a description of these templates.
-.IP
-Parse_forms parses all forms in an fd file. It returns a dictionary of
-(ftmp, otmplist) tuples, indexed by formname.
-.IP
-Filename is the name of the forms definition file to inspect. The functions
-appends '.fd' if needed, and use 'sys.path' to locate the file.
-.IP
-formname is the name of the form to load. This argument is mandatory,
-even if the file only contains one form.
-.LP
-The form template and object template are structures that contain all
-the information read from the fd file, in 'natural' form. A form
-template record contains the following fields:
-.IP
-.nf
-"Name", the name of the form;
-"Width", the width of the form;
-"Height", the height of the form; and
-"Numberofobjects", the number of objects in the form.
-.LP
-An object template contains the following fields:
-.IP
-.nf
-"Class", the class of object (eg. FL.BUTTON);
-"Type", the sub-class (eg. FL.NORMALBUTTON);
-"Box", a list with four members: [x, y, width, height];
-"Boxtype", the type of box (eg. FL.DOWNBOX);
-"Colors", a list with the two object colors;
-"Alignment", the label alignment (eg. FL.ALIGNLEFT); 
-"Style", the label style (eg. FL.BOLDSTYLE);
-"Lcol", the label color;
-"Label", a string containing the label;
-"Name", a string containing the name of the object;
-"Callback", a string containing the callback routine name; and
-"Argument", a string containing the callback routine extra argument.
-.SH
-Low-level create routines.
-.LP
-The three low-level creation routines are called as follows:
-.LP
-.ft C
-form = create_form(form_template)
-.IP
-Create an fl form from a form template. Returns the form created.
-.LP
-.ft C
-obj = create_object(form, obj_template)
-.IP
-Create an object in an fl form. Return the new object.
-An error is raised if the object has a callback routine.
-.SH
-High-level create routines.
-.LP
-The 'standard' way to handle forms in python is to define a class
-that contains the form and all the objects (insofar as they are named),
-and that defines all the callback functions, and use an instance of
-this class to handle the form interaction.
-Flp contains three routines that simplify handling this paradigm:
-.LP
-.ft C
-create_full_form(instance, ftuple)
-.IP
-This routine takes an instance of your form-handling class and an
-ftuple (as returned by the parsing routines) as parameters. It inserts
-the form into the instance, defines all object names and arranges that
-the callback methods are called. All the names inserted into the
-instance are the same as the names used for the objects, etc. in the
-fd file.
-.LP
-.ft C
-merge_full_form(instance, form, ftuple)
-.IP
-This function does the same as create_full_form, only it does not create
-the form itself nor the 'background box' that fdesign automatically
-adds to each form. This is useful if your class inherits a superclass
-that already defines a skeleton form (with 'OK' and 'Cancel' buttons,
-for instance), and you want to merge the new form into that existing
-form. The 'form' parameter is the form to which the new objects are
-added.
-.LP
-If you use the paradigm sketched here but need slightly more control
-over object creation there is a routine that creates a single object
-and inserts its name (and arranges for the callback routine to be
-called):
-.LP
-.ft C
-create_object_instance(instance, form, obj_template)
diff --git a/Lib/irix5/flp.py b/Lib/irix5/flp.py
deleted file mode 100755
index 14e2278..0000000
--- a/Lib/irix5/flp.py
+++ /dev/null
@@ -1,455 +0,0 @@
-#
-# flp - Module to load fl forms from fd files
-#
-# Jack Jansen, December 1991
-#
-import string
-import os
-import sys
-import FL
-
-SPLITLINE = '--------------------'
-FORMLINE = '=============== FORM ==============='
-ENDLINE = '=============================='
-
-error = 'flp.error'
-
-##################################################################
-#    Part 1 - The parsing routines                               #
-##################################################################
-
-#
-# Externally visible function. Load form.
-#
-def parse_form(filename, formname):
-    forms = checkcache(filename)
-    if forms is None:
-	forms = parse_forms(filename)
-    if forms.has_key(formname):
-	return forms[formname]
-    else:
-	raise error, 'No such form in fd file'
-
-#
-# Externally visible function. Load all forms.
-#
-def parse_forms(filename):
-    forms = checkcache(filename)
-    if forms != None: return forms
-    fp = _open_formfile(filename)
-    nforms = _parse_fd_header(fp)
-    forms = {}
-    for i in range(nforms):
-	form = _parse_fd_form(fp, None)
-	forms[form[0].Name] = form
-    writecache(filename, forms)
-    return forms
-
-#
-# Internal: see if a cached version of the file exists
-#
-MAGIC = '.fdc'
-_internal_cache = {}			# Used by frozen scripts only
-def checkcache(filename):
-    if _internal_cache.has_key(filename):
-	altforms = _internal_cache[filename]
-	return _unpack_cache(altforms)
-    import marshal
-    fp, filename = _open_formfile2(filename)
-    fp.close()
-    cachename = filename + 'c'
-    try:
-	fp = open(cachename, 'r')
-    except IOError:
-	#print 'flp: no cache file', cachename
-	return None
-    try:
-	if fp.read(4) != MAGIC:
-	    print 'flp: bad magic word in cache file', cachename
-	    return None
-	cache_mtime = rdlong(fp)
-	file_mtime = getmtime(filename)
-	if cache_mtime != file_mtime:
-	    #print 'flp: outdated cache file', cachename
-	    return None
-	#print 'flp: valid cache file', cachename
-	altforms = marshal.load(fp)
-	return _unpack_cache(altforms)
-    finally:
-	fp.close()
-
-def _unpack_cache(altforms):
-	forms = {}
-	for name in altforms.keys():
-	    altobj, altlist = altforms[name]
-	    obj = _newobj()
-	    obj.make(altobj)
-	    list = []
-	    for altobj in altlist:
-		nobj = _newobj()
-		nobj.make(altobj)
-		list.append(nobj)
-	    forms[name] = obj, list
-	return forms
-
-def rdlong(fp):
-    s = fp.read(4)
-    if len(s) != 4: return None
-    a, b, c, d = s[0], s[1], s[2], s[3]
-    return ord(a)<<24 | ord(b)<<16 | ord(c)<<8 | ord(d)
-
-def wrlong(fp, x):
-    a, b, c, d = (x>>24)&0xff, (x>>16)&0xff, (x>>8)&0xff, x&0xff
-    fp.write(chr(a) + chr(b) + chr(c) + chr(d))
-
-def getmtime(filename):
-    import os
-    from stat import ST_MTIME
-    try:
-	return os.stat(filename)[ST_MTIME]
-    except os.error:
-	return None
-
-#
-# Internal: write cached version of the form (parsing is too slow!)
-#
-def writecache(filename, forms):
-    import marshal
-    fp, filename = _open_formfile2(filename)
-    fp.close()
-    cachename = filename + 'c'
-    try:
-	fp = open(cachename, 'w')
-    except IOError:
-	print 'flp: can\'t create cache file', cachename
-	return # Never mind
-    fp.write('\0\0\0\0') # Seek back and write MAGIC when done
-    wrlong(fp, getmtime(filename))
-    altforms = _pack_cache(forms)
-    marshal.dump(altforms, fp)
-    fp.seek(0)
-    fp.write(MAGIC)
-    fp.close()
-    #print 'flp: wrote cache file', cachename
-
-#
-# External: print some statements that set up the internal cache.
-# This is for use with the "freeze" script.  You should call
-# flp.freeze(filename) for all forms used by the script, and collect
-# the output on a file in a module file named "frozenforms.py".  Then
-# in the main program of the script import frozenforms.
-# (Don't forget to take this out when using the unfrozen version of
-# the script!)
-#
-def freeze(filename):
-    forms = parse_forms(filename)
-    altforms = _pack_cache(forms)
-    print 'import flp'
-    print 'flp._internal_cache[', `filename`, '] =', altforms
-
-#
-# Internal: create the data structure to be placed in the cache
-#
-def _pack_cache(forms):
-    altforms = {}
-    for name in forms.keys():
-	obj, list = forms[name]
-	altobj = obj.__dict__
-	altlist = []
-	for obj in list: altlist.append(obj.__dict__)
-	altforms[name] = altobj, altlist
-    return altforms
-
-#
-# Internal: Locate form file (using PYTHONPATH) and open file
-#
-def _open_formfile(filename):
-    return _open_formfile2(filename)[0]
-
-def _open_formfile2(filename):
-    if filename[-3:] <> '.fd':
-	filename = filename + '.fd'
-    if filename[0] == '/':
-	try:
-	    fp = open(filename,'r')
-	except IOError:
-	    fp = None
-    else:
-	for pc in sys.path:
-	    pn = os.path.join(pc, filename)
-	    try:
-		fp = open(pn, 'r')
-		filename = pn
-		break
-	    except IOError:
-		fp = None
-    if fp == None:
-	raise error, 'Cannot find forms file ' + filename
-    return fp, filename
-
-#
-# Internal: parse the fd file header, return number of forms
-#
-def _parse_fd_header(file):
-    # First read the magic header line
-    datum = _parse_1_line(file)
-    if datum <> ('Magic', 12321):
-	raise error, 'Not a forms definition file'
-    # Now skip until we know number of forms
-    while 1:
-	datum = _parse_1_line(file)
-	if type(datum) == type(()) and datum[0] == 'Numberofforms':
-	    break
-    return datum[1]
-#
-# Internal: parse fd form, or skip if name doesn't match.
-# the special value None means 'allways parse it'.
-#
-def _parse_fd_form(file, name):
-    datum = _parse_1_line(file)
-    if datum <> FORMLINE:
-	raise error, 'Missing === FORM === line'
-    form = _parse_object(file)
-    if form.Name == name or name == None:
-	objs = []
-	for j in range(form.Numberofobjects):
-	    obj = _parse_object(file)
-	    objs.append(obj)
-	return (form, objs)
-    else:
-	for j in range(form.Numberofobjects):
-	    _skip_object(file)
-    return None
-
-#
-# Internal class: a convient place to store object info fields
-#
-class _newobj:
-    def add(self, name, value):
-	self.__dict__[name] = value
-    def make(self, dict):
-	for name in dict.keys():
-	    self.add(name, dict[name])
-
-#
-# Internal parsing routines.
-#
-def _parse_string(str):
-    if '\\' in str:
-	s = '\'' + str + '\''
-	try:
-	    return eval(s)
-	except:
-	    pass
-    return str
-
-def _parse_num(str):
-    return eval(str)
-
-def _parse_numlist(str):
-    slist = string.split(str)
-    nlist = []
-    for i in slist:
-	nlist.append(_parse_num(i))
-    return nlist
-
-# This dictionary maps item names to parsing routines.
-# If no routine is given '_parse_num' is default.
-_parse_func = { \
-	'Name':		_parse_string, \
-	'Box':		_parse_numlist, \
-	'Colors':	_parse_numlist, \
-	'Label':	_parse_string, \
-	'Name':		_parse_string, \
-	'Callback':	_parse_string, \
-	'Argument':	_parse_string }
-
-# This function parses a line, and returns either
-# a string or a tuple (name,value)
-
-import regex
-prog = regex.compile('^\([^:]*\): *\(.*\)')
-
-def _parse_line(line):
-    if prog.match(line) < 0:
-	return line
-    a = prog.regs
-    name = line[:a[1][1]]
-    if name[0] == 'N':
-	    name = string.joinfields(string.split(name),'')
-	    name = string.lower(name)
-    name = string.upper(name[0]) + name[1:]
-    value = line[a[2][0]:]
-    try:
-	pf = _parse_func[name]
-    except KeyError:
-	pf = _parse_num
-    value = pf(value)
-    return (name, value)
-
-def _readline(file):
-    line = file.readline()
-    if not line:
-    	raise EOFError
-    return line[:-1]
-	
-def _parse_1_line(file):
-    line = _readline(file)
-    while line == '':
-	line = _readline(file)
-    return _parse_line(line)
-
-def _skip_object(file):
-    line = ''
-    while not line in (SPLITLINE, FORMLINE, ENDLINE):
-	pos = file.tell()
-	line = _readline(file)
-    if line == FORMLINE:
-	file.seek(pos)
-
-def _parse_object(file):
-    obj = _newobj()
-    while 1:
-	pos = file.tell()
-	datum = _parse_1_line(file)
-	if datum in (SPLITLINE, FORMLINE, ENDLINE):
-	    if datum == FORMLINE:
-		file.seek(pos)
-	    return obj
-	if type(datum) <> type(()) or len(datum) <> 2:
-	    raise error, 'Parse error, illegal line in object: '+datum
-	obj.add(datum[0], datum[1])
-
-#################################################################
-#   Part 2 - High-level object/form creation routines            #
-#################################################################
-
-#
-# External - Create a form an link to an instance variable.
-#
-def create_full_form(inst, (fdata, odatalist)):
-    form = create_form(fdata)
-    exec 'inst.'+fdata.Name+' = form\n'
-    for odata in odatalist:
-	create_object_instance(inst, form, odata)
-
-#
-# External - Merge a form into an existing form in an instance
-# variable.
-#
-def merge_full_form(inst, form, (fdata, odatalist)):
-    exec 'inst.'+fdata.Name+' = form\n'
-    if odatalist[0].Class <> FL.BOX:
-	raise error, 'merge_full_form() expects FL.BOX as first obj'
-    for odata in odatalist[1:]:
-	create_object_instance(inst, form, odata)
-
-
-#################################################################
-#   Part 3 - Low-level object/form creation routines            #
-#################################################################
-
-#
-# External Create_form - Create form from parameters
-#
-def create_form(fdata):
-    import fl
-    return fl.make_form(FL.NO_BOX, fdata.Width, fdata.Height)
-
-#
-# External create_object - Create an object. Make sure there are
-# no callbacks. Returns the object created.
-#
-def create_object(form, odata):
-    obj = _create_object(form, odata)
-    if odata.Callback:
-	raise error, 'Creating free object with callback'
-    return obj
-#
-# External create_object_instance - Create object in an instance.
-#
-def create_object_instance(inst, form, odata):
-    obj = _create_object(form, odata)
-    if odata.Callback:
-	cbfunc = eval('inst.'+odata.Callback)
-	obj.set_call_back(cbfunc, odata.Argument)
-    if odata.Name:
-	exec 'inst.' + odata.Name + ' = obj\n'
-#
-# Internal _create_object: Create the object and fill options
-#
-def _create_object(form, odata):
-    crfunc = _select_crfunc(form, odata.Class)
-    obj = crfunc(odata.Type, odata.Box[0], odata.Box[1], odata.Box[2], \
-	    odata.Box[3], odata.Label)
-    if not odata.Class in (FL.BEGIN_GROUP, FL.END_GROUP):
-	obj.boxtype = odata.Boxtype
-	obj.col1 = odata.Colors[0]
-	obj.col2 = odata.Colors[1]
-	obj.align = odata.Alignment
-	obj.lstyle = odata.Style
-	obj.lsize = odata.Size
-	obj.lcol = odata.Lcol
-    return obj
-#
-# Internal crfunc: helper function that returns correct create function
-#
-def _select_crfunc(fm, cl):
-    if cl == FL.BEGIN_GROUP: return fm.bgn_group
-    elif cl == FL.END_GROUP: return fm.end_group
-    elif cl == FL.BITMAP: return fm.add_bitmap
-    elif cl == FL.BOX: return fm.add_box
-    elif cl == FL.BROWSER: return fm.add_browser
-    elif cl == FL.BUTTON: return fm.add_button
-    elif cl == FL.CHART: return fm.add_chart
-    elif cl == FL.CHOICE: return fm.add_choice
-    elif cl == FL.CLOCK: return fm.add_clock
-    elif cl == FL.COUNTER: return fm.add_counter
-    elif cl == FL.DIAL: return fm.add_dial
-    elif cl == FL.FREE: return fm.add_free
-    elif cl == FL.INPUT: return fm.add_input
-    elif cl == FL.LIGHTBUTTON: return fm.add_lightbutton
-    elif cl == FL.MENU: return fm.add_menu
-    elif cl == FL.POSITIONER: return fm.add_positioner
-    elif cl == FL.ROUNDBUTTON: return fm.add_roundbutton
-    elif cl == FL.SLIDER: return fm.add_slider
-    elif cl == FL.VALSLIDER: return fm.add_valslider
-    elif cl == FL.TEXT: return fm.add_text
-    elif cl == FL.TIMER: return fm.add_timer
-    else:
-	raise error, 'Unknown object type: ' + `cl`
-
-
-def test():
-    import time
-    t0 = time.time()
-    if len(sys.argv) == 2:
-	forms = parse_forms(sys.argv[1])
-	t1 = time.time()
-	print 'parse time:', 0.001*(t1-t0), 'sec.'
-	keys = forms.keys()
-	keys.sort()
-	for i in keys:
-	    _printform(forms[i])
-    elif len(sys.argv) == 3:
-	form = parse_form(sys.argv[1], sys.argv[2])
-	t1 = time.time()
-	print 'parse time:', round(t1-t0, 3), 'sec.'
-	_printform(form)
-    else:
-	print 'Usage: test fdfile [form]'
-
-def _printform(form):
-    f = form[0]
-    objs = form[1]
-    print 'Form ', f.Name, ', size: ', f.Width, f.Height, ' Nobj ', f.Numberofobjects
-    for i in objs:
-	print '  Obj ', i.Name, ' type ', i.Class, i.Type
-	print '    Box ', i.Box, ' btype ', i.Boxtype
-	print '    Label ', i.Label, ' size/style/col/align ', i.Size,i.Style, i.Lcol, i.Alignment
-	print '    cols ', i.Colors
-	print '    cback ', i.Callback, i.Argument
-
-# Local variables:
-# py-indent-offset: 4
-# end:
diff --git a/Lib/irix5/jpeg.py b/Lib/irix5/jpeg.py
deleted file mode 100755
index 85d6d83..0000000
--- a/Lib/irix5/jpeg.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# Implement 'jpeg' interface using SGI's compression library
-
-# XXX Options 'smooth' and 'optimize' are ignored.
-
-# XXX It appears that compressing grayscale images doesn't work right;
-# XXX the resulting file causes weirdness.
-
-error = 'jpeg.error' # Exception
-
-options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0}
-
-comp = None
-decomp = None
-
-def compress(imgdata, width, height, bytesperpixel):
-	global comp
-	import cl, CL
-	if comp is None: comp = cl.OpenCompressor(CL.JPEG)
-	if bytesperpixel == 1:
-		format = CL.GRAYSCALE
-	elif bytesperpixel == 4:
-		format = CL.RGBX
-	if options['forcegray']:
-		iformat = CL.GRAYSCALE
-	else:
-		iformat = CL.YUV
-	# XXX How to support 'optimize'?
-	params = [CL.IMAGE_WIDTH, width, CL.IMAGE_HEIGHT, height, \
-		  CL.ORIGINAL_FORMAT, format, \
-		  CL.ORIENTATION, CL.BOTTOM_UP, \
-		  CL.QUALITY_FACTOR, options['quality'], \
-		  CL.INTERNAL_FORMAT, iformat, \
-		 ]
-	comp.SetParams(params)
-	jpegdata = comp.Compress(1, imgdata)
-	return jpegdata
-
-def decompress(jpegdata):
-	global decomp
-	import cl, CL
-	if decomp is None: decomp = cl.OpenDecompressor(CL.JPEG)
-	headersize = decomp.ReadHeader(jpegdata)
-	params = [CL.IMAGE_WIDTH, 0, CL.IMAGE_HEIGHT, 0, CL.INTERNAL_FORMAT, 0]
-	decomp.GetParams(params)
-	width, height, format = params[1], params[3], params[5]
-	if format == CL.GRAYSCALE or options['forcegray']:
-		format = CL.GRAYSCALE
-		bytesperpixel = 1
-	else:
-		format = CL.RGBX
-		bytesperpixel = 4
-	# XXX How to support 'smooth'?
-	params = [CL.ORIGINAL_FORMAT, format, \
-		  CL.ORIENTATION, CL.BOTTOM_UP, \
-		  CL.FRAME_BUFFER_SIZE, width*height*bytesperpixel]
-	decomp.SetParams(params)
-	imgdata = decomp.Decompress(1, jpegdata)
-	return imgdata, width, height, bytesperpixel
-
-def setoption(name, value):
-	if type(value) <> type(0):
-		raise TypeError, 'jpeg.setoption: numeric options only'
-	if name == 'forcegrey':
-		name = 'forcegray'
-	if not options.has_key(name):
-		raise KeyError, 'jpeg.setoption: unknown option name'
-	options[name] = int(value)
-
-def test():
-	import sys
-	if sys.argv[1:2] == ['-g']:
-		del sys.argv[1]
-		setoption('forcegray', 1)
-	if not sys.argv[1:]:
-		sys.argv.append('/usr/local/images/data/jpg/asterix.jpg')
-	for file in sys.argv[1:]:
-		show(file)
-
-def show(file):
-	import gl, GL, DEVICE
-	jpegdata = open(file, 'r').read()
-	imgdata, width, height, bytesperpixel = decompress(jpegdata)
-	gl.foreground()
-	gl.prefsize(width, height)
-	win = gl.winopen(file)
-	if bytesperpixel == 1:
-		gl.cmode()
-		gl.pixmode(GL.PM_SIZE, 8)
-		gl.gconfig()
-		for i in range(256):
-			gl.mapcolor(i, i, i, i)
-	else:
-		gl.RGBmode()
-		gl.pixmode(GL.PM_SIZE, 32)
-		gl.gconfig()
-	gl.qdevice(DEVICE.REDRAW)
-	gl.qdevice(DEVICE.ESCKEY)
-	gl.qdevice(DEVICE.WINQUIT)
-	gl.qdevice(DEVICE.WINSHUT)
-	gl.lrectwrite(0, 0, width-1, height-1, imgdata)
-	while 1:
-		dev, val = gl.qread()
-		if dev in (DEVICE.ESCKEY, DEVICE.WINSHUT, DEVICE.WINQUIT):
-			break
-		if dev == DEVICE.REDRAW:
-			gl.lrectwrite(0, 0, width-1, height-1, imgdata)
-	gl.winclose(win)
-	# Now test the compression and write the result to a fixed filename
-	newjpegdata = compress(imgdata, width, height, bytesperpixel)
-	open('/tmp/j.jpg', 'w').write(newjpegdata)
diff --git a/Lib/irix5/panel.py b/Lib/irix5/panel.py
deleted file mode 100755
index 2c0365c..0000000
--- a/Lib/irix5/panel.py
+++ /dev/null
@@ -1,281 +0,0 @@
-# Module 'panel'
-#
-# Support for the Panel library.
-# Uses built-in module 'pnl'.
-# Applciations should use 'panel.function' instead of 'pnl.function';
-# most 'pnl' functions are transparently exported by 'panel',
-# but dopanel() is overridden and you have to use this version
-# if you want to use callbacks.
-
-
-import pnl
-
-
-debug = 0
-
-
-# Test if an object is a list.
-#
-def is_list(x):
-	return type(x) == type([])
-
-
-# Reverse a list.
-#
-def reverse(list):
-	res = []
-	for item in list:
-		res.insert(0, item)
-	return res
-
-
-# Get an attribute of a list, which may itself be another list.
-# Don't use 'prop' for name.
-#
-def getattrlist(list, name):
-	for item in list:
-		if item and is_list(item) and item[0] == name:
-			return item[1:]
-	return []
-
-
-# Get a property of a list, which may itself be another list.
-#
-def getproplist(list, name):
-	for item in list:
-		if item and is_list(item) and item[0] == 'prop':
-			if len(item) > 1 and item[1] == name:
-				return item[2:]
-	return []
-
-
-# Test if an actuator description contains the property 'end-of-group'
-#
-def is_endgroup(list):
-	x = getproplist(list, 'end-of-group')
-	return (x and x[0] == '#t')
-
-
-# Neatly display an actuator definition given as S-expression
-# the prefix string is printed before each line.
-#
-def show_actuator(prefix, a):
-	for item in a:
-		if not is_list(item):
-			print prefix, item
-		elif item and item[0] == 'al':
-			print prefix, 'Subactuator list:'
-			for a in item[1:]:
-				show_actuator(prefix + '    ', a)
-		elif len(item) == 2:
-			print prefix, item[0], '=>', item[1]
-		elif len(item) == 3 and item[0] == 'prop':
-			print prefix, 'Prop', item[1], '=>',
-			print item[2]
-		else:
-			print prefix, '?', item
-
-
-# Neatly display a panel.
-#
-def show_panel(prefix, p):
-	for item in p:
-		if not is_list(item):
-			print prefix, item
-		elif item and item[0] == 'al':
-			print prefix, 'Actuator list:'
-			for a in item[1:]:
-				show_actuator(prefix + '    ', a)
-		elif len(item) == 2:
-			print prefix, item[0], '=>', item[1]
-		elif len(item) == 3 and item[0] == 'prop':
-			print prefix, 'Prop', item[1], '=>',
-			print item[2]
-		else:
-			print prefix, '?', item
-
-
-# Exception raised by build_actuator or build_panel.
-#
-panel_error = 'panel error'
-
-
-# Dummy callback used to initialize the callbacks.
-#
-def dummy_callback(arg):
-	pass
-
-
-# Assign attributes to members of the target.
-# Attribute names in exclist are ignored.
-# The member name is the attribute name prefixed with the prefix.
-#
-def assign_members(target, attrlist, exclist, prefix):
-	for item in attrlist:
-		if is_list(item) and len(item) == 2 and item[0] not in exclist:
-			name, value = item[0], item[1]
-			ok = 1
-			if value[0] in '-0123456789':
-				value = eval(value)
-			elif value[0] == '"':
-				value = value[1:-1]
-			elif value == 'move-then-resize':
-				# Strange default set by Panel Editor...
-				ok = 0
-			else:
-				print 'unknown value', value, 'for', name
-				ok = 0
-			if ok:
-				lhs = 'target.' + prefix + name
-				stmt = lhs + '=' + `value`
-				if debug: print 'exec', stmt
-				try:
-					exec stmt + '\n'
-				except KeyboardInterrupt: # Don't catch this!
-					raise KeyboardInterrupt
-				except:
-					print 'assign failed:', stmt
-
-
-# Build a real actuator from an actuator descriptior.
-# Return a pair (actuator, name).
-#
-def build_actuator(descr):
-	namelist = getattrlist(descr, 'name')
-	if namelist:
-		# Assume it is a string
-		actuatorname = namelist[0][1:-1]
-	else:
-		actuatorname = ''
-	type = descr[0]
-	if type[:4] == 'pnl_': type = type[4:]
-	act = pnl.mkact(type)
-	act.downfunc = act.activefunc = act.upfunc = dummy_callback
-	#
-	assign_members(act, descr[1:], ['al', 'data', 'name'], '')
-	#
-	# Treat actuator-specific data
-	#
-	datalist = getattrlist(descr, 'data')
-	prefix = ''
-	if type[-4:] == 'puck':
-		prefix = 'puck_'
-	elif type == 'mouse':
-		prefix = 'mouse_'
-	assign_members(act, datalist, [], prefix)
-	#
-	return act, actuatorname
-
-
-# Build all sub-actuators and add them to the super-actuator.
-# The super-actuator must already have been added to the panel.
-# Sub-actuators with defined names are added as members to the panel
-# so they can be referenced as p.name.
-#
-# Note: I have no idea how panel.endgroup() works when applied
-# to a sub-actuator.
-#
-def build_subactuators(panel, super_act, al):
-	#
-	# This is nearly the same loop as below in build_panel(),
-	# except a call is made to addsubact() instead of addact().
-	#
-	for a in al:
-		act, name = build_actuator(a)
-		act.addsubact(super_act)
-		if name:
-			stmt = 'panel.' + name + ' = act'
-			if debug: print 'exec', stmt
-			exec stmt + '\n'
-		if is_endgroup(a):
-			panel.endgroup()
-		sub_al = getattrlist(a, 'al')
-		if sub_al:
-			build_subactuators(panel, act, sub_al)
-	#
-	# Fix the actuator to which whe just added subactuators.
-	# This can't hurt (I hope) and is needed for the scroll actuator.
-	#
-	super_act.fixact()
-
-
-# Build a real panel from a panel definition.
-# Return a panel object p, where for each named actuator a, p.name is a
-# reference to a.
-#
-def build_panel(descr):
-	#
-	# Sanity check
-	#
-	if (not descr) or descr[0] <> 'panel':
-		raise panel_error, 'panel description must start with "panel"'
-	#
-	if debug: show_panel('', descr)
-	#
-	# Create an empty panel
-	#
-	panel = pnl.mkpanel()
-	#
-	# Assign panel attributes
-	#
-	assign_members(panel, descr[1:], ['al'], '')
-	#
-	# Look for actuator list
-	#
-	al = getattrlist(descr, 'al')
-	#
-	# The order in which actuators are created is important
-	# because of the endgroup() operator.
-	# Unfortunately the Panel Editor outputs the actuator list
-	# in reverse order, so we reverse it here.
-	#
-	al = reverse(al)
-	#
-	for a in al:
-		act, name = build_actuator(a)
-		act.addact(panel)
-		if name:
-			stmt = 'panel.' + name + ' = act'
-			exec stmt + '\n'
-		if is_endgroup(a):
-			panel.endgroup()
-		sub_al = getattrlist(a, 'al')
-		if sub_al:
-			build_subactuators(panel, act, sub_al)
-	#
-	return panel
-
-
-# Wrapper around pnl.dopanel() which calls call-back functions.
-#
-def my_dopanel():
-	# Extract only the first 4 elements to allow for future expansion
-	a, down, active, up = pnl.dopanel()[:4]
-	if down:
-		down.downfunc(down)
-	if active:
-		active.activefunc(active)
-	if up:
-		up.upfunc(up)
-	return a
-
-
-# Create one or more panels from a description file (S-expressions)
-# generated by the Panel Editor.
-# 
-def defpanellist(file):
-	import panelparser
-	descrlist = panelparser.parse_file(open(file, 'r'))
-	panellist = []
-	for descr in descrlist:
-		panellist.append(build_panel(descr))
-	return panellist
-
-
-# Import everything from built-in method pnl, so the user can always
-# use panel.foo() instead of pnl.foo().
-# This gives *no* performance penalty once this module is imported.
-#
-from pnl import *			# for export
-
-dopanel = my_dopanel			# override pnl.dopanel
diff --git a/Lib/irix5/panelparser.py b/Lib/irix5/panelparser.py
deleted file mode 100755
index 1b069fa..0000000
--- a/Lib/irix5/panelparser.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# Module 'parser'
-#
-# Parse S-expressions output by the Panel Editor
-# (which is written in Scheme so it can't help writing S-expressions).
-#
-# See notes at end of file.
-
-
-whitespace = ' \t\n'
-operators = '()\''
-separators = operators + whitespace + ';' + '"'
-
-
-# Tokenize a string.
-# Return a list of tokens (strings).
-#
-def tokenize_string(s):
-	tokens = []
-	while s:
-		c = s[:1]
-		if c in whitespace:
-			s = s[1:]
-		elif c == ';':
-			s = ''
-		elif c == '"':
-			n = len(s)
-			i = 1
-			while i < n:
-				c = s[i]
-				i = i+1
-				if c == '"': break
-				if c == '\\': i = i+1
-			tokens.append(s[:i])
-			s = s[i:]
-		elif c in operators:
-			tokens.append(c)
-			s = s[1:]
-		else:
-			n = len(s)
-			i = 1
-			while i < n:
-				if s[i] in separators: break
-				i = i+1
-			tokens.append(s[:i])
-			s = s[i:]
-	return tokens
-
-
-# Tokenize a whole file (given as file object, not as file name).
-# Return a list of tokens (strings).
-#
-def tokenize_file(fp):
-	tokens = []
-	while 1:
-		line = fp.readline()
-		if not line: break
-		tokens = tokens + tokenize_string(line)
-	return tokens
-
-
-# Exception raised by parse_exr.
-#
-syntax_error = 'syntax error'
-
-
-# Parse an S-expression.
-# Input is a list of tokens as returned by tokenize_*().
-# Return a pair (expr, tokens)
-# where expr is a list representing the s-expression,
-# and tokens contains the remaining tokens.
-# May raise syntax_error.
-#
-def parse_expr(tokens):
-	if (not tokens) or tokens[0] <> '(':
-		raise syntax_error, 'expected "("'
-	tokens = tokens[1:]
-	expr = []
-	while 1:
-		if not tokens:
-			raise syntax_error, 'missing ")"'
-		if tokens[0] == ')':
-			return expr, tokens[1:]
-		elif tokens[0] == '(':
-			subexpr, tokens = parse_expr(tokens)
-			expr.append(subexpr)
-		else:
-			expr.append(tokens[0])
-			tokens = tokens[1:]
-
-
-# Parse a file (given as file object, not as file name).
-# Return a list of parsed S-expressions found at the top level.
-#
-def parse_file(fp):
-	tokens = tokenize_file(fp)
-	exprlist = []
-	while tokens:
-		expr, tokens = parse_expr(tokens)
-		exprlist.append(expr)
-	return exprlist
-
-
-# EXAMPLE:
-#
-# The input
-#	'(hip (hop hur-ray))'
-#
-# passed to tokenize_string() returns the token list
-#	['(', 'hip', '(', 'hop', 'hur-ray', ')', ')']
-#
-# When this is passed to parse_expr() it returns the expression
-#	['hip', ['hop', 'hur-ray']]
-# plus an empty token list (because there are no tokens left.
-#
-# When a file containing the example is passed to parse_file() it returns
-# a list whose only element is the output of parse_expr() above:
-#	[['hip', ['hop', 'hur-ray']]]
-
-
-# TOKENIZING:
-#
-# Comments start with semicolon (;) and continue till the end of the line.
-#
-# Tokens are separated by whitespace, except the following characters
-# always form a separate token (outside strings):
-#	( ) '
-# Strings are enclosed in double quotes (") and backslash (\) is used
-# as escape character in strings.
diff --git a/Lib/irix5/readcd.doc b/Lib/irix5/readcd.doc
deleted file mode 100755
index 1be549c..0000000
--- a/Lib/irix5/readcd.doc
+++ /dev/null
@@ -1,104 +0,0 @@
-Interface to CD-ROM player.
-
-This module implements an interface to the built-in cd module.  The
-intention is to provide a more user-friendly interface than the
-built-in module.
-
-The module defines a class Readcd with several methods.  The
-initialization of the class will try to open the CD player.  This
-means that initialization will fail if the CD player is already in
-use.  A RuntimeError will be raised by the cd module in that case.
-
-The way to work with this module is as follows.  The user specifies
-the parts of the CD that are to be read and he specifies callback
-functions which are to be called by the system.  At some point he can
-tell the system to play.  The specified parts of the CD will then be
-read and the callbacks will be called.
-
-Initialization.
-===============
-
-r = readcd.Readcd([cd-player [, mode]])
-
-The optional arguments are the name of the CD device and the mode.
-When "mode" is not specified, it defaults to 'r' (which is the only
-possible value); when "cd-player" also isn't specified, it defaults
-to "None" which indicates the default CD player.
-
-Methods.
-========
-
-eject() -- Eject the CD from the player.
-
-reset() -- Reset the list of data stretches to be played.
-
-appendtrack(track) -- Append the specified track to the list of music
-stretches.
-
-appendstretch(first, last) -- Append the stretch from "first" to "last"
-to the list of music stretches.  Both "first" and "last" can be in one
-of four forms.  "None": for "first", the beginning of the CD, for
-"last" the end of the CD; a single integer: a track number--playing
-starts at the beginning of the track or ends at the end of the
-specified track; a three-tuple: the absolute time from the start of
-the CD in minutes, seconds, frames; a four-tuple: track number and
-relative time within the track in minutes, seconds, frames.
-
-settracks(tracklist) -- The argument is a list of integers.  The list
-of stretches is set to argument list.  The old list is discarded.
-
-setcallback(type, func, arg) -- Set a callback function for "type".
-The function will be called as func(arg, type, data) where "arg" is
-the third argument of setcallback, "type" is the type of callback,
-"data" is type-dependent data.  See the CDsetcallback(3) manual page
-for more information.  The possible "type" arguments are defined in
-the CD module.
-
-removecallback(type) -- Remove the callback for "type".
-
-gettrackinfo([tracklist]) -- Return a list of tuples.  Each tuple
-consists of start and length information of a track.  The start and
-length information consist of three-tuples with minutes, seconds and
-frames.  The optional tracklist argument gives a list of interesting
-track numbers.  If no tracklist is specified, information about all
-tracks is returned.
-
-getstatus() -- Return the status information of the CD.
-
-play() -- Play the preprogrammed stretches of music from the CD.  When
-nothing was programmed, the whole CD is played.
-
-Specifying stretches.
-=====================
-
-There are three methods available to specify a stretch of music to be
-played.  The easiest way is to use "settracklist(tracklist)" with which
-a list of tracks can be specified.  "settracklist(tracklist)" is
-equivalent to the sequence
-	reset()
-	for track in tracklist:
-		appendtrack(track)
-
-The next method is "appendtrack(track)" with which a whole track can be
-added to the list of music to be played.  "appendtrack(track)" is
-equivalent to "appendstretch(track, track)".
-
-The most complete method is "appendstretch(first, last)".  Using this
-method, it is possible to specify any stretch of music.
-
-When two consecutive tracks are played, it is possible to choose
-whether the pause that may be between the tracks is played as well or
-whether the pause should be skipped.  When the end of a stretch is
-specified using a track number and the next stretch starts at the
-beginning of the following track and that was also specified using the
-track number (that is, both were specified as integers, not as tuples),
-the pause is played.  When either value was specified using absolute
-time or track-relative time (that is, as three-tuple or as
-four-tuple), the pause will not be played.
-
-Errors.
-=======
-
-When an error occurs, an exception will be raised.  Depending on where
-the error occurs, the exception may either be "readcd.Error" or
-"RuntimeError".
diff --git a/Lib/irix5/readcd.py b/Lib/irix5/readcd.py
deleted file mode 100755
index 5c4b824..0000000
--- a/Lib/irix5/readcd.py
+++ /dev/null
@@ -1,242 +0,0 @@
-# Class interface to the CD module.
-
-import cd, CD
-
-Error = 'Readcd.Error'
-_Stop = 'Readcd.Stop'
-
-def _doatime(self, cb_type, data):
-	if ((data[0] * 60) + data[1]) * 75 + data[2] > self.end:
-##		print 'done with list entry',`self.listindex`
-		raise _Stop
-	func, arg = self.callbacks[cb_type]
-	if func:
-		func(arg, cb_type, data)
-
-def _dopnum(self, cb_type, data):
-	if data > self.end:
-##		print 'done with list entry',`self.listindex`
-		raise _Stop
-	func, arg = self.callbacks[cb_type]
-	if func:
-		func(arg, cb_type, data)
-
-class Readcd:
-	def __init__(self, *arg):
-		if len(arg) == 0:
-			self.player = cd.open()
-		elif len(arg) == 1:
-			self.player = cd.open(arg[0])
-		elif len(arg) == 2:
-			self.player = cd.open(arg[0], arg[1])
-		else:
-			raise Error, 'bad __init__ call'
-		self.list = []
-		self.callbacks = [(None, None)] * 8
-		self.parser = cd.createparser()
-		self.playing = 0
-		self.end = 0
-		self.status = None
-		self.trackinfo = None
-
-	def eject(self):
-		self.player.eject()
-		self.list = []
-		self.end = 0
-		self.listindex = 0
-		self.status = None
-		self.trackinfo = None
-		if self.playing:
-##			print 'stop playing from eject'
-			raise _Stop
-
-	def pmsf2msf(self, track, min, sec, frame):
-		if not self.status:
-			self.cachestatus()
-		if track < self.status[5] or track > self.status[6]:
-			raise Error, 'track number out of range'
-		if not self.trackinfo:
-			self.cacheinfo()
-		start, total = self.trackinfo[track]
-		start = ((start[0] * 60) + start[1]) * 75 + start[2]
-		total = ((total[0] * 60) + total[1]) * 75 + total[2]
-		block = ((min * 60) + sec) * 75 + frame
-		if block > total:
-			raise Error, 'out of range'
-		block = start + block
-		min, block = divmod(block, 75*60)
-		sec, frame = divmod(block, 75)
-		return min, sec, frame
-
-	def reset(self):
-		self.list = []
-
-	def appendtrack(self, track):
-		self.appendstretch(track, track)
-				
-	def appendstretch(self, start, end):
-		if not self.status:
-			self.cachestatus()
-		if not start:
-			start = 1
-		if not end:
-			end = self.status[6]
-		if type(end) == type(0):
-			if end < self.status[5] or end > self.status[6]:
-				raise Error, 'range error'
-		else:
-			l = len(end)
-			if l == 4:
-				prog, min, sec, frame = end
-				if prog < self.status[5] or prog > self.status[6]:
-					raise Error, 'range error'
-				end = self.pmsf2msf(prog, min, sec, frame)
-			elif l <> 3:
-				raise Error, 'syntax error'
-		if type(start) == type(0):
-			if start < self.status[5] or start > self.status[6]:
-				raise Error, 'range error'
-			if len(self.list) > 0:
-				s, e = self.list[-1]
-				if type(e) == type(0):
-					if start == e+1:
-						start = s
-						del self.list[-1]
-		else:
-			l = len(start)
-			if l == 4:
-				prog, min, sec, frame = start
-				if prog < self.status[5] or prog > self.status[6]:
-					raise Error, 'range error'
-				start = self.pmsf2msf(prog, min, sec, frame)
-			elif l <> 3:
-				raise Error, 'syntax error'
-		self.list.append((start, end))
-
-	def settracks(self, list):
-		self.list = []
-		for track in list:
-			self.appendtrack(track)
-
-	def setcallback(self, cb_type, func, arg):
-		if cb_type < 0 or cb_type >= 8:
-			raise Error, 'type out of range'
-		self.callbacks[cb_type] = (func, arg)
-		if self.playing:
-			start, end = self.list[self.listindex]
-			if type(end) == type(0):
-				if cb_type <> CD.PNUM:
-					self.parser.setcallback(cb_type, func, arg)
-			else:
-				if cb_type <> CD.ATIME:
-					self.parser.setcallback(cb_type, func, arg)
-
-	def removecallback(self, cb_type):
-		if cb_type < 0 or cb_type >= 8:
-			raise Error, 'type out of range'
-		self.callbacks[cb_type] = (None, None)
-		if self.playing:
-			start, end = self.list[self.listindex]
-			if type(end) == type(0):
-				if cb_type <> CD.PNUM:
-					self.parser.removecallback(cb_type)
-			else:
-				if cb_type <> CD.ATIME:
-					self.parser.removecallback(cb_type)
-
-	def gettrackinfo(self, *arg):
-		if not self.status:
-			self.cachestatus()
-		if not self.trackinfo:
-			self.cacheinfo()
-		if len(arg) == 0:
-			return self.trackinfo[self.status[5]:self.status[6]+1]
-		result = []
-		for i in arg:
-			if i < self.status[5] or i > self.status[6]:
-				raise Error, 'range error'
-			result.append(self.trackinfo[i])
-		return result
-
-	def cacheinfo(self):
-		if not self.status:
-			self.cachestatus()
-		self.trackinfo = []
-		for i in range(self.status[5]):
-			self.trackinfo.append(None)
-		for i in range(self.status[5], self.status[6]+1):
-			self.trackinfo.append(self.player.gettrackinfo(i))
-
-	def cachestatus(self):
-		self.status = self.player.getstatus()
-		if self.status[0] == CD.NODISC:
-			self.status = None
-			raise Error, 'no disc in player'
-
-	def getstatus(self):
-		return self.player.getstatus()
-
-	def play(self):
-		if not self.status:
-			self.cachestatus()
-		size = self.player.bestreadsize()
-		self.listindex = 0
-		self.playing = 0
-		for i in range(8):
-			func, arg = self.callbacks[i]
-			if func:
-				self.parser.setcallback(i, func, arg)
-			else:
-				self.parser.removecallback(i)
-		if len(self.list) == 0:
-			for i in range(self.status[5], self.status[6]+1):
-				self.appendtrack(i)
-		try:
-			while 1:
-				if not self.playing:
-					if self.listindex >= len(self.list):
-						return
-					start, end = self.list[self.listindex]
-					if type(start) == type(0):
-						dummy = self.player.seektrack(
-							start)
-					else:
-						min, sec, frame = start
-						dummy = self.player.seek(
-							min, sec, frame)
-					if type(end) == type(0):
-						self.parser.setcallback(
-							CD.PNUM, _dopnum, self)
-						self.end = end
-						func, arg = \
-						      self.callbacks[CD.ATIME]
-						if func:
-							self.parser.setcallback(CD.ATIME, func, arg)
-						else:
-							self.parser.removecallback(CD.ATIME)
-					else:
-						min, sec, frame = end
-						self.parser.setcallback(
-							CD.ATIME, _doatime,
-							self)
-						self.end = (min * 60 + sec) * \
-							   75 + frame
-						func, arg = \
-						      self.callbacks[CD.PNUM]
-						if func:
-							self.parser.setcallback(CD.PNUM, func, arg)
-						else:
-							self.parser.removecallback(CD.PNUM)
-					self.playing = 1
-				data = self.player.readda(size)
-				if data == '':
-					self.playing = 0
-					self.listindex = self.listindex + 1
-					continue
-				try:
-					self.parser.parseframe(data)
-				except _Stop:
-					self.playing = 0
-					self.listindex = self.listindex + 1
-		finally:
-			self.playing = 0
diff --git a/Lib/irix5/regen b/Lib/irix5/regen
deleted file mode 100755
index 4c4ea5c..0000000
--- a/Lib/irix5/regen
+++ /dev/null
@@ -1,13 +0,0 @@
-#! /bin/sh
-case `uname -sr` in
-'IRIX '[45].*)	;;
-*)	echo Probably not on an IRIX system 1>&2
-	exit 1;;
-esac
-set -v
-h2py /usr/include/sys/fcntl.h
-h2py /usr/include/sys/file.h
-h2py /usr/include/sys/socket.h
-h2py -i '(u_long)' /usr/include/netinet/in.h
-h2py /usr/include/sys/termios.h
-h2py /usr/include/errno.h
diff --git a/Lib/irix5/torgb.py b/Lib/irix5/torgb.py
deleted file mode 100755
index f283063..0000000
--- a/Lib/irix5/torgb.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# Convert "arbitrary" image files to rgb files (SGI's image format).
-# Input may be compressed.
-# The uncompressed file type may be PBM, PGM, PPM, GIF, TIFF, or Sun raster.
-# An exception is raised if the file is not of a recognized type.
-# Returned filename is either the input filename or a temporary filename;
-# in the latter case the caller must ensure that it is removed.
-# Other temporary files used are removed by the function.
-
-import os
-import tempfile
-import pipes
-import imghdr
-
-table = {}
-
-t = pipes.Template()
-t.append('fromppm $IN $OUT', 'ff')
-table['ppm'] = t
-
-t = pipes.Template()
-t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
-t.append('fromppm $IN $OUT', 'ff')
-table['pnm'] = t
-table['pgm'] = t
-table['pbm'] = t
-
-t = pipes.Template()
-t.append('fromgif $IN $OUT', 'ff')
-table['gif'] = t
-
-t = pipes.Template()
-t.append('tifftopnm', '--')
-t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
-t.append('fromppm $IN $OUT', 'ff')
-table['tiff'] = t
-
-t = pipes.Template()
-t.append('rasttopnm', '--')
-t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
-t.append('fromppm $IN $OUT', 'ff')
-table['rast'] = t
-
-t = pipes.Template()
-t.append('djpeg', '--')
-t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
-t.append('fromppm $IN $OUT', 'ff')
-table['jpeg'] = t
-
-uncompress = pipes.Template()
-uncompress.append('uncompress', '--')
-
-
-error = 'torgb.error' # Exception
-
-def torgb(filename):
-	temps = []
-	ret = None
-	try:
-		ret = _torgb(filename, temps)
-	finally:
-		for temp in temps[:]:
-			if temp <> ret:
-				try:
-					os.unlink(temp)
-				except os.error:
-					pass
-				temps.remove(temp)
-	return ret
-
-def _torgb(filename, temps):
-	if filename[-2:] == '.Z':
-		fname = tempfile.mktemp()
-		temps.append(fname)
-		sts = uncompress.copy(filename, fname)
-		if sts:
-			raise error, filename + ': uncompress failed'
-	else:
-		fname = filename
-	try:
-		ftype = imghdr.what(fname)
-	except IOError, msg:
-		if type(msg) == type(()) and len(msg) == 2 and \
-			type(msg[0]) == type(0) and type(msg[1]) == type(''):
-			msg = msg[1]
-		if type(msg) <> type(''):
-			msg = `msg`
-		raise error, filename + ': ' + msg
-	if ftype == 'rgb':
-		return fname
-	if ftype == None or not table.has_key(ftype):
-		raise error, \
-			filename + ': unsupported image file type ' + `ftype`
-	temp = tempfile.mktemp()
-	sts = table[ftype].copy(fname, temp)
-	if sts:
-		raise error, filename + ': conversion to rgb failed'
-	return temp
diff --git a/Lib/irix6/AL.py b/Lib/irix6/AL.py
deleted file mode 100644
index ed17cde..0000000
--- a/Lib/irix6/AL.py
+++ /dev/null
@@ -1,61 +0,0 @@
-RATE_48000 	= 48000
-RATE_44100	= 44100
-RATE_32000	= 32000
-RATE_22050	= 22050
-RATE_16000	= 16000
-RATE_11025	= 11025
-RATE_8000	= 8000
-
-SAMPFMT_TWOSCOMP= 1
-SAMPFMT_FLOAT	= 32
-SAMPFMT_DOUBLE	= 64
-
-SAMPLE_8	= 1
-SAMPLE_16	= 2
-	# SAMPLE_24 is the low 24 bits of a long, sign extended to 32 bits
-SAMPLE_24	= 4
-
-MONO		= 1
-STEREO		= 2
-QUADRO		= 4			# 4CHANNEL is not a legal Python name
-
-INPUT_LINE	= 0
-INPUT_MIC	= 1
-INPUT_DIGITAL	= 2
-
-MONITOR_OFF	= 0
-MONITOR_ON	= 1
-
-ERROR_NUMBER		= 0
-ERROR_TYPE		= 1
-ERROR_LOCATION_LSP 	= 2
-ERROR_LOCATION_MSP	= 3
-ERROR_LENGTH		= 4
-
-ERROR_INPUT_UNDERFLOW	= 0
-ERROR_OUTPUT_OVERFLOW	= 1
-
-# These seem to be not supported anymore:
-##HOLD, RELEASE			= 0, 1
-##ATTAIL, ATHEAD, ATMARK, ATTIME	= 0, 1, 2, 3
-
-DEFAULT_DEVICE	= 1
-
-INPUT_SOURCE		= 0
-LEFT_INPUT_ATTEN	= 1
-RIGHT_INPUT_ATTEN	= 2
-INPUT_RATE		= 3
-OUTPUT_RATE		= 4
-LEFT_SPEAKER_GAIN	= 5
-RIGHT_SPEAKER_GAIN	= 6
-INPUT_COUNT		= 7
-OUTPUT_COUNT		= 8
-UNUSED_COUNT		= 9
-SYNC_INPUT_TO_AES	= 10
-SYNC_OUTPUT_TO_AES	= 11
-MONITOR_CTL		= 12
-LEFT_MONITOR_ATTEN	= 13
-RIGHT_MONITOR_ATTEN	= 14
-
-ENUM_VALUE	= 0	# only certain values are valid
-RANGE_VALUE	= 1	# any value in range is valid
diff --git a/Lib/irix6/AWARE.py b/Lib/irix6/AWARE.py
deleted file mode 100644
index 30be50b..0000000
--- a/Lib/irix6/AWARE.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# 
-# Copyright (c) 1992 Aware, Inc. All rights reserved.
-# 
-# Copyright Unpublished, Aware Inc.  All Rights Reserved.
-# This software contains proprietary and confidential
-# information of Aware, Inc.  Use, disclosure or
-# reproduction is prohibited without the prior express
-# written consent of Aware, Inc.
-# 
-#
-
-#
-# awareAudio.h - Aware Compression Library Parameter Header
-#
-#   01/21/92	Original Version by Brian Knittel and Jonathon Devine
-#
-
-import CL
-
-# Aware Audio Specific Parameters - For both MPEG Audio and Multirate
-CL.CHANNEL_POLICY = CL.NUMBER_OF_PARAMS + 0
-CL.NOISE_MARGIN = CL.NUMBER_OF_PARAMS + 1
-CL.BITRATE_POLICY = CL.NUMBER_OF_PARAMS + 2
-
-# Additional parameters for MPEG Audio
-CL.BITRATE_TARGET = CL.NUMBER_OF_PARAMS + 3
-CL.LAYER = CL.NUMBER_OF_PARAMS + 4
-
-# read/write for compression configuration
-# read for state during compression/decompression 
-
-#
-# Channel Policy
-#
-AWCMP_STEREO = 1
-AWCMP_JOINT_STEREO = 2
-AWCMP_INDEPENDENT = 3
-
-# 
-# read/write for compression configuration,
-# read for state during compression
-#
-#
-# Bit-rate Policy
-#
-AWCMP_FIXED_RATE = 1
-AWCMP_CONST_QUAL = 2
-AWCMP_LOSSLESS = 4
-
-#
-# Layer values
-#
-AWCMP_MPEG_LAYER_I = 1
-AWCMP_MPEG_LAYER_II = 2
diff --git a/Lib/irix6/CD.py b/Lib/irix6/CD.py
deleted file mode 100644
index ad56561..0000000
--- a/Lib/irix6/CD.py
+++ /dev/null
@@ -1,34 +0,0 @@
-ERROR		= 0
-NODISC		= 1
-READY		= 2
-PLAYING		= 3
-PAUSED		= 4
-STILL		= 5
-
-AUDIO		= 0
-PNUM		= 1
-INDEX		= 2
-PTIME		= 3
-ATIME		= 4
-CATALOG		= 5
-IDENT		= 6
-CONTROL		= 7
-
-CDDA_DATASIZE	= 2352
-
-##CDDA_SUBCODESIZE	= (sizeof(struct subcodeQ))
-##CDDA_BLOCKSIZE	= (sizeof(struct cdframe))
-##CDDA_NUMSAMPLES	= (CDDA_DATASIZE/2)
-##
-##CDQ_PREEMP_MASK	= 0xd
-##CDQ_COPY_MASK	= 0xb
-##CDQ_DDATA_MASK	= 0xd
-##CDQ_BROADCAST_MASK	= 0x8
-##CDQ_PREEMPHASIS	= 0x1
-##CDQ_COPY_PERMITTED	= 0x2		
-##CDQ_DIGITAL_DATA	= 0x4
-##CDQ_BROADCAST_USE	= 0x8
-##
-##CDQ_MODE1	= 0x1
-##CDQ_MODE2	= 0x2
-##CDQ_MODE3	= 0x3
diff --git a/Lib/irix6/CL.py b/Lib/irix6/CL.py
deleted file mode 100644
index 468ecaa..0000000
--- a/Lib/irix6/CL.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Backward compatible module CL.
-# All relevant symbols are now defined in the module cl.
-try:
-	from cl import *
-except ImportError:
-	from CL_old import *
-else:
-	del CompressImage
-	del DecompressImage
-	del GetAlgorithmName
-	del OpenCompressor
-	del OpenDecompressor
-	del QueryAlgorithms
-	del QueryMaxHeaderSize
-	del QueryScheme
-	del QuerySchemeFromName
-	del SetDefault
-	del SetMax
-	del SetMin
-	try:
-		del cvt_type
-	except NameError:
-		pass
-	del error
diff --git a/Lib/irix6/DEVICE.py b/Lib/irix6/DEVICE.py
deleted file mode 100644
index 7ace8cb..0000000
--- a/Lib/irix6/DEVICE.py
+++ /dev/null
@@ -1,400 +0,0 @@
-NULLDEV = 0
-BUTOFFSET = 1
-VALOFFSET = 256
-PSEUDOFFSET = 512
-BUT2OFFSET = 3840
-TIMOFFSET = 515
-XKBDOFFSET = 143
-BUTCOUNT = 255
-VALCOUNT = 256
-TIMCOUNT = 4
-XKBDCOUNT = 28
-USERBUTOFFSET = 4096
-USERVALOFFSET = 12288
-USERPSEUDOFFSET = 16384
-BUT0 = 1
-BUT1 = 2
-BUT2 = 3
-BUT3 = 4
-BUT4 = 5
-BUT5 = 6
-BUT6 = 7
-BUT7 = 8
-BUT8 = 9
-BUT9 = 10
-BUT10 = 11
-BUT11 = 12
-BUT12 = 13
-BUT13 = 14
-BUT14 = 15
-BUT15 = 16
-BUT16 = 17
-BUT17 = 18
-BUT18 = 19
-BUT19 = 20
-BUT20 = 21
-BUT21 = 22
-BUT22 = 23
-BUT23 = 24
-BUT24 = 25
-BUT25 = 26
-BUT26 = 27
-BUT27 = 28
-BUT28 = 29
-BUT29 = 30
-BUT30 = 31
-BUT31 = 32
-BUT32 = 33
-BUT33 = 34
-BUT34 = 35
-BUT35 = 36
-BUT36 = 37
-BUT37 = 38
-BUT38 = 39
-BUT39 = 40
-BUT40 = 41
-BUT41 = 42
-BUT42 = 43
-BUT43 = 44
-BUT44 = 45
-BUT45 = 46
-BUT46 = 47
-BUT47 = 48
-BUT48 = 49
-BUT49 = 50
-BUT50 = 51
-BUT51 = 52
-BUT52 = 53
-BUT53 = 54
-BUT54 = 55
-BUT55 = 56
-BUT56 = 57
-BUT57 = 58
-BUT58 = 59
-BUT59 = 60
-BUT60 = 61
-BUT61 = 62
-BUT62 = 63
-BUT63 = 64
-BUT64 = 65
-BUT65 = 66
-BUT66 = 67
-BUT67 = 68
-BUT68 = 69
-BUT69 = 70
-BUT70 = 71
-BUT71 = 72
-BUT72 = 73
-BUT73 = 74
-BUT74 = 75
-BUT75 = 76
-BUT76 = 77
-BUT77 = 78
-BUT78 = 79
-BUT79 = 80
-BUT80 = 81
-BUT81 = 82
-BUT82 = 83
-MAXKBDBUT = 83
-BUT100 = 101
-BUT101 = 102
-BUT102 = 103
-BUT103 = 104
-BUT104 = 105
-BUT105 = 106
-BUT106 = 107
-BUT107 = 108
-BUT108 = 109
-BUT109 = 110
-BUT110 = 111
-BUT111 = 112
-BUT112 = 113
-BUT113 = 114
-BUT114 = 115
-BUT115 = 116
-BUT116 = 117
-BUT117 = 118
-BUT118 = 119
-BUT119 = 120
-BUT120 = 121
-BUT121 = 122
-BUT122 = 123
-BUT123 = 124
-BUT124 = 125
-BUT125 = 126
-BUT126 = 127
-BUT127 = 128
-BUT128 = 129
-BUT129 = 130
-BUT130 = 131
-BUT131 = 132
-BUT132 = 133
-BUT133 = 134
-BUT134 = 135
-BUT135 = 136
-BUT136 = 137
-BUT137 = 138
-BUT138 = 139
-BUT139 = 140
-BUT140 = 141
-BUT141 = 142
-BUT142 = 143
-BUT143 = 144
-BUT144 = 145
-BUT145 = 146
-BUT146 = 147
-BUT147 = 148
-BUT148 = 149
-BUT149 = 150
-BUT150 = 151
-BUT151 = 152
-BUT152 = 153
-BUT153 = 154
-BUT154 = 155
-BUT155 = 156
-BUT156 = 157
-BUT157 = 158
-BUT158 = 159
-BUT159 = 160
-BUT160 = 161
-BUT161 = 162
-BUT162 = 163
-BUT163 = 164
-BUT164 = 165
-BUT165 = 166
-BUT166 = 167
-BUT167 = 168
-BUT168 = 169
-BUT181 = 182
-BUT182 = 183
-BUT183 = 184
-BUT184 = 185
-BUT185 = 186
-BUT186 = 187
-BUT187 = 188
-BUT188 = 189
-BUT189 = 190
-MOUSE1 = 101
-MOUSE2 = 102
-MOUSE3 = 103
-LEFTMOUSE = 103
-MIDDLEMOUSE = 102
-RIGHTMOUSE = 101
-LPENBUT = 104
-BPAD0 = 105
-BPAD1 = 106
-BPAD2 = 107
-BPAD3 = 108
-LPENVALID = 109
-SWBASE = 111
-SW0 = 111
-SW1 = 112
-SW2 = 113
-SW3 = 114
-SW4 = 115
-SW5 = 116
-SW6 = 117
-SW7 = 118
-SW8 = 119
-SW9 = 120
-SW10 = 121
-SW11 = 122
-SW12 = 123
-SW13 = 124
-SW14 = 125
-SW15 = 126
-SW16 = 127
-SW17 = 128
-SW18 = 129
-SW19 = 130
-SW20 = 131
-SW21 = 132
-SW22 = 133
-SW23 = 134
-SW24 = 135
-SW25 = 136
-SW26 = 137
-SW27 = 138
-SW28 = 139
-SW29 = 140
-SW30 = 141
-SW31 = 142
-SBBASE = 182
-SBPICK = 182
-SBBUT1 = 183
-SBBUT2 = 184
-SBBUT3 = 185
-SBBUT4 = 186
-SBBUT5 = 187
-SBBUT6 = 188
-SBBUT7 = 189
-SBBUT8 = 190
-AKEY = 11
-BKEY = 36
-CKEY = 28
-DKEY = 18
-EKEY = 17
-FKEY = 19
-GKEY = 26
-HKEY = 27
-IKEY = 40
-JKEY = 34
-KKEY = 35
-LKEY = 42
-MKEY = 44
-NKEY = 37
-OKEY = 41
-PKEY = 48
-QKEY = 10
-RKEY = 24
-SKEY = 12
-TKEY = 25
-UKEY = 33
-VKEY = 29
-WKEY = 16
-XKEY = 21
-YKEY = 32
-ZKEY = 20
-ZEROKEY = 46
-ONEKEY = 8
-TWOKEY = 14
-THREEKEY = 15
-FOURKEY = 22
-FIVEKEY = 23
-SIXKEY = 30
-SEVENKEY = 31
-EIGHTKEY = 38
-NINEKEY = 39
-BREAKKEY = 1
-SETUPKEY = 2
-CTRLKEY = 3
-LEFTCTRLKEY = CTRLKEY
-CAPSLOCKKEY = 4
-RIGHTSHIFTKEY = 5
-LEFTSHIFTKEY = 6
-NOSCRLKEY = 13
-ESCKEY = 7
-TABKEY = 9
-RETKEY = 51
-SPACEKEY = 83
-LINEFEEDKEY = 60
-BACKSPACEKEY = 61
-DELKEY = 62
-SEMICOLONKEY = 43
-PERIODKEY = 52
-COMMAKEY = 45
-QUOTEKEY = 50
-ACCENTGRAVEKEY = 55
-MINUSKEY = 47
-VIRGULEKEY = 53
-BACKSLASHKEY = 57
-EQUALKEY = 54
-LEFTBRACKETKEY = 49
-RIGHTBRACKETKEY = 56
-LEFTARROWKEY = 73
-DOWNARROWKEY = 74
-RIGHTARROWKEY = 80
-UPARROWKEY = 81
-PAD0 = 59
-PAD1 = 58
-PAD2 = 64
-PAD3 = 65
-PAD4 = 63
-PAD5 = 69
-PAD6 = 70
-PAD7 = 67
-PAD8 = 68
-PAD9 = 75
-PADPF1 = 72
-PADPF2 = 71
-PADPF3 = 79
-PADPF4 = 78
-PADPERIOD = 66
-PADMINUS = 76
-PADCOMMA = 77
-PADENTER = 82
-LEFTALTKEY = 143
-RIGHTALTKEY = 144
-RIGHTCTRLKEY = 145
-F1KEY = 146
-F2KEY = 147
-F3KEY = 148
-F4KEY = 149
-F5KEY = 150
-F6KEY = 151
-F7KEY = 152
-F8KEY = 153
-F9KEY = 154
-F10KEY = 155
-F11KEY = 156
-F12KEY = 157
-PRINTSCREENKEY = 158
-SCROLLLOCKKEY = 159
-PAUSEKEY = 160
-INSERTKEY = 161
-HOMEKEY = 162
-PAGEUPKEY = 163
-ENDKEY = 164
-PAGEDOWNKEY = 165
-NUMLOCKKEY = 166
-PADVIRGULEKEY = 167
-PADASTERKEY = 168
-PADPLUSKEY = 169
-SGIRESERVED = 256
-DIAL0 = 257
-DIAL1 = 258
-DIAL2 = 259
-DIAL3 = 260
-DIAL4 = 261
-DIAL5 = 262
-DIAL6 = 263
-DIAL7 = 264
-DIAL8 = 265
-MOUSEX = 266
-MOUSEY = 267
-LPENX = 268
-LPENY = 269
-BPADX = 270
-BPADY = 271
-CURSORX = 272
-CURSORY = 273
-GHOSTX = 274
-GHOSTY = 275
-SBTX = 276
-SBTY = 277
-SBTZ = 278
-SBRX = 279
-SBRY = 280
-SBRZ = 281
-SBPERIOD = 282
-TIMER0 = 515
-TIMER1 = 516
-TIMER2 = 517
-TIMER3 = 518
-KEYBD = 513
-RAWKEYBD = 514
-VALMARK = 523
-REDRAW = 528
-INPUTCHANGE = 534
-QFULL = 535
-QREADERROR = 538
-WINFREEZE = 539
-WINTHAW = 540
-REDRAWICONIC = 541
-WINQUIT = 542
-DEPTHCHANGE = 543
-WINSHUT = 546
-DRAWOVERLAY = 547
-VIDEO = 548
-MENUBUTTON = RIGHTMOUSE
-WINCLOSE = 537
-KEYBDFNAMES = 544
-KEYBDFSTRINGS = 545
-MAXSGIDEVICE = 20000
-GERROR = 524
-WMSEND = 529
-WMREPLY = 530
-WMGFCLOSE = 531
-WMTXCLOSE = 532
-MODECHANGE = 533
-PIECECHANGE = 536
diff --git a/Lib/irix6/ERRNO.py b/Lib/irix6/ERRNO.py
deleted file mode 100644
index d975ce6..0000000
--- a/Lib/irix6/ERRNO.py
+++ /dev/null
@@ -1,163 +0,0 @@
-# Generated by h2py from /usr/include/sys/errno.h
-
-# Included from standards.h
-__KBASE = 1000
-__IRIXBASE = 1000
-EPERM = 1
-ENOENT = 2
-ESRCH = 3
-EINTR = 4
-EIO = 5
-ENXIO = 6
-E2BIG = 7
-ENOEXEC = 8
-EBADF = 9
-ECHILD = 10
-EAGAIN = 11
-ENOMEM = 12
-EACCES = 13
-EFAULT = 14
-ENOTBLK = 15
-EBUSY = 16
-EEXIST = 17
-EXDEV = 18
-ENODEV = 19
-ENOTDIR = 20
-EISDIR = 21
-EINVAL = 22
-ENFILE = 23
-EMFILE = 24
-ENOTTY = 25
-ETXTBSY = 26
-EFBIG = 27
-ENOSPC = 28
-ESPIPE = 29
-EROFS = 30
-EMLINK = 31
-EPIPE = 32
-EDOM = 33
-ERANGE = 34
-ENOMSG = 35
-EIDRM = 36
-ECHRNG = 37
-EL2NSYNC = 38
-EL3HLT = 39
-EL3RST = 40
-ELNRNG = 41
-EUNATCH = 42
-ENOCSI = 43
-EL2HLT = 44
-EDEADLK = 45
-ENOLCK = 46
-EBADE = 50
-EBADR = 51
-EXFULL = 52
-ENOANO = 53
-EBADRQC = 54
-EBADSLT = 55
-EDEADLOCK = 56
-EBFONT = 57
-ENOSTR = 60
-ENODATA = 61
-ETIME = 62
-ENOSR = 63
-ENONET = 64
-ENOPKG = 65
-EREMOTE = 66
-ENOLINK = 67
-EADV = 68
-ESRMNT = 69
-ECOMM = 70
-EPROTO = 71
-EMULTIHOP = 74
-EBADMSG = 77
-ENAMETOOLONG = 78
-EOVERFLOW = 79
-ENOTUNIQ = 80
-EBADFD = 81
-EREMCHG = 82
-ELIBACC = 83
-ELIBBAD = 84
-ELIBSCN = 85
-ELIBMAX = 86
-ELIBEXEC = 87
-EILSEQ = 88
-ENOSYS = 89
-ELOOP = 90
-ERESTART = 91
-ESTRPIPE = 92
-ENOTEMPTY = 93
-EUSERS = 94
-ENOTSOCK = 95
-EDESTADDRREQ = 96
-EMSGSIZE = 97
-EPROTOTYPE = 98
-ENOPROTOOPT = 99
-EPROTONOSUPPORT = 120
-ESOCKTNOSUPPORT = 121
-EOPNOTSUPP = 122
-EPFNOSUPPORT = 123
-EAFNOSUPPORT = 124
-EADDRINUSE = 125
-EADDRNOTAVAIL = 126
-ENETDOWN = 127
-ENETUNREACH = 128
-ENETRESET = 129
-ECONNABORTED = 130
-ECONNRESET = 131
-ENOBUFS = 132
-EISCONN = 133
-ENOTCONN = 134
-ESHUTDOWN = 143
-ETOOMANYREFS = 144
-ETIMEDOUT = 145
-ECONNREFUSED = 146
-EHOSTDOWN = 147
-EHOSTUNREACH = 148
-LASTERRNO = ENOTCONN
-EWOULDBLOCK = __KBASE+101
-EWOULDBLOCK = EAGAIN
-EALREADY = 149
-EINPROGRESS = 150
-ESTALE = 151
-EIORESID = 500
-EUCLEAN = 135
-ENOTNAM = 137
-ENAVAIL = 138
-EISNAM = 139
-EREMOTEIO = 140
-EINIT = 141
-EREMDEV = 142
-ECANCELED = 158
-ENOLIMFILE = 1001
-EPROCLIM = 1002
-EDISJOINT = 1003
-ENOLOGIN = 1004
-ELOGINLIM = 1005
-EGROUPLOOP = 1006
-ENOATTACH = 1007
-ENOTSUP = 1008
-ENOATTR = 1009
-EDIRCORRUPTED = 1010
-EDQUOT = 1133
-ENFSREMOTE = 1135
-ECONTROLLER = 1300
-ENOTCONTROLLER = 1301
-EENQUEUED = 1302
-ENOTENQUEUED = 1303
-EJOINED = 1304
-ENOTJOINED = 1305
-ENOPROC = 1306
-EMUSTRUN = 1307
-ENOTSTOPPED = 1308
-ECLOCKCPU = 1309
-EINVALSTATE = 1310
-ENOEXIST = 1311
-EENDOFMINOR = 1312
-EBUFSIZE = 1313
-EEMPTY = 1314
-ENOINTRGROUP = 1315
-EINVALMODE = 1316
-ECANTEXTENT = 1317
-EINVALTIME = 1318
-EDESTROYED = 1319
diff --git a/Lib/irix6/FCNTL.py b/Lib/irix6/FCNTL.py
deleted file mode 100644
index ceb1071..0000000
--- a/Lib/irix6/FCNTL.py
+++ /dev/null
@@ -1,114 +0,0 @@
-# Generated by h2py from /usr/include/sys/fcntl.h
-
-# Included from standards.h
-
-# Included from sys/types.h
-
-# Included from sgidefs.h
-_MIPS_ISA_MIPS1 = 1
-_MIPS_ISA_MIPS2 = 2
-_MIPS_ISA_MIPS3 = 3
-_MIPS_ISA_MIPS4 = 4
-_MIPS_SIM_ABI32 = 1
-_MIPS_SIM_NABI32 = 2
-_MIPS_SIM_ABI64 = 3
-P_MYID = (-1)
-P_MYHOSTID = (-1)
-
-# Included from sys/bsd_types.h
-
-# Included from sys/mkdev.h
-ONBITSMAJOR = 7
-ONBITSMINOR = 8
-OMAXMAJ = 0x7f
-OMAXMIN = 0xff
-NBITSMAJOR = 14
-NBITSMINOR = 18
-MAXMAJ = 0x1ff
-MAXMIN = 0x3ffff
-OLDDEV = 0
-NEWDEV = 1
-MKDEV_VER = NEWDEV
-def major(dev): return __major(MKDEV_VER, dev)
-
-def minor(dev): return __minor(MKDEV_VER, dev)
-
-
-# Included from sys/select.h
-FD_SETSIZE = 1024
-__NBBY = 8
-
-# Included from string.h
-NULL = 0L
-NBBY = 8
-FNDELAY = 0x04
-FAPPEND = 0x08
-FSYNC = 0x10
-FDSYNC = 0x20
-FRSYNC = 0x40
-FNONBLOCK = 0x80
-FASYNC = 0x1000
-FLARGEFILE = 0x2000
-FNONBLK = FNONBLOCK
-FDIRECT = 0x8000
-FDIRENT64 = 0x8000
-FCREAT = 0x0100
-FTRUNC = 0x0200
-FEXCL = 0x0400
-FNOCTTY = 0x0800
-O_RDONLY = 0
-O_WRONLY = 1
-O_RDWR = 2
-O_NDELAY = 0x04
-O_APPEND = 0x08
-O_SYNC = 0x10
-O_DSYNC = 0x20
-O_RSYNC = 0x40
-O_NONBLOCK = 0x80
-O_LARGEFILE = 0x2000
-O_DIRECT = 0x8000
-O_CREAT = 0x100
-O_TRUNC = 0x200
-O_EXCL = 0x400
-O_NOCTTY = 0x800
-F_DUPFD = 0
-F_GETFD = 1
-F_SETFD = 2
-F_GETFL = 3
-F_SETFL = 4
-F_GETLK = 14
-F_SETLK = 6
-F_SETLKW = 7
-F_CHKFL = 8
-F_ALLOCSP = 10
-F_FREESP = 11
-F_SETBSDLK = 12
-F_SETBSDLKW = 13
-F_DIOINFO = 30
-F_FSGETXATTR = 31
-F_FSSETXATTR = 32
-F_GETLK64 = 33
-F_SETLK64 = 34
-F_SETLKW64 = 35
-F_ALLOCSP64 = 36
-F_FREESP64 = 37
-F_GETBMAP = 38
-F_FSSETDM = 39
-F_RESVSP = 40
-F_UNRESVSP = 41
-F_RESVSP64 = 42
-F_UNRESVSP64 = 43
-F_GETBMAPA = 44
-F_FSGETXATTRA = 45
-F_GETALLLK = 46
-F_RSETLK = 20
-F_RGETLK = 21
-F_RSETLKW = 22
-F_GETOWN = 23
-F_SETOWN = 24
-F_RDLCK = 01
-F_WRLCK = 02
-F_UNLCK = 03
-O_ACCMODE = 3
-FD_CLOEXEC = 1
-FD_NODUP_FORK = 4
diff --git a/Lib/irix6/FILE.py b/Lib/irix6/FILE.py
deleted file mode 100644
index e3393b6..0000000
--- a/Lib/irix6/FILE.py
+++ /dev/null
@@ -1,236 +0,0 @@
-# Generated by h2py from /usr/include/sys/file.h
-
-# Included from standards.h
-
-# Included from sys/types.h
-
-# Included from sgidefs.h
-_MIPS_ISA_MIPS1 = 1
-_MIPS_ISA_MIPS2 = 2
-_MIPS_ISA_MIPS3 = 3
-_MIPS_ISA_MIPS4 = 4
-_MIPS_SIM_ABI32 = 1
-_MIPS_SIM_NABI32 = 2
-_MIPS_SIM_ABI64 = 3
-P_MYID = (-1)
-P_MYHOSTID = (-1)
-
-# Included from sys/bsd_types.h
-
-# Included from sys/mkdev.h
-ONBITSMAJOR = 7
-ONBITSMINOR = 8
-OMAXMAJ = 0x7f
-OMAXMIN = 0xff
-NBITSMAJOR = 14
-NBITSMINOR = 18
-MAXMAJ = 0x1ff
-MAXMIN = 0x3ffff
-OLDDEV = 0
-NEWDEV = 1
-MKDEV_VER = NEWDEV
-def major(dev): return __major(MKDEV_VER, dev)
-
-def minor(dev): return __minor(MKDEV_VER, dev)
-
-
-# Included from sys/select.h
-FD_SETSIZE = 1024
-__NBBY = 8
-
-# Included from string.h
-NULL = 0L
-NBBY = 8
-
-# Included from sys/sema.h
-MUTEX_DEFAULT = 0x0
-METER_NAMSZ = 8
-def mutex_spinlock(l): return splhi()
-
-def mutex_spintrylock(l): return splhi()
-
-def spinlock_islocked(l): return issplhi(getsr())
-
-def spinlock_initialized(l): return 1
-
-SV_FIFO = 0x0
-SV_LIFO = 0x2
-SV_PRIO = 0x4
-SV_DEFAULT = SV_FIFO
-SEMA_NOHIST = 0x0001
-SEMA_LOCK = 0x0004
-SEMA_METER = 0x0008
-SEMA_NAMSZ = METER_NAMSZ
-MR_ACCESS = 0x1
-MR_UPDATE = 0x2
-def mp_mutex_unlock(m): return mutex_unlock(m)
-
-def mp_mutex_trylock(m): return mutex_trylock(m)
-
-def mp_mutex_spinlock(m): return mutex_spinlock(m)
-
-def mp_mutex_trylock(m): return 1
-
-def mp_mutex_spinlock(m): return 1
-
-def nested_spintrylock(m): return 1
-
-def mp_mrunlock(a): return mrunlock(a)
-
-def mp_cpsema(x): return cpsema(x)
-
-def mp_cvsema(x): return cvsema(x)
-
-def mp_cpsema(x): return 1
-
-def mp_cvsema(x): return 0
-
-MON_LOCKED = 0x01
-MON_WAITING = 0x02
-MON_TIMEOUT = 0x04
-def initlock(l): return spinlock_init(l,0)
-
-def ownlock(x): return 1
-
-def splock(x): return 1
-
-def io_splock(x): return 1
-
-def mutex_enter(m): return mutex_lock(m, PZERO)
-
-def mutex_tryenter(m): return mutex_trylock(m)
-
-def mutex_exit(m): return mutex_unlock(m)
-
-def cv_signal(cv): return sv_signal(cv)
-
-def cv_broadcast(cv): return sv_broadcast(cv)
-
-def cv_destroy(cv): return sv_destroy(cv)
-
-RW_READER = MR_ACCESS
-RW_WRITER = MR_UPDATE
-def rw_exit(r): return mrunlock(r)
-
-def rw_tryupgrade(r): return cmrpromote(r)
-
-def rw_downgrade(r): return mrdemote(r)
-
-def rw_destroy(r): return mrfree(r)
-
-def RW_WRITE_HELD(r): return ismrlocked(r, MR_UPDATE)
-
-def RW_READ_HELD(r): return ismrlocked(r, MR_ACCESS)
-
-
-# Included from sys/fcntl.h
-FNDELAY = 0x04
-FAPPEND = 0x08
-FSYNC = 0x10
-FDSYNC = 0x20
-FRSYNC = 0x40
-FNONBLOCK = 0x80
-FASYNC = 0x1000
-FLARGEFILE = 0x2000
-FNONBLK = FNONBLOCK
-FDIRECT = 0x8000
-FDIRENT64 = 0x8000
-FCREAT = 0x0100
-FTRUNC = 0x0200
-FEXCL = 0x0400
-FNOCTTY = 0x0800
-O_RDONLY = 0
-O_WRONLY = 1
-O_RDWR = 2
-O_NDELAY = 0x04
-O_APPEND = 0x08
-O_SYNC = 0x10
-O_DSYNC = 0x20
-O_RSYNC = 0x40
-O_NONBLOCK = 0x80
-O_LARGEFILE = 0x2000
-O_DIRECT = 0x8000
-O_CREAT = 0x100
-O_TRUNC = 0x200
-O_EXCL = 0x400
-O_NOCTTY = 0x800
-F_DUPFD = 0
-F_GETFD = 1
-F_SETFD = 2
-F_GETFL = 3
-F_SETFL = 4
-F_GETLK = 14
-F_SETLK = 6
-F_SETLKW = 7
-F_CHKFL = 8
-F_ALLOCSP = 10
-F_FREESP = 11
-F_SETBSDLK = 12
-F_SETBSDLKW = 13
-F_DIOINFO = 30
-F_FSGETXATTR = 31
-F_FSSETXATTR = 32
-F_GETLK64 = 33
-F_SETLK64 = 34
-F_SETLKW64 = 35
-F_ALLOCSP64 = 36
-F_FREESP64 = 37
-F_GETBMAP = 38
-F_FSSETDM = 39
-F_RESVSP = 40
-F_UNRESVSP = 41
-F_RESVSP64 = 42
-F_UNRESVSP64 = 43
-F_GETBMAPA = 44
-F_FSGETXATTRA = 45
-F_GETALLLK = 46
-F_RSETLK = 20
-F_RGETLK = 21
-F_RSETLKW = 22
-F_GETOWN = 23
-F_SETOWN = 24
-F_RDLCK = 01
-F_WRLCK = 02
-F_UNLCK = 03
-O_ACCMODE = 3
-FD_CLOEXEC = 1
-FD_NODUP_FORK = 4
-FMASK = 0x90FF
-FOPEN = 0xFFFFFFFF
-FREAD = 0x01
-FWRITE = 0x02
-FNDELAY = 0x04
-FAPPEND = 0x08
-FSYNC = 0x10
-FDSYNC = 0x20
-FRSYNC = 0x40
-FNONBLOCK = 0x80
-FASYNC = 0x1000
-FNONBLK = FNONBLOCK
-FLARGEFILE = 0x2000
-FDIRECT = 0x8000
-FCREAT = 0x0100
-FTRUNC = 0x0200
-FEXCL = 0x0400
-FNOCTTY = 0x0800
-FMARK = 0x4000
-FDEFER = 0x2000
-FINPROGRESS = 0x0400
-FINVIS = 0x0100
-FNMFS = 0x2000
-FDIRENT64 = 0x8000
-FCLOSEXEC = 001
-FDSHD = 0x0001
-FDNOMARK = 0x0002
-FDIGNPROGRESS = 0x0004
-LOCK_SH = 1
-LOCK_EX = 2
-LOCK_NB = 4
-LOCK_UN = 8
-F_OK = 0
-X_OK = 1
-W_OK = 2
-R_OK = 4
-L_SET = 0
-L_INCR = 1
-L_XTND = 2
diff --git a/Lib/irix6/FL.py b/Lib/irix6/FL.py
deleted file mode 100644
index f85237b..0000000
--- a/Lib/irix6/FL.py
+++ /dev/null
@@ -1,289 +0,0 @@
-# Constants used by the FORMS library (module fl).
-# This corresponds to "forms.h".
-# Recommended use: import FL; ... FL.NORMAL_BOX ... etc.
-# Alternate use: from FL import *; ... NORMAL_BOX ... etc.
-
-_v20 = 1
-_v21 = 1
-##import fl
-##try:
-##	_v20 = (fl.get_rgbmode <> None)
-##except:
-##	_v20 = 0
-##del fl
-
-NULL = 0
-FALSE = 0
-TRUE = 1
-
-EVENT = -1
-
-LABEL_SIZE = 64
-if _v20:
-	SHORTCUT_SIZE = 32
-PLACE_FREE = 0
-PLACE_SIZE = 1
-PLACE_ASPECT = 2
-PLACE_MOUSE = 3
-PLACE_CENTER = 4
-PLACE_POSITION = 5
-FL_PLACE_FULLSCREEN = 6
-FIND_INPUT = 0
-FIND_AUTOMATIC = 1
-FIND_MOUSE = 2
-BEGIN_GROUP = 10000
-END_GROUP = 20000
-ALIGN_TOP = 0
-ALIGN_BOTTOM = 1
-ALIGN_LEFT = 2
-ALIGN_RIGHT = 3
-ALIGN_CENTER = 4
-NO_BOX = 0
-UP_BOX = 1
-DOWN_BOX = 2
-FLAT_BOX = 3
-BORDER_BOX = 4
-SHADOW_BOX = 5
-FRAME_BOX = 6
-ROUNDED_BOX = 7
-RFLAT_BOX = 8
-RSHADOW_BOX = 9
-TOP_BOUND_COL = 51
-LEFT_BOUND_COL = 55
-BOT_BOUND_COL = 40
-RIGHT_BOUND_COL = 35
-COL1 = 47
-MCOL = 49
-LCOL = 0
-BOUND_WIDTH = 3.0
-DRAW = 0
-PUSH = 1
-RELEASE = 2
-ENTER = 3
-LEAVE = 4
-MOUSE = 5
-FOCUS = 6
-UNFOCUS = 7
-KEYBOARD = 8
-STEP = 9
-MOVE = 10
-FONT_NAME = 'Helvetica'
-FONT_BOLDNAME = 'Helvetica-Bold'
-FONT_ITALICNAME = 'Helvetica-Oblique'
-FONT_FIXEDNAME = 'Courier'
-FONT_ICONNAME = 'Icon'
-SMALL_FONT = 8.0
-NORMAL_FONT = 11.0
-LARGE_FONT = 20.0
-NORMAL_STYLE = 0
-BOLD_STYLE = 1
-ITALIC_STYLE = 2
-FIXED_STYLE = 3
-ENGRAVED_STYLE = 4
-ICON_STYLE = 5
-BITMAP = 3
-NORMAL_BITMAP = 0
-BITMAP_BOXTYPE = NO_BOX
-BITMAP_COL1 = 0
-BITMAP_COL2 = COL1
-BITMAP_LCOL = LCOL
-BITMAP_ALIGN = ALIGN_BOTTOM
-BITMAP_MAXSIZE = 128*128
-BITMAP_BW = BOUND_WIDTH
-BOX = 1
-BOX_BOXTYPE = UP_BOX
-BOX_COL1 = COL1
-BOX_LCOL = LCOL
-BOX_ALIGN = ALIGN_CENTER
-BOX_BW = BOUND_WIDTH
-BROWSER = 71
-NORMAL_BROWSER = 0
-SELECT_BROWSER = 1
-HOLD_BROWSER = 2
-MULTI_BROWSER = 3
-BROWSER_BOXTYPE = DOWN_BOX
-BROWSER_COL1 = COL1
-BROWSER_COL2 = 3
-BROWSER_LCOL = LCOL
-BROWSER_ALIGN = ALIGN_BOTTOM
-BROWSER_SLCOL = COL1
-BROWSER_BW = BOUND_WIDTH
-BROWSER_LINELENGTH = 128
-BROWSER_MAXLINE = 512
-BUTTON = 11
-NORMAL_BUTTON = 0
-PUSH_BUTTON = 1
-RADIO_BUTTON = 2
-HIDDEN_BUTTON = 3
-TOUCH_BUTTON = 4
-INOUT_BUTTON = 5
-RETURN_BUTTON = 6
-if _v20:
-	HIDDEN_RET_BUTTON = 7
-BUTTON_BOXTYPE = UP_BOX
-BUTTON_COL1 = COL1
-BUTTON_COL2 = COL1
-BUTTON_LCOL = LCOL
-BUTTON_ALIGN = ALIGN_CENTER
-BUTTON_MCOL1 = MCOL
-BUTTON_MCOL2 = MCOL
-BUTTON_BW = BOUND_WIDTH
-if _v20:
-	CHART = 4
-	BAR_CHART = 0
-	HORBAR_CHART = 1
-	LINE_CHART = 2
-	FILLED_CHART = 3
-	SPIKE_CHART = 4
-	PIE_CHART = 5
-	SPECIALPIE_CHART = 6
-	CHART_BOXTYPE = BORDER_BOX
-	CHART_COL1 = COL1
-	CHART_LCOL = LCOL
-	CHART_ALIGN = ALIGN_BOTTOM
-	CHART_BW = BOUND_WIDTH
-	CHART_MAX = 128
-CHOICE = 42
-NORMAL_CHOICE = 0
-CHOICE_BOXTYPE = DOWN_BOX
-CHOICE_COL1 = COL1
-CHOICE_COL2 = LCOL
-CHOICE_LCOL = LCOL
-CHOICE_ALIGN = ALIGN_LEFT
-CHOICE_BW = BOUND_WIDTH
-CHOICE_MCOL = MCOL
-CHOICE_MAXITEMS = 128
-CHOICE_MAXSTR = 64
-CLOCK = 61
-SQUARE_CLOCK = 0
-ROUND_CLOCK = 1
-CLOCK_BOXTYPE = UP_BOX
-CLOCK_COL1 = 37
-CLOCK_COL2 = 42
-CLOCK_LCOL = LCOL
-CLOCK_ALIGN = ALIGN_BOTTOM
-CLOCK_TOPCOL = COL1
-CLOCK_BW = BOUND_WIDTH
-COUNTER = 25
-NORMAL_COUNTER = 0
-SIMPLE_COUNTER = 1
-COUNTER_BOXTYPE = UP_BOX
-COUNTER_COL1 = COL1
-COUNTER_COL2 = 4
-COUNTER_LCOL = LCOL
-COUNTER_ALIGN = ALIGN_BOTTOM
-if _v20:
-	COUNTER_BW = BOUND_WIDTH
-else:
-	DEFAULT = 51
-	RETURN_DEFAULT = 0
-	ALWAYS_DEFAULT = 1
-DIAL = 22
-NORMAL_DIAL = 0
-LINE_DIAL = 1
-DIAL_BOXTYPE = NO_BOX
-DIAL_COL1 = COL1
-DIAL_COL2 = 37
-DIAL_LCOL = LCOL
-DIAL_ALIGN = ALIGN_BOTTOM
-DIAL_TOPCOL = COL1
-DIAL_BW = BOUND_WIDTH
-FREE = 101
-NORMAL_FREE = 1
-SLEEPING_FREE = 2
-INPUT_FREE = 3
-CONTINUOUS_FREE = 4
-ALL_FREE = 5
-INPUT = 31
-NORMAL_INPUT = 0
-if _v20:
-	FLOAT_INPUT = 1
-	INT_INPUT = 2
-	HIDDEN_INPUT = 3
-	if _v21:
-		MULTILINE_INPUT = 4
-		SECRET_INPUT = 5
-else:
-	ALWAYS_INPUT = 1
-INPUT_BOXTYPE = DOWN_BOX
-INPUT_COL1 = 13
-INPUT_COL2 = 5
-INPUT_LCOL = LCOL
-INPUT_ALIGN = ALIGN_LEFT
-INPUT_TCOL = LCOL
-INPUT_CCOL = 4
-INPUT_BW = BOUND_WIDTH
-INPUT_MAX = 128
-LIGHTBUTTON = 12
-LIGHTBUTTON_BOXTYPE = UP_BOX
-LIGHTBUTTON_COL1 = 39
-LIGHTBUTTON_COL2 = 3
-LIGHTBUTTON_LCOL = LCOL
-LIGHTBUTTON_ALIGN = ALIGN_CENTER
-LIGHTBUTTON_TOPCOL = COL1
-LIGHTBUTTON_MCOL = MCOL
-LIGHTBUTTON_BW1 = BOUND_WIDTH
-LIGHTBUTTON_BW2 = BOUND_WIDTH/2.0
-LIGHTBUTTON_MINSIZE = 12.0
-MENU = 41
-TOUCH_MENU = 0
-PUSH_MENU = 1
-MENU_BOXTYPE = BORDER_BOX
-MENU_COL1 = 55
-MENU_COL2 = 37
-MENU_LCOL = LCOL
-MENU_ALIGN = ALIGN_CENTER
-MENU_BW = BOUND_WIDTH
-MENU_MAX = 300
-POSITIONER = 23
-NORMAL_POSITIONER = 0
-POSITIONER_BOXTYPE = DOWN_BOX
-POSITIONER_COL1 = COL1
-POSITIONER_COL2 = 1
-POSITIONER_LCOL = LCOL
-POSITIONER_ALIGN = ALIGN_BOTTOM
-POSITIONER_BW = BOUND_WIDTH
-ROUNDBUTTON = 13
-ROUNDBUTTON_BOXTYPE = NO_BOX
-ROUNDBUTTON_COL1 = 7
-ROUNDBUTTON_COL2 = 3
-ROUNDBUTTON_LCOL = LCOL
-ROUNDBUTTON_ALIGN = ALIGN_CENTER
-ROUNDBUTTON_TOPCOL = COL1
-ROUNDBUTTON_MCOL = MCOL
-ROUNDBUTTON_BW = BOUND_WIDTH
-SLIDER = 21
-VALSLIDER = 24
-VERT_SLIDER = 0
-HOR_SLIDER = 1
-VERT_FILL_SLIDER = 2
-HOR_FILL_SLIDER = 3
-VERT_NICE_SLIDER = 4
-HOR_NICE_SLIDER = 5
-SLIDER_BOXTYPE = DOWN_BOX
-SLIDER_COL1 = COL1
-SLIDER_COL2 = COL1
-SLIDER_LCOL = LCOL
-SLIDER_ALIGN = ALIGN_BOTTOM
-SLIDER_BW1 = BOUND_WIDTH
-SLIDER_BW2 = BOUND_WIDTH*0.75
-SLIDER_FINE = 0.05
-SLIDER_WIDTH = 0.08
-TEXT = 2
-NORMAL_TEXT = 0
-TEXT_BOXTYPE = NO_BOX
-TEXT_COL1 = COL1
-TEXT_LCOL = LCOL
-TEXT_ALIGN = ALIGN_LEFT
-TEXT_BW = BOUND_WIDTH
-TIMER = 62
-NORMAL_TIMER = 0
-VALUE_TIMER = 1
-HIDDEN_TIMER = 2
-TIMER_BOXTYPE = DOWN_BOX
-TIMER_COL1 = COL1
-TIMER_COL2 = 1
-TIMER_LCOL = LCOL
-TIMER_ALIGN = ALIGN_CENTER
-TIMER_BW = BOUND_WIDTH
-TIMER_BLINKRATE = 0.2
diff --git a/Lib/irix6/GET.py b/Lib/irix6/GET.py
deleted file mode 100644
index 9c3d7d6..0000000
--- a/Lib/irix6/GET.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Symbols from <gl/get.h>
-
-BCKBUFFER = 0x1
-FRNTBUFFER = 0x2
-DRAWZBUFFER = 0x4
-DMRGB = 0
-DMSINGLE = 1
-DMDOUBLE = 2
-DMRGBDOUBLE = 5
-HZ30 = 0
-HZ60 = 1
-NTSC = 2
-HDTV = 3
-VGA = 4
-IRIS3K = 5
-PR60 = 6
-PAL = 9
-HZ30_SG = 11
-A343 = 14
-STR_RECT = 15
-VOF0 = 16
-VOF1 = 17
-VOF2 = 18
-VOF3 = 19
-SGI0 = 20
-SGI1 = 21
-SGI2 = 22
-HZ72 = 23
-GL_VIDEO_REG = 0x00800000
-GLV_GENLOCK = 0x00000001
-GLV_UNBLANK = 0x00000002
-GLV_SRED = 0x00000004
-GLV_SGREEN = 0x00000008
-GLV_SBLUE = 0x00000010
-GLV_SALPHA = 0x00000020
-GLV_TTLGENLOCK = 0x00000080
-GLV_TTLSYNC = GLV_TTLGENLOCK
-GLV_GREENGENLOCK = 0x0000100
-LEFTPLANE = 0x0001
-RIGHTPLANE = 0x0002
-BOTTOMPLANE = 0x0004
-TOPPLANE = 0x0008
-NEARPLANE = 0x0010
-FARPLANE = 0x0020
-## GETDEF = __GL_GET_H__
-NOBUFFER = 0x0
-BOTHBUFFERS = 0x3
-DMINTENSITYSINGLE = 3
-DMINTENSITYDOUBLE = 4
-MONSPECIAL = 0x20
-HZ50 = 3
-MONA = 5
-MONB = 6
-MONC = 7
-MOND = 8
-MON_ALL = 12
-MON_GEN_ALL = 13
-CMAPMULTI = 0
-CMAPONE = 1
diff --git a/Lib/irix6/GL.py b/Lib/irix6/GL.py
deleted file mode 100644
index 9f02f65..0000000
--- a/Lib/irix6/GL.py
+++ /dev/null
@@ -1,393 +0,0 @@
-NULL = 0
-FALSE = 0
-TRUE = 1
-ATTRIBSTACKDEPTH = 10
-VPSTACKDEPTH = 8
-MATRIXSTACKDEPTH = 32
-NAMESTACKDEPTH = 1025
-STARTTAG = -2
-ENDTAG = -3
-BLACK = 0
-RED = 1
-GREEN = 2
-YELLOW = 3
-BLUE = 4
-MAGENTA = 5
-CYAN = 6
-WHITE = 7
-PUP_CLEAR = 0
-PUP_COLOR = 1
-PUP_BLACK = 2
-PUP_WHITE = 3
-NORMALDRAW = 0x010
-PUPDRAW = 0x020
-OVERDRAW = 0x040
-UNDERDRAW = 0x080
-CURSORDRAW = 0x100
-DUALDRAW = 0x200
-PATTERN_16 = 16
-PATTERN_32 = 32
-PATTERN_64 = 64
-PATTERN_16_SIZE = 16
-PATTERN_32_SIZE = 64
-PATTERN_64_SIZE = 256
-SRC_AUTO = 0
-SRC_FRONT = 1
-SRC_BACK = 2
-SRC_ZBUFFER = 3
-SRC_PUP = 4
-SRC_OVER = 5
-SRC_UNDER = 6
-SRC_FRAMEGRABBER = 7
-BF_ZERO = 0
-BF_ONE = 1
-BF_DC = 2
-BF_SC = 2
-BF_MDC = 3
-BF_MSC = 3
-BF_SA = 4
-BF_MSA = 5
-BF_DA = 6
-BF_MDA = 7
-BF_MIN_SA_MDA = 8
-AF_NEVER = 0
-AF_LESS = 1
-AF_EQUAL = 2
-AF_LEQUAL = 3
-AF_GREATER = 4
-AF_NOTEQUAL = 5
-AF_GEQUAL = 6
-AF_ALWAYS = 7
-ZF_NEVER = 0
-ZF_LESS = 1
-ZF_EQUAL = 2
-ZF_LEQUAL = 3
-ZF_GREATER = 4
-ZF_NOTEQUAL = 5
-ZF_GEQUAL = 6
-ZF_ALWAYS = 7
-ZSRC_DEPTH = 0
-ZSRC_COLOR = 1
-SMP_OFF = 0x0
-SMP_ON = 0x1
-SMP_SMOOTHER = 0x2
-SML_OFF = 0x0
-SML_ON = 0x1
-SML_SMOOTHER = 0x2
-SML_END_CORRECT = 0x4
-PYSM_OFF = 0
-PYSM_ON = 1
-PYSM_SHRINK = 2
-DT_OFF = 0
-DT_ON = 1
-PUP_NONE = 0
-PUP_GREY = 0x1
-PUP_BOX = 0x2
-PUP_CHECK = 0x4
-GLC_OLDPOLYGON = 0
-GLC_ZRANGEMAP = 1
-GLC_MQUEUERATE = 2
-GLC_SOFTATTACH = 3
-GLC_MANAGEBG = 4
-GLC_SLOWMAPCOLORS = 5
-GLC_INPUTCHANGEBUG = 6
-GLC_NOBORDERBUG = 7
-GLC_SET_VSYNC = 8
-GLC_GET_VSYNC = 9
-GLC_VSYNC_SLEEP = 10
-GLC_COMPATRATE = 15
-C16X1 = 0
-C16X2 = 1
-C32X1 = 2
-C32X2 = 3
-CCROSS = 4
-FLAT = 0
-GOURAUD = 1
-LO_ZERO = 0x0
-LO_AND = 0x1
-LO_ANDR = 0x2
-LO_SRC = 0x3
-LO_ANDI = 0x4
-LO_DST = 0x5
-LO_XOR = 0x6
-LO_OR = 0x7
-LO_NOR = 0x8
-LO_XNOR = 0x9
-LO_NDST = 0xa
-LO_ORR = 0xb
-LO_NSRC = 0xc
-LO_ORI = 0xd
-LO_NAND = 0xe
-LO_ONE = 0xf
-INFOCUSSCRN = -2
-ST_KEEP = 0
-ST_ZERO = 1
-ST_REPLACE = 2
-ST_INCR = 3
-ST_DECR = 4
-ST_INVERT = 5
-SF_NEVER = 0
-SF_LESS = 1
-SF_EQUAL = 2
-SF_LEQUAL = 3
-SF_GREATER = 4
-SF_NOTEQUAL = 5
-SF_GEQUAL = 6
-SF_ALWAYS = 7
-SS_OFF = 0
-SS_DEPTH = 1
-PYM_FILL = 1
-PYM_POINT = 2
-PYM_LINE = 3
-PYM_HOLLOW = 4
-PYM_LINE_FAST = 5
-FG_OFF = 0
-FG_ON = 1
-FG_DEFINE = 2
-FG_VTX_EXP = 2
-FG_VTX_LIN = 3
-FG_PIX_EXP = 4
-FG_PIX_LIN = 5
-FG_VTX_EXP2 = 6
-FG_PIX_EXP2 = 7
-PM_SHIFT = 0
-PM_EXPAND = 1
-PM_C0 = 2
-PM_C1 = 3
-PM_ADD24 = 4
-PM_SIZE = 5
-PM_OFFSET = 6
-PM_STRIDE = 7
-PM_TTOB = 8
-PM_RTOL = 9
-PM_ZDATA = 10
-PM_WARP = 11
-PM_RDX = 12
-PM_RDY = 13
-PM_CDX = 14
-PM_CDY = 15
-PM_XSTART = 16
-PM_YSTART = 17
-PM_VO1 = 1000
-NAUTO = 0
-NNORMALIZE = 1
-AC_CLEAR = 0
-AC_ACCUMULATE = 1
-AC_CLEAR_ACCUMULATE = 2
-AC_RETURN = 3
-AC_MULT = 4
-AC_ADD = 5
-CP_OFF = 0
-CP_ON = 1
-CP_DEFINE = 2
-SB_RESET = 0
-SB_TRACK = 1
-SB_HOLD = 2
-RD_FREEZE = 0x00000001
-RD_ALPHAONE = 0x00000002
-RD_IGNORE_UNDERLAY = 0x00000004
-RD_IGNORE_OVERLAY = 0x00000008
-RD_IGNORE_PUP = 0x00000010
-RD_OFFSCREEN = 0x00000020
-GD_XPMAX = 0
-GD_YPMAX = 1
-GD_XMMAX = 2
-GD_YMMAX = 3
-GD_ZMIN = 4
-GD_ZMAX = 5
-GD_BITS_NORM_SNG_RED = 6
-GD_BITS_NORM_SNG_GREEN = 7
-GD_BITS_NORM_SNG_BLUE = 8
-GD_BITS_NORM_DBL_RED = 9
-GD_BITS_NORM_DBL_GREEN = 10
-GD_BITS_NORM_DBL_BLUE = 11
-GD_BITS_NORM_SNG_CMODE = 12
-GD_BITS_NORM_DBL_CMODE = 13
-GD_BITS_NORM_SNG_MMAP = 14
-GD_BITS_NORM_DBL_MMAP = 15
-GD_BITS_NORM_ZBUFFER = 16
-GD_BITS_OVER_SNG_CMODE = 17
-GD_BITS_UNDR_SNG_CMODE = 18
-GD_BITS_PUP_SNG_CMODE = 19
-GD_BITS_NORM_SNG_ALPHA = 21
-GD_BITS_NORM_DBL_ALPHA = 22
-GD_BITS_CURSOR = 23
-GD_OVERUNDER_SHARED = 24
-GD_BLEND = 25
-GD_CIFRACT = 26
-GD_CROSSHAIR_CINDEX = 27
-GD_DITHER = 28
-GD_LINESMOOTH_CMODE = 30
-GD_LINESMOOTH_RGB = 31
-GD_LOGICOP = 33
-GD_NSCRNS = 35
-GD_NURBS_ORDER = 36
-GD_NBLINKS = 37
-GD_NVERTEX_POLY = 39
-GD_PATSIZE_64 = 40
-GD_PNTSMOOTH_CMODE = 41
-GD_PNTSMOOTH_RGB = 42
-GD_PUP_TO_OVERUNDER = 43
-GD_READSOURCE = 44
-GD_READSOURCE_ZBUFFER = 48
-GD_STEREO = 50
-GD_SUBPIXEL_LINE = 51
-GD_SUBPIXEL_PNT = 52
-GD_SUBPIXEL_POLY = 53
-GD_TRIMCURVE_ORDER = 54
-GD_WSYS = 55
-GD_ZDRAW_GEOM = 57
-GD_ZDRAW_PIXELS = 58
-GD_SCRNTYPE = 61
-GD_TEXTPORT = 62
-GD_NMMAPS = 63
-GD_FRAMEGRABBER = 64
-GD_TIMERHZ = 66
-GD_DBBOX = 67
-GD_AFUNCTION = 68
-GD_ALPHA_OVERUNDER = 69
-GD_BITS_ACBUF = 70
-GD_BITS_ACBUF_HW = 71
-GD_BITS_STENCIL = 72
-GD_CLIPPLANES = 73
-GD_FOGVERTEX = 74
-GD_LIGHTING_TWOSIDE = 76
-GD_POLYMODE = 77
-GD_POLYSMOOTH = 78
-GD_SCRBOX = 79
-GD_TEXTURE = 80
-GD_FOGPIXEL = 81
-GD_TEXTURE_PERSP = 82
-GD_MUXPIPES = 83
-GD_NOLIMIT = -2
-GD_WSYS_NONE = 0
-GD_WSYS_4S = 1
-GD_SCRNTYPE_WM = 0
-GD_SCRNTYPE_NOWM = 1
-N_PIXEL_TOLERANCE = 1
-N_CULLING = 2
-N_DISPLAY = 3
-N_ERRORCHECKING = 4
-N_SUBDIVISIONS = 5
-N_S_STEPS = 6
-N_T_STEPS = 7
-N_TILES = 8
-N_TMP1 = 9
-N_TMP2 = 10
-N_TMP3 = 11
-N_TMP4 = 12
-N_TMP5 = 13
-N_TMP6 = 14
-N_FILL = 1.0
-N_OUTLINE_POLY = 2.0
-N_OUTLINE_PATCH = 5.0
-N_ISOLINE_S = 12.0
-N_ST = 0x8
-N_STW = 0xd
-N_XYZ = 0x4c
-N_XYZW = 0x51
-N_TEX = 0x88
-N_TEXW = 0x8d
-N_RGBA = 0xd0
-N_RGBAW = 0xd5
-N_P2D = 0x8
-N_P2DR = 0xd
-N_V3D = 0x4c
-N_V3DR = 0x51
-N_T2D = 0x88
-N_T2DR = 0x8d
-N_C4D = 0xd0
-N_C4DR = 0xd5
-LMNULL = 0.0
-MSINGLE = 0
-MPROJECTION = 1
-MVIEWING = 2
-MTEXTURE = 3
-MAXLIGHTS = 8
-MAXRESTRICTIONS = 4
-DEFMATERIAL = 0
-EMISSION = 1
-AMBIENT = 2
-DIFFUSE = 3
-SPECULAR = 4
-SHININESS = 5
-COLORINDEXES = 6
-ALPHA = 7
-DEFLIGHT = 100
-LCOLOR = 101
-POSITION = 102
-SPOTDIRECTION = 103
-SPOTLIGHT = 104
-DEFLMODEL = 200
-LOCALVIEWER = 201
-ATTENUATION = 202
-ATTENUATION2 = 203
-TWOSIDE = 204
-MATERIAL = 1000
-BACKMATERIAL = 1001
-LIGHT0 = 1100
-LIGHT1 = 1101
-LIGHT2 = 1102
-LIGHT3 = 1103
-LIGHT4 = 1104
-LIGHT5 = 1105
-LIGHT6 = 1106
-LIGHT7 = 1107
-LMODEL = 1200
-LMC_COLOR = 0
-LMC_EMISSION = 1
-LMC_AMBIENT = 2
-LMC_DIFFUSE = 3
-LMC_SPECULAR = 4
-LMC_AD = 5
-LMC_NULL = 6
-TX_MINFILTER = 0x100
-TX_MAGFILTER = 0x200
-TX_WRAP = 0x300
-TX_WRAP_S = 0x310
-TX_WRAP_T = 0x320
-TX_TILE = 0x400
-TX_BORDER = 0x500
-TX_NULL = 0x000
-TX_POINT = 0x110
-TX_BILINEAR = 0x220
-TX_MIPMAP = 0x120
-TX_MIPMAP_POINT = 0x121
-TX_MIPMAP_LINEAR = 0x122
-TX_MIPMAP_BILINEAR = 0x123
-TX_MIPMAP_TRILINEAR = 0x124
-TX_REPEAT = 0x301
-TX_CLAMP = 0x302
-TX_SELECT = 0x303
-TX_TEXTURE_0 = 0
-TV_MODULATE = 0x101
-TV_BLEND = 0x102
-TV_DECAL = 0x103
-TV_COLOR = 0x200
-TV_NULL = 0x000
-TV_ENV0 = 0
-TX_S = 0
-TX_T = 1
-TG_OFF = 0
-TG_ON = 1
-TG_CONTOUR = 2
-TG_LINEAR = 3
-TG_SPHEREMAP = 4
-TG_REFRACTMAP = 5
-DGLSINK = 0
-DGLLOCAL = 1
-DGLTSOCKET = 2
-DGL4DDN = 3
-PUP_CURSOR = PUP_COLOR
-FATAL = 1
-WARNING = 2
-ASK_CONT = 3
-ASK_RESTART = 4
-XMAXSCREEN = 1279
-YMAXSCREEN = 1023
-XMAXMEDIUM = 1023
-YMAXMEDIUM = 767
-XMAX170 = 645
-YMAX170 = 484
-XMAXPAL = 779
-YMAXPAL = 574
diff --git a/Lib/irix6/GLWS.py b/Lib/irix6/GLWS.py
deleted file mode 100644
index 69dab71..0000000
--- a/Lib/irix6/GLWS.py
+++ /dev/null
@@ -1,12 +0,0 @@
-NOERROR = 0
-NOCONTEXT = -1
-NODISPLAY = -2
-NOWINDOW = -3
-NOGRAPHICS = -4
-NOTTOP = -5
-NOVISUAL = -6
-BUFSIZE = -7
-BADWINDOW = -8
-ALREADYBOUND = -100
-BINDFAILED = -101
-SETFAILED = -102
diff --git a/Lib/irix6/IN.py b/Lib/irix6/IN.py
deleted file mode 100644
index 7340878..0000000
--- a/Lib/irix6/IN.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# Generated by h2py from /usr/include/netinet/in.h
-
-# Included from sgidefs.h
-_MIPS_ISA_MIPS1 = 1
-_MIPS_ISA_MIPS2 = 2
-_MIPS_ISA_MIPS3 = 3
-_MIPS_ISA_MIPS4 = 4
-_MIPS_SIM_ABI32 = 1
-_MIPS_SIM_NABI32 = 2
-_MIPS_SIM_ABI64 = 3
-
-# Included from sys/endian.h
-LITTLE_ENDIAN = 1234
-BIG_ENDIAN = 4321
-PDP_ENDIAN = 3412
-BYTE_ORDER = BIG_ENDIAN
-BYTE_ORDER = LITTLE_ENDIAN
-def ntohl(x): return (x)
-
-def ntohs(x): return (x)
-
-def htonl(x): return (x)
-
-def htons(x): return (x)
-
-def htonl(x): return ntohl(x)
-
-def htons(x): return ntohs(x)
-
-
-# Included from sys/bsd_types.h
-
-# Included from sys/mkdev.h
-ONBITSMAJOR = 7
-ONBITSMINOR = 8
-OMAXMAJ = 0x7f
-OMAXMIN = 0xff
-NBITSMAJOR = 14
-NBITSMINOR = 18
-MAXMAJ = 0x1ff
-MAXMIN = 0x3ffff
-OLDDEV = 0
-NEWDEV = 1
-MKDEV_VER = NEWDEV
-def major(dev): return __major(MKDEV_VER, dev)
-
-def minor(dev): return __minor(MKDEV_VER, dev)
-
-
-# Included from sys/select.h
-
-# Included from standards.h
-FD_SETSIZE = 1024
-__NBBY = 8
-
-# Included from string.h
-NULL = 0L
-NBBY = 8
-IPPROTO_IP = 0
-IPPROTO_ICMP = 1
-IPPROTO_IGMP = 2
-IPPROTO_GGP = 3
-IPPROTO_IPIP = 4
-IPPROTO_ENCAP = IPPROTO_IPIP
-IPPROTO_ST = 5
-IPPROTO_TCP = 6
-IPPROTO_EGP = 8
-IPPROTO_PUP = 12
-IPPROTO_UDP = 17
-IPPROTO_IDP = 22
-IPPROTO_TP = 29
-IPPROTO_XTP = 36
-IPPROTO_RSVP = 46
-IPPROTO_HELLO = 63
-IPPROTO_ND = 77
-IPPROTO_EON = 80
-IPPROTO_OSPF = 89
-IPPROTO_SWIPE = 94
-IPPROTO_RAW = 255
-IPPROTO_MAX = 256
-IPPORT_RESERVED = 1024
-IPPORT_MAXPORT = 65535
-def IN_CLASSA(i): return (((__int32_t)(i) & 0x80000000) == 0)
-
-IN_CLASSA_NET = 0xff000000
-IN_CLASSA_NSHIFT = 24
-IN_CLASSA_HOST = 0x00ffffff
-IN_CLASSA_MAX = 128
-def IN_CLASSB(i): return (((__int32_t)(i) & 0xc0000000) == 0x80000000)
-
-IN_CLASSB_NET = 0xffff0000
-IN_CLASSB_NSHIFT = 16
-IN_CLASSB_HOST = 0x0000ffff
-IN_CLASSB_MAX = 65536
-def IN_CLASSC(i): return (((__int32_t)(i) & 0xe0000000) == 0xc0000000)
-
-IN_CLASSC_NET = 0xffffff00
-IN_CLASSC_NSHIFT = 8
-IN_CLASSC_HOST = 0x000000ff
-def IN_CLASSD(i): return (((__int32_t)(i) & 0xf0000000) == 0xe0000000)
-
-IN_CLASSD_NET = 0xf0000000
-IN_CLASSD_NSHIFT = 28
-IN_CLASSD_HOST = 0x0fffffff
-def IN_MULTICAST(i): return IN_CLASSD(i)
-
-def IN_EXPERIMENTAL(i): return (((__int32_t)(i) & 0xf0000000) == 0xf0000000)
-
-def IN_BADCLASS(i): return (((__int32_t)(i) & 0xf0000000) == 0xf0000000)
-
-INADDR_NONE = 0xffffffff
-IN_LOOPBACKNET = 127
-IP_OPTIONS = 1
-IP_HDRINCL = 2
-IP_TOS = 3
-IP_TTL = 4
-IP_RECVOPTS = 5
-IP_RECVRETOPTS = 6
-IP_RECVDSTADDR = 7
-IP_RETOPTS = 8
-IP_MULTICAST_IF = 20
-IP_MULTICAST_TTL = 21
-IP_MULTICAST_LOOP = 22
-IP_ADD_MEMBERSHIP = 23
-IP_DROP_MEMBERSHIP = 24
-IP_MULTICAST_VIF = 25
-IP_RSVP_VIF_ON = 26
-IP_RSVP_VIF_OFF = 27
-IP_RSVP_ON = 28
-IP_SENDSRCADDR = 36
-IP_DEFAULT_MULTICAST_TTL = 1
-IP_DEFAULT_MULTICAST_LOOP = 1
-IP_MAX_MEMBERSHIPS = 20
diff --git a/Lib/irix6/IOCTL.py b/Lib/irix6/IOCTL.py
deleted file mode 100644
index cec3c3f..0000000
--- a/Lib/irix6/IOCTL.py
+++ /dev/null
@@ -1,233 +0,0 @@
-# These lines were mostly generated by h2py.py (see demo/scripts)
-# from <sys/ioctl.h>, <sys/termio.h> and <termios.h> on Irix 4.0.2
-# with some manual changes to cope with imperfections in h2py.py.
-# The applicability on other systems is not clear; especially non-SYSV
-# systems may have a totally different set of ioctls.
-
-IOCTYPE = 0xff00
-LIOC = (ord('l')<<8)
-LIOCGETP = (LIOC|1)
-LIOCSETP = (LIOC|2)
-LIOCGETS = (LIOC|5)
-LIOCSETS = (LIOC|6)
-DIOC = (ord('d')<<8)
-DIOCGETC = (DIOC|1)
-DIOCGETB = (DIOC|2)
-DIOCSETE = (DIOC|3)
-IOCPARM_MASK = 0x7f
-IOC_VOID = 0x20000000
-IOC_OUT = 0x40000000
-IOC_IN = 0x80000000
-IOC_INOUT = (IOC_IN|IOC_OUT)
-int = 'i'
-short = 'h'
-long = 'l'
-def sizeof(t): import struct; return struct.calcsize(t)
-def _IO(x,y): return (IOC_VOID|((x)<<8)|y)
-def _IOR(x,y,t): return (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|y)
-def _IOW(x,y,t): return (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|y)
-# this should be _IORW, but stdio got there first
-def _IOWR(x,y,t): return (IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|y)
-FIONREAD = _IOR(ord('f'), 127, int)
-FIONBIO = _IOW(ord('f'), 126, int)
-FIOASYNC = _IOW(ord('f'), 125, int)
-FIOSETOWN = _IOW(ord('f'), 124, int)
-FIOGETOWN = _IOR(ord('f'), 123, int)
-NCC = 8
-NCC_PAD = 7
-NCC_EXT = 16
-NCCS = (NCC+NCC_PAD+NCC_EXT)
-VINTR = 0
-VQUIT = 1
-VERASE = 2
-VKILL = 3
-VEOF = 4
-VEOL = 5
-VEOL2 = 6
-VMIN = VEOF
-VTIME = VEOL
-VSWTCH = 7
-VLNEXT = (NCC+NCC_PAD+0)
-VWERASE = (NCC+NCC_PAD+1)
-VRPRNT = (NCC+NCC_PAD+2)
-VFLUSHO = (NCC+NCC_PAD+3)
-VSTOP = (NCC+NCC_PAD+4)
-VSTART = (NCC+NCC_PAD+5)
-CNUL = '\0'
-CDEL = '\377'
-CESC = '\\'
-CINTR = '\177'
-CQUIT = '\34'
-CBRK = '\377'
-def CTRL(c): return ord(c) & 0x0f
-CERASE = CTRL('H')
-CKILL = CTRL('U')
-CEOF = CTRL('d')
-CEOT = CEOF
-CSTART = CTRL('q')
-CSTOP = CTRL('s')
-CSWTCH = CTRL('z')
-CSUSP = CSWTCH
-CNSWTCH = 0
-CLNEXT = CTRL('v')
-CWERASE = CTRL('w')
-CFLUSHO = CTRL('o')
-CFLUSH = CFLUSHO
-CRPRNT = CTRL('r')
-CDSUSP = CTRL('y')
-IGNBRK = 0000001
-BRKINT = 0000002
-IGNPAR = 0000004
-PARMRK = 0000010
-INPCK = 0000020
-ISTRIP = 0000040
-INLCR = 0000100
-IGNCR = 0000200
-ICRNL = 0000400
-IUCLC = 0001000
-IXON = 0002000
-IXANY = 0004000
-IXOFF = 0010000
-IBLKMD = 0020000
-OPOST = 0000001
-OLCUC = 0000002
-ONLCR = 0000004
-OCRNL = 0000010
-ONOCR = 0000020
-ONLRET = 0000040
-OFILL = 0000100
-OFDEL = 0000200
-NLDLY = 0000400
-NL0 = 0
-NL1 = 0000400
-CRDLY = 0003000
-CR0 = 0
-CR1 = 0001000
-CR2 = 0002000
-CR3 = 0003000
-TABDLY = 0014000
-TAB0 = 0
-TAB1 = 0004000
-TAB2 = 0010000
-TAB3 = 0014000
-BSDLY = 0020000
-BS0 = 0
-BS1 = 0020000
-VTDLY = 0040000
-VT0 = 0
-VT1 = 0040000
-FFDLY = 0100000
-FF0 = 0
-FF1 = 0100000
-CBAUD = 0000017
-B0 = 0
-B50 = 0000001
-B75 = 0000002
-B110 = 0000003
-B134 = 0000004
-B150 = 0000005
-B200 = 0000006
-B300 = 0000007
-B600 = 0000010
-B1200 = 0000011
-B1800 = 0000012
-B2400 = 0000013
-B4800 = 0000014
-B9600 = 0000015
-B19200 = 0000016
-EXTA = 0000016
-B38400 = 0000017
-EXTB = 0000017
-CSIZE = 0000060
-CS5 = 0
-CS6 = 0000020
-CS7 = 0000040
-CS8 = 0000060
-CSTOPB = 0000100
-CREAD = 0000200
-PARENB = 0000400
-PARODD = 0001000
-HUPCL = 0002000
-CLOCAL = 0004000
-LOBLK = 0040000
-ISIG = 0000001
-ICANON = 0000002
-XCASE = 0000004
-ECHO = 0000010
-ECHOE = 0000020
-ECHOK = 0000040
-ECHONL = 0000100
-NOFLSH = 0000200
-IIEXTEN = 0000400
-ITOSTOP = 0001000
-SSPEED = B9600
-IOCTYPE = 0xff00
-TIOC = (ord('T')<<8)
-oTCGETA = (TIOC|1)
-oTCSETA = (TIOC|2)
-oTCSETAW = (TIOC|3)
-oTCSETAF = (TIOC|4)
-TCSBRK = (TIOC|5)
-TCXONC = (TIOC|6)
-TCFLSH = (TIOC|7)
-TCGETA = (TIOC|8)
-TCSETA = (TIOC|9)
-TCSETAW = (TIOC|10)
-TCSETAF = (TIOC|11)
-TIOCFLUSH = (TIOC|12)
-TCDSET = (TIOC|32)
-TCBLKMD = (TIOC|33)
-TIOCPKT = (TIOC|112)
-TIOCPKT_DATA = 0x00
-TIOCPKT_FLUSHREAD = 0x01
-TIOCPKT_FLUSHWRITE = 0x02
-TIOCPKT_NOSTOP = 0x10
-TIOCPKT_DOSTOP = 0x20
-TIOCNOTTY = (TIOC|113)
-TIOCSTI = (TIOC|114)
-TIOCSPGRP = _IOW(ord('t'), 118, int)
-TIOCGPGRP = _IOR(ord('t'), 119, int)
-TIOCCONS = _IOW(ord('t'), 120, int)
-struct_winsize = 'hhhh'
-TIOCGWINSZ = _IOR(ord('t'), 104, struct_winsize)
-TIOCSWINSZ = _IOW(ord('t'), 103, struct_winsize)
-TFIOC = (ord('F')<<8)
-oFIONREAD = (TFIOC|127)
-LDIOC = (ord('D')<<8)
-LDOPEN = (LDIOC|0)
-LDCLOSE = (LDIOC|1)
-LDCHG = (LDIOC|2)
-LDGETT = (LDIOC|8)
-LDSETT = (LDIOC|9)
-TERM_NONE = 0
-TERM_TEC = 1
-TERM_V61 = 2
-TERM_V10 = 3
-TERM_TEX = 4
-TERM_D40 = 5
-TERM_H45 = 6
-TERM_D42 = 7
-TM_NONE = 0000
-TM_SNL = 0001
-TM_ANL = 0002
-TM_LCF = 0004
-TM_CECHO = 0010
-TM_CINVIS = 0020
-TM_SET = 0200
-LDISC0 = 0
-LDISC1 = 1
-NTTYDISC = LDISC1
-VSUSP = VSWTCH
-TCSANOW = 0
-TCSADRAIN = 1
-TCSAFLUSH = 2
-TCIFLUSH = 0
-TCOFLUSH = 1
-TCIOFLUSH = 2
-TCOOFF = 0
-TCOON = 1
-TCIOFF = 2
-TCION = 3
-TO_STOP = LOBLK
-IEXTEN = IIEXTEN
-TOSTOP = ITOSTOP
diff --git a/Lib/irix6/SOCKET.py b/Lib/irix6/SOCKET.py
deleted file mode 100644
index 39a8b63..0000000
--- a/Lib/irix6/SOCKET.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# Generated by h2py from /usr/include/sys/socket.h
-
-# Included from sys/bsd_types.h
-
-# Included from sys/mkdev.h
-ONBITSMAJOR = 7
-ONBITSMINOR = 8
-OMAXMAJ = 0x7f
-OMAXMIN = 0xff
-NBITSMAJOR = 14
-NBITSMINOR = 18
-MAXMAJ = 0x1ff
-MAXMIN = 0x3ffff
-OLDDEV = 0
-NEWDEV = 1
-MKDEV_VER = NEWDEV
-def major(dev): return __major(MKDEV_VER, dev)
-
-def minor(dev): return __minor(MKDEV_VER, dev)
-
-
-# Included from sys/select.h
-
-# Included from standards.h
-FD_SETSIZE = 1024
-__NBBY = 8
-
-# Included from string.h
-NULL = 0L
-NBBY = 8
-NC_TPI_CLTS = 1
-NC_TPI_COTS = 2
-NC_TPI_COTS_ORD = 3
-NC_TPI_RAW = 4
-SOCK_DGRAM = NC_TPI_CLTS
-SOCK_STREAM = NC_TPI_COTS
-SOCK_RAW = NC_TPI_RAW
-SOCK_RDM = 5
-SOCK_SEQPACKET = 6
-SO_DEBUG = 0x0001
-SO_ACCEPTCONN = 0x0002
-SO_REUSEADDR = 0x0004
-SO_KEEPALIVE = 0x0008
-SO_DONTROUTE = 0x0010
-SO_BROADCAST = 0x0020
-SO_USELOOPBACK = 0x0040
-SO_LINGER = 0x0080
-SO_OOBINLINE = 0x0100
-SO_REUSEPORT = 0x0200
-SO_ORDREL = 0x0200
-SO_IMASOCKET = 0x0400
-SO_CHAMELEON = 0x1000
-SO_PASSIFNAME = 0x2000
-SO_SNDBUF = 0x1001
-SO_RCVBUF = 0x1002
-SO_SNDLOWAT = 0x1003
-SO_RCVLOWAT = 0x1004
-SO_SNDTIMEO = 0x1005
-SO_RCVTIMEO = 0x1006
-SO_ERROR = 0x1007
-SO_TYPE = 0x1008
-SO_PROTOTYPE = 0x1009
-SOL_SOCKET = 0xffff
-AF_UNSPEC = 0
-AF_LOCAL = 1
-AF_UNIX = AF_LOCAL
-AF_INET = 2
-AF_IMPLINK = 3
-AF_PUP = 4
-AF_CHAOS = 5
-AF_NS = 6
-AF_ISO = 7
-AF_ECMA = 8
-AF_DATAKIT = 9
-AF_CCITT = 10
-AF_SNA = 11
-AF_DECnet = 12
-AF_DLI = 13
-AF_LAT = 14
-AF_HYLINK = 15
-AF_APPLETALK = 16
-AF_ROUTE = 17
-AF_RAW = 18
-AF_LINK = 18
-pseudo_AF_XTP = 19
-AF_NIT = 17
-AF_802 = 18
-AF_OSI = 19
-AF_X25 = 20
-AF_OSINET = 21
-AF_GOSIP = 22
-AF_SDL = 23
-AF_INET6 = 24
-AF_LINK = 25
-AF_MAX = (AF_LINK+1)
-_SIN_ADDR_SIZE = 8
-_SIN_SA_DATA_SIZE = 14
-_MAX_SA_LEN = 20
-def OPTLEN(x): return ((((x) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
-
-PF_UNSPEC = AF_UNSPEC
-PF_LOCAL = AF_LOCAL
-PF_UNIX = PF_LOCAL
-PF_INET = AF_INET
-PF_IMPLINK = AF_IMPLINK
-PF_PUP = AF_PUP
-PF_CHAOS = AF_CHAOS
-PF_NS = AF_NS
-PF_ISO = AF_ISO
-PF_OSI = AF_ISO
-PF_ECMA = AF_ECMA
-PF_DATAKIT = AF_DATAKIT
-PF_CCITT = AF_CCITT
-PF_SNA = AF_SNA
-PF_DECnet = AF_DECnet
-PF_DLI = AF_DLI
-PF_LAT = AF_LAT
-PF_HYLINK = AF_HYLINK
-PF_APPLETALK = AF_APPLETALK
-PF_ROUTE = AF_ROUTE
-PF_LINK = AF_LINK
-PF_XTP = pseudo_AF_XTP
-PF_RAW = AF_RAW
-PF_NIT = AF_NIT
-PF_802 = AF_802
-PF_X25 = AF_X25
-PF_OSINET = AF_OSINET
-PF_GOSIP = AF_GOSIP
-PF_INET6 = AF_INET6
-PF_MAX = AF_MAX
-NET_RT_DUMP = 1
-NET_RT_FLAGS = 2
-NET_RT_IFLIST = 3
-IPCTL_FORWARDING = 1
-IPCTL_SENDREDIRECTS = 2
-UDPCTL_CHECKSUM = 1
-SOMAXCONN = 1000
-MSG_OOB = 0x1
-MSG_PEEK = 0x2
-MSG_DONTROUTE = 0x4
-MSG_EOR = 0x8
-MSG_TRUNC = 0x10
-MSG_CTRUNC = 0x20
-MSG_WAITALL = 0x40
-MSG_DONTWAIT = 0x80
-MSG_BTAG = 0x40
-MSG_ETAG = 0x80
-MSG_MAXIOVLEN = 16
-_ALIGNBYTES = 7
-def _ALIGN(p): return (((u_int)(p) + _ALIGNBYTES) & ~_ALIGNBYTES)
-
-SCM_RIGHTS = 0x01
diff --git a/Lib/irix6/SV.py b/Lib/irix6/SV.py
deleted file mode 100644
index 08fb917..0000000
--- a/Lib/irix6/SV.py
+++ /dev/null
@@ -1,120 +0,0 @@
-NTSC_XMAX = 640
-NTSC_YMAX = 480
-PAL_XMAX = 768
-PAL_YMAX = 576
-BLANKING_BUFFER_SIZE = 2
-
-MAX_SOURCES = 2
-
-# mode parameter for Bind calls
-IN_OFF = 0				# No Video
-IN_OVER = 1				# Video over graphics
-IN_UNDER = 2				# Video under graphics
-IN_REPLACE = 3				# Video replaces entire win
-
-# mode parameters for LoadMap calls.  Specifies buffer, always 256 entries
-INPUT_COLORMAP = 0			# tuples of 8-bit RGB
-CHROMA_KEY_MAP = 1			# tuples of 8-bit RGB
-COLOR_SPACE_MAP = 2			# tuples of 8-bit RGB
-GAMMA_MAP = 3				# tuples of 24-bit red values
-
-# mode parameters for UseExclusive calls
-INPUT = 0
-OUTPUT = 1
-IN_OUT = 2
-
-# Format constants for the capture routines
-RGB8_FRAMES = 0				# noninterleaved 8 bit 3:2:3 RBG fields
-RGB32_FRAMES = 1			# 32-bit 8:8:8 RGB frames
-YUV411_FRAMES = 2			# interleaved, 8:2:2 YUV format
-YUV411_FRAMES_AND_BLANKING_BUFFER = 3
-
-#
-# sv.SetParam is passed variable length argument lists,
-# consisting of <name, value> pairs.   The following
-# constants identify argument names.
-#
-_NAME_BASE = 1000
-SOURCE = (_NAME_BASE + 0)
-SOURCE1 = 0
-SOURCE2 = 1
-SOURCE3 = 2
-COLOR = (_NAME_BASE + 1)
-DEFAULT_COLOR = 0
-USER_COLOR = 1
-MONO = 2
-OUTPUTMODE = (_NAME_BASE + 2)
-LIVE_OUTPUT = 0
-STILL24_OUT = 1
-FREEZE = (_NAME_BASE + 3)
-DITHER = (_NAME_BASE + 4)
-OUTPUT_FILTER = (_NAME_BASE + 5)
-HUE = (_NAME_BASE + 6)
-GENLOCK = (_NAME_BASE + 7)
-GENLOCK_OFF = 0
-GENLOCK_ON = 1
-GENLOCK_HOUSE = 2
-BROADCAST = (_NAME_BASE + 8)
-NTSC = 0
-PAL = 1
-VIDEO_MODE = (_NAME_BASE + 9)
-COMP = 0
-SVIDEO = 1
-INPUT_BYPASS = (_NAME_BASE + 10)
-FIELDDROP = (_NAME_BASE + 11)
-SLAVE = (_NAME_BASE + 12)
-APERTURE_FACTOR = (_NAME_BASE + 13)
-AFACTOR_0 = 0
-AFACTOR_QTR = 1
-AFACTOR_HLF = 2
-AFACTOR_ONE = 3
-CORING = (_NAME_BASE + 14)
-COR_OFF = 0
-COR_1LSB = 1
-COR_2LSB = 2
-COR_3LSB = 3
-APERTURE_BANDPASS = (_NAME_BASE + 15)
-ABAND_F0 = 0
-ABAND_F1 = 1
-ABAND_F2 = 2
-ABAND_F3 = 3
-PREFILTER = (_NAME_BASE + 16)
-CHROMA_TRAP = (_NAME_BASE + 17)
-CK_THRESHOLD = (_NAME_BASE + 18)
-PAL_SENSITIVITY = (_NAME_BASE + 19)
-GAIN_CONTROL = (_NAME_BASE + 20)
-GAIN_SLOW = 0
-GAIN_MEDIUM = 1
-GAIN_FAST = 2
-GAIN_FROZEN = 3
-AUTO_CKILL = (_NAME_BASE + 21)
-VTR_MODE = (_NAME_BASE + 22)
-VTR_INPUT = 0
-CAMERA_INPUT = 1
-LUMA_DELAY = (_NAME_BASE + 23)
-VNOISE = (_NAME_BASE + 24)
-VNOISE_NORMAL = 0
-VNOISE_SEARCH = 1
-VNOISE_AUTO = 2
-VNOISE_BYPASS = 3
-CHCV_PAL = (_NAME_BASE + 25)
-CHCV_NTSC = (_NAME_BASE + 26)
-CCIR_LEVELS = (_NAME_BASE + 27)
-STD_CHROMA = (_NAME_BASE + 28)
-DENC_VTBYPASS = (_NAME_BASE + 29)
-FAST_TIMECONSTANT = (_NAME_BASE + 30)
-GENLOCK_DELAY = (_NAME_BASE + 31)
-PHASE_SYNC = (_NAME_BASE + 32)
-VIDEO_OUTPUT = (_NAME_BASE + 33)
-CHROMA_PHASEOUT = (_NAME_BASE + 34)
-CHROMA_CENTER = (_NAME_BASE + 35)
-YUV_TO_RGB_INVERT = (_NAME_BASE + 36)
-SOURCE1_BROADCAST = (_NAME_BASE + 37)
-SOURCE1_MODE = (_NAME_BASE + 38)
-SOURCE2_BROADCAST = (_NAME_BASE + 39)
-SOURCE2_MODE = (_NAME_BASE + 40)
-SOURCE3_BROADCAST = (_NAME_BASE + 41)
-SOURCE3_MODE = (_NAME_BASE + 42)
-SIGNAL_STD = (_NAME_BASE + 43)
-NOSIGNAL = 2
-SIGNAL_COLOR = (_NAME_BASE + 44)
diff --git a/Lib/irix6/TERMIOS.py b/Lib/irix6/TERMIOS.py
deleted file mode 100644
index fa4a475..0000000
--- a/Lib/irix6/TERMIOS.py
+++ /dev/null
@@ -1,676 +0,0 @@
-# Generated by h2py from /usr/include/sys/termios.h
-
-# Included from standards.h
-
-# Included from sys/ttydev.h
-__NEW_INVALID_BAUD = 1800
-__OLD_B0 = 0
-__OLD_B50 = 0000001
-__OLD_B75 = 0000002
-__OLD_B110 = 0000003
-__OLD_B134 = 0000004
-__OLD_B150 = 0000005
-__OLD_B200 = 0000006
-__OLD_B300 = 0000007
-__OLD_B600 = 0000010
-__OLD_B1200 = 0000011
-__OLD_B1800 = 0000012
-__OLD_B2400 = 0000013
-__OLD_B4800 = 0000014
-__OLD_B9600 = 0000015
-__OLD_B19200 = 0000016
-__OLD_EXTA = 0000016
-__OLD_B38400 = 0000017
-__OLD_EXTB = 0000017
-__OLD_INVALID_BAUD = __OLD_B1800
-B0 = 0
-B50 = 50
-B75 = 75
-B110 = 110
-B134 = 134
-B150 = 150
-B200 = 200
-B300 = 300
-B600 = 600
-B1200 = 1200
-B1800 = 1800
-B2400 = 2400
-B4800 = 4800
-B9600 = 9600
-B19200 = 19200
-EXTA = 19200
-B38400 = 38400
-EXTB = 38400
-B57600 = 57600
-B76800 = 76800
-B115200 = 115200
-__INVALID_BAUD = 1800
-B0 = __OLD_B0
-B50 = __OLD_B50
-B75 = __OLD_B75
-B110 = __OLD_B110
-B134 = __OLD_B134
-B150 = __OLD_B150
-B200 = __OLD_B200
-B300 = __OLD_B300
-B600 = __OLD_B600
-B1200 = __OLD_B1200
-B1800 = __OLD_B1800
-B2400 = __OLD_B2400
-B4800 = __OLD_B4800
-B9600 = __OLD_B9600
-B19200 = __OLD_B19200
-EXTA = __OLD_B19200
-B38400 = __OLD_B38400
-EXTB = __OLD_B38400
-__INVALID_BAUD = __OLD_INVALID_BAUD
-
-# Included from sys/types.h
-
-# Included from sgidefs.h
-_MIPS_ISA_MIPS1 = 1
-_MIPS_ISA_MIPS2 = 2
-_MIPS_ISA_MIPS3 = 3
-_MIPS_ISA_MIPS4 = 4
-_MIPS_SIM_ABI32 = 1
-_MIPS_SIM_NABI32 = 2
-_MIPS_SIM_ABI64 = 3
-P_MYID = (-1)
-P_MYHOSTID = (-1)
-
-# Included from sys/bsd_types.h
-
-# Included from sys/mkdev.h
-ONBITSMAJOR = 7
-ONBITSMINOR = 8
-OMAXMAJ = 0x7f
-OMAXMIN = 0xff
-NBITSMAJOR = 14
-NBITSMINOR = 18
-MAXMAJ = 0x1ff
-MAXMIN = 0x3ffff
-OLDDEV = 0
-NEWDEV = 1
-MKDEV_VER = NEWDEV
-def major(dev): return __major(MKDEV_VER, dev)
-
-def minor(dev): return __minor(MKDEV_VER, dev)
-
-
-# Included from sys/select.h
-FD_SETSIZE = 1024
-__NBBY = 8
-
-# Included from string.h
-NULL = 0L
-NBBY = 8
-_POSIX_VDISABLE = 0
-def CTRL(c): return ((c)&037)
-
-IBSHIFT = 16
-NCC = 8
-NCCS = 23
-__NEW_MAX_BAUD = 500000
-VINTR = 0
-VQUIT = 1
-VERASE = 2
-VKILL = 3
-VEOF = 4
-VEOL = 5
-VEOL2 = 6
-VMIN = 4
-VTIME = 5
-VSWTCH = 7
-VSTART = 8
-VSTOP = 9
-VSUSP = 10
-VDSUSP = 11
-VREPRINT = 12
-VDISCARD = 13
-VWERASE = 14
-VLNEXT = 15
-VRPRNT = VREPRINT
-VFLUSHO = VDISCARD
-VCEOF = NCC
-VCEOL = (NCC + 1)
-CNUL = 0
-CDEL = 0377
-CESC = ord('\\')
-CINTR = 0177
-CQUIT = 034
-CERASE = CTRL(ord('H'))
-CKILL = CTRL(ord('U'))
-CEOL = 0
-CEOL2 = 0
-CEOF = CTRL(ord('d'))
-CEOT = CEOF
-CSTART = CTRL(ord('q'))
-CSTOP = CTRL(ord('s'))
-CSWTCH = CTRL(ord('z'))
-CNSWTCH = 0
-CSUSP = CSWTCH
-CLNEXT = CTRL(ord('v'))
-CWERASE = CTRL(ord('w'))
-CFLUSHO = CTRL(ord('o'))
-CFLUSH = CFLUSHO
-CRPRNT = CTRL(ord('r'))
-CDSUSP = CTRL(ord('y'))
-CBRK = 0377
-IGNBRK = 0000001
-BRKINT = 0000002
-IGNPAR = 0000004
-PARMRK = 0000010
-INPCK = 0000020
-ISTRIP = 0000040
-INLCR = 0000100
-IGNCR = 0000200
-ICRNL = 0000400
-IUCLC = 0001000
-IXON = 0002000
-IXANY = 0004000
-IXOFF = 0010000
-IMAXBEL = 0020000
-IBLKMD = 0040000
-OPOST = 0000001
-OLCUC = 0000002
-ONLCR = 0000004
-OCRNL = 0000010
-ONOCR = 0000020
-ONLRET = 0000040
-OFILL = 0000100
-OFDEL = 0000200
-NLDLY = 0000400
-NL0 = 0
-NL1 = 0000400
-CRDLY = 0003000
-CR0 = 0
-CR1 = 0001000
-CR2 = 0002000
-CR3 = 0003000
-TABDLY = 0014000
-TAB0 = 0
-TAB1 = 0004000
-TAB2 = 0010000
-TAB3 = 0014000
-XTABS = 0014000
-BSDLY = 0020000
-BS0 = 0
-BS1 = 0020000
-VTDLY = 0040000
-VT0 = 0
-VT1 = 0040000
-FFDLY = 0100000
-FF0 = 0
-FF1 = 0100000
-PAGEOUT = 0200000
-WRAP = 0400000
-CBAUD = 000000017
-CSIZE = 000000060
-CS5 = 0
-CS6 = 000000020
-CS7 = 000000040
-CS8 = 000000060
-CSTOPB = 000000100
-CREAD = 000000200
-PARENB = 000000400
-PARODD = 000001000
-HUPCL = 000002000
-CLOCAL = 000004000
-RCV1EN = 000010000
-XMT1EN = 000020000
-LOBLK = 000040000
-XCLUDE = 000100000
-CIBAUD = 003600000
-PAREXT = 004000000
-CNEW_RTSCTS = 010000000
-ISIG = 0000001
-ICANON = 0000002
-XCASE = 0000004
-ECHO = 0000010
-ECHOE = 0000020
-ECHOK = 0000040
-ECHONL = 0000100
-NOFLSH = 0000200
-IEXTEN = 0000400
-ITOSTOP = 0100000
-TOSTOP = ITOSTOP
-ECHOCTL = 0001000
-ECHOPRT = 0002000
-ECHOKE = 0004000
-DEFECHO = 0010000
-FLUSHO = 0020000
-PENDIN = 0040000
-TIOC = (ord('T')<<8)
-__NEW_TCGETA = (TIOC|201)
-__NEW_TCSETA = (TIOC|202)
-__NEW_TCSETAW = (TIOC|203)
-__NEW_TCSETAF = (TIOC|204)
-__OLD_TCGETA = (TIOC|1)
-__OLD_TCSETA = (TIOC|2)
-__OLD_TCSETAW = (TIOC|3)
-__OLD_TCSETAF = (TIOC|4)
-TCGETA = __NEW_TCGETA
-TCSETA = __NEW_TCSETA
-TCSETAW = __NEW_TCSETAW
-TCSETAF = __NEW_TCSETAF
-TCGETA = __OLD_TCGETA
-TCSETA = __OLD_TCSETA
-TCSETAW = __OLD_TCSETAW
-TCSETAF = __OLD_TCSETAF
-TCSBRK = (TIOC|5)
-TCXONC = (TIOC|6)
-TCFLSH = (TIOC|7)
-
-# Included from sys/ioctl.h
-IOCTYPE = 0xff00
-LIOC = (ord('l')<<8)
-LIOCGETP = (LIOC|1)
-LIOCSETP = (LIOC|2)
-LIOCGETS = (LIOC|5)
-LIOCSETS = (LIOC|6)
-DIOC = (ord('d')<<8)
-DIOCGETC = (DIOC|1)
-DIOCGETB = (DIOC|2)
-DIOCSETE = (DIOC|3)
-
-# Included from sys/ioccom.h
-IOCPARM_MASK = 0xff
-IOC_VOID = 0x20000000
-IOC_OUT = 0x40000000
-IOC_IN = 0x80000000
-IOC_INOUT = (IOC_IN|IOC_OUT)
-
-# Included from net/soioctl.h
-
-# Included from sys/termio.h
-
-# Included from sys/termios.h
-_POSIX_VDISABLE = 0
-def CTRL(c): return ((c)&037)
-
-IBSHIFT = 16
-NCC = 8
-NCCS = 23
-__NEW_MAX_BAUD = 500000
-VINTR = 0
-VQUIT = 1
-VERASE = 2
-VKILL = 3
-VEOF = 4
-VEOL = 5
-VEOL2 = 6
-VMIN = 4
-VTIME = 5
-VSWTCH = 7
-VSTART = 8
-VSTOP = 9
-VSUSP = 10
-VDSUSP = 11
-VREPRINT = 12
-VDISCARD = 13
-VWERASE = 14
-VLNEXT = 15
-VRPRNT = VREPRINT
-VFLUSHO = VDISCARD
-VCEOF = NCC
-VCEOL = (NCC + 1)
-CNUL = 0
-CDEL = 0377
-CESC = ord('\\')
-CINTR = 0177
-CQUIT = 034
-CERASE = CTRL(ord('H'))
-CKILL = CTRL(ord('U'))
-CEOL = 0
-CEOL2 = 0
-CEOF = CTRL(ord('d'))
-CEOT = CEOF
-CSTART = CTRL(ord('q'))
-CSTOP = CTRL(ord('s'))
-CSWTCH = CTRL(ord('z'))
-CNSWTCH = 0
-CSUSP = CSWTCH
-CLNEXT = CTRL(ord('v'))
-CWERASE = CTRL(ord('w'))
-CFLUSHO = CTRL(ord('o'))
-CFLUSH = CFLUSHO
-CRPRNT = CTRL(ord('r'))
-CDSUSP = CTRL(ord('y'))
-CBRK = 0377
-IGNBRK = 0000001
-BRKINT = 0000002
-IGNPAR = 0000004
-PARMRK = 0000010
-INPCK = 0000020
-ISTRIP = 0000040
-INLCR = 0000100
-IGNCR = 0000200
-ICRNL = 0000400
-IUCLC = 0001000
-IXON = 0002000
-IXANY = 0004000
-IXOFF = 0010000
-IMAXBEL = 0020000
-IBLKMD = 0040000
-OPOST = 0000001
-OLCUC = 0000002
-ONLCR = 0000004
-OCRNL = 0000010
-ONOCR = 0000020
-ONLRET = 0000040
-OFILL = 0000100
-OFDEL = 0000200
-NLDLY = 0000400
-NL0 = 0
-NL1 = 0000400
-CRDLY = 0003000
-CR0 = 0
-CR1 = 0001000
-CR2 = 0002000
-CR3 = 0003000
-TABDLY = 0014000
-TAB0 = 0
-TAB1 = 0004000
-TAB2 = 0010000
-TAB3 = 0014000
-XTABS = 0014000
-BSDLY = 0020000
-BS0 = 0
-BS1 = 0020000
-VTDLY = 0040000
-VT0 = 0
-VT1 = 0040000
-FFDLY = 0100000
-FF0 = 0
-FF1 = 0100000
-PAGEOUT = 0200000
-WRAP = 0400000
-CBAUD = 000000017
-CSIZE = 000000060
-CS5 = 0
-CS6 = 000000020
-CS7 = 000000040
-CS8 = 000000060
-CSTOPB = 000000100
-CREAD = 000000200
-PARENB = 000000400
-PARODD = 000001000
-HUPCL = 000002000
-CLOCAL = 000004000
-RCV1EN = 000010000
-XMT1EN = 000020000
-LOBLK = 000040000
-XCLUDE = 000100000
-CIBAUD = 003600000
-PAREXT = 004000000
-CNEW_RTSCTS = 010000000
-ISIG = 0000001
-ICANON = 0000002
-XCASE = 0000004
-ECHO = 0000010
-ECHOE = 0000020
-ECHOK = 0000040
-ECHONL = 0000100
-NOFLSH = 0000200
-IEXTEN = 0000400
-ITOSTOP = 0100000
-TOSTOP = ITOSTOP
-ECHOCTL = 0001000
-ECHOPRT = 0002000
-ECHOKE = 0004000
-DEFECHO = 0010000
-FLUSHO = 0020000
-PENDIN = 0040000
-TIOC = (ord('T')<<8)
-__NEW_TCGETA = (TIOC|201)
-__NEW_TCSETA = (TIOC|202)
-__NEW_TCSETAW = (TIOC|203)
-__NEW_TCSETAF = (TIOC|204)
-__OLD_TCGETA = (TIOC|1)
-__OLD_TCSETA = (TIOC|2)
-__OLD_TCSETAW = (TIOC|3)
-__OLD_TCSETAF = (TIOC|4)
-TCGETA = __NEW_TCGETA
-TCSETA = __NEW_TCSETA
-TCSETAW = __NEW_TCSETAW
-TCSETAF = __NEW_TCSETAF
-TCGETA = __OLD_TCGETA
-TCSETA = __OLD_TCSETA
-TCSETAW = __OLD_TCSETAW
-TCSETAF = __OLD_TCSETAF
-TCSBRK = (TIOC|5)
-TCXONC = (TIOC|6)
-TCFLSH = (TIOC|7)
-LDISC0 = 0
-LDISC1 = 1
-NTTYDISC = LDISC1
-TIOCFLUSH = (TIOC|12)
-TCSETLABEL = (TIOC|31)
-TCDSET = (TIOC|32)
-TCBLKMD = (TIOC|33)
-TIOCPKT = (TIOC|112)
-TIOCPKT_DATA = 0x00
-TIOCPKT_FLUSHREAD = 0x01
-TIOCPKT_FLUSHWRITE = 0x02
-TIOCPKT_NOSTOP = 0x10
-TIOCPKT_DOSTOP = 0x20
-TIOCPKT_IOCTL = 0x40
-TIOCNOTTY = (TIOC|113)
-TIOCSTI = (TIOC|114)
-TFIOC = (ord('F')<<8)
-oFIONREAD = (TFIOC|127)
-TO_STOP = LOBLK
-IOCTYPE = 0xff00
-__NEW_TCGETS = (TIOC|213)
-__NEW_TCSETS = (TIOC|214)
-__NEW_TCSETSW = (TIOC|215)
-__NEW_TCSETSF = (TIOC|216)
-__OLD_TCGETS = (TIOC|13)
-__OLD_TCSETS = (TIOC|14)
-__OLD_TCSETSW = (TIOC|15)
-__OLD_TCSETSF = (TIOC|16)
-TCGETS = __NEW_TCGETS
-TCSETS = __NEW_TCSETS
-TCSETSW = __NEW_TCSETSW
-TCSETSF = __NEW_TCSETSF
-TCGETS = __OLD_TCGETS
-TCSETS = __OLD_TCSETS
-TCSETSW = __OLD_TCSETSW
-TCSETSF = __OLD_TCSETSF
-TCSANOW = ((ord('T')<<8)|14)
-TCSADRAIN = ((ord('T')<<8)|15)
-TCSAFLUSH = ((ord('T')<<8)|16)
-TCIFLUSH = 0
-TCOFLUSH = 1
-TCIOFLUSH = 2
-TCOOFF = 0
-TCOON = 1
-TCIOFF = 2
-TCION = 3
-tIOC = (ord('t')<<8)
-TIOCGETD = (tIOC|0)
-TIOCSETD = (tIOC|1)
-TIOCHPCL = (tIOC|2)
-TIOCGETP = (tIOC|8)
-TIOCSETP = (tIOC|9)
-TIOCSETN = (tIOC|10)
-TIOCEXCL = (tIOC|13)
-TIOCNXCL = (tIOC|14)
-TIOCSETC = (tIOC|17)
-TIOCGETC = (tIOC|18)
-TIOCLBIS = (tIOC|127)
-TIOCLBIC = (tIOC|126)
-TIOCLSET = (tIOC|125)
-TIOCLGET = (tIOC|124)
-TIOCSBRK = (tIOC|123)
-TIOCCBRK = (tIOC|122)
-TIOCSDTR = (tIOC|121)
-TIOCCDTR = (tIOC|120)
-TIOCSLTC = (tIOC|117)
-TIOCGLTC = (tIOC|116)
-TIOCOUTQ = (tIOC|115)
-TIOCSTOP = (tIOC|111)
-TIOCSTART = (tIOC|110)
-TIOCGSID = (tIOC|22)
-TIOCSSID = (tIOC|24)
-TIOCMSET = (tIOC|26)
-TIOCMBIS = (tIOC|27)
-TIOCMBIC = (tIOC|28)
-TIOCMGET = (tIOC|29)
-TIOCM_LE = 0001
-TIOCM_DTR = 0002
-TIOCM_RTS = 0004
-TIOCM_ST = 0010
-TIOCM_SR = 0020
-TIOCM_CTS = 0040
-TIOCM_CAR = 0100
-TIOCM_CD = TIOCM_CAR
-TIOCM_RNG = 0200
-TIOCM_RI = TIOCM_RNG
-TIOCM_DSR = 0400
-TIOCREMOTE = (tIOC|30)
-TIOCSIGNAL = (tIOC|31)
-ISPTM = ((ord('P')<<8)|1)
-UNLKPT = ((ord('P')<<8)|2)
-SVR4SOPEN = ((ord('P')<<8)|100)
-LDIOC = (ord('D')<<8)
-LDOPEN = (LDIOC|0)
-LDCLOSE = (LDIOC|1)
-LDCHG = (LDIOC|2)
-LDGETT = (LDIOC|8)
-LDSETT = (LDIOC|9)
-LDSMAP = (LDIOC|10)
-LDGMAP = (LDIOC|11)
-LDNMAP = (LDIOC|12)
-DIOC = (ord('d')<<8)
-DIOCGETP = (DIOC|8)
-DIOCSETP = (DIOC|9)
-FIORDCHK = ((ord('f')<<8)|3)
-CLNEXT = CTRL(ord('v'))
-CWERASE = CTRL(ord('w'))
-CFLUSHO = CTRL(ord('o'))
-CFLUSH = CFLUSHO
-CRPRNT = CTRL(ord('r'))
-CDSUSP = CTRL(ord('y'))
-__OLD_SSPEED = __OLD_B9600
-SSPEED = B9600
-TERM_NONE = 0
-TERM_TEC = 1
-TERM_V61 = 2
-TERM_V10 = 3
-TERM_TEX = 4
-TERM_D40 = 5
-TERM_H45 = 6
-TERM_D42 = 7
-TM_NONE = 0000
-TM_SNL = 0001
-TM_ANL = 0002
-TM_LCF = 0004
-TM_CECHO = 0010
-TM_CINVIS = 0020
-TM_SET = 0200
-LDISC0 = 0
-LDISC1 = 1
-NTTYDISC = LDISC1
-TIOCFLUSH = (TIOC|12)
-TCSETLABEL = (TIOC|31)
-TCDSET = (TIOC|32)
-TCBLKMD = (TIOC|33)
-TIOCPKT = (TIOC|112)
-TIOCPKT_DATA = 0x00
-TIOCPKT_FLUSHREAD = 0x01
-TIOCPKT_FLUSHWRITE = 0x02
-TIOCPKT_NOSTOP = 0x10
-TIOCPKT_DOSTOP = 0x20
-TIOCPKT_IOCTL = 0x40
-TIOCNOTTY = (TIOC|113)
-TIOCSTI = (TIOC|114)
-TFIOC = (ord('F')<<8)
-oFIONREAD = (TFIOC|127)
-TO_STOP = LOBLK
-IOCTYPE = 0xff00
-__NEW_TCGETS = (TIOC|213)
-__NEW_TCSETS = (TIOC|214)
-__NEW_TCSETSW = (TIOC|215)
-__NEW_TCSETSF = (TIOC|216)
-__OLD_TCGETS = (TIOC|13)
-__OLD_TCSETS = (TIOC|14)
-__OLD_TCSETSW = (TIOC|15)
-__OLD_TCSETSF = (TIOC|16)
-TCGETS = __NEW_TCGETS
-TCSETS = __NEW_TCSETS
-TCSETSW = __NEW_TCSETSW
-TCSETSF = __NEW_TCSETSF
-TCGETS = __OLD_TCGETS
-TCSETS = __OLD_TCSETS
-TCSETSW = __OLD_TCSETSW
-TCSETSF = __OLD_TCSETSF
-TCSANOW = ((ord('T')<<8)|14)
-TCSADRAIN = ((ord('T')<<8)|15)
-TCSAFLUSH = ((ord('T')<<8)|16)
-TCIFLUSH = 0
-TCOFLUSH = 1
-TCIOFLUSH = 2
-TCOOFF = 0
-TCOON = 1
-TCIOFF = 2
-TCION = 3
-tIOC = (ord('t')<<8)
-TIOCGETD = (tIOC|0)
-TIOCSETD = (tIOC|1)
-TIOCHPCL = (tIOC|2)
-TIOCGETP = (tIOC|8)
-TIOCSETP = (tIOC|9)
-TIOCSETN = (tIOC|10)
-TIOCEXCL = (tIOC|13)
-TIOCNXCL = (tIOC|14)
-TIOCSETC = (tIOC|17)
-TIOCGETC = (tIOC|18)
-TIOCLBIS = (tIOC|127)
-TIOCLBIC = (tIOC|126)
-TIOCLSET = (tIOC|125)
-TIOCLGET = (tIOC|124)
-TIOCSBRK = (tIOC|123)
-TIOCCBRK = (tIOC|122)
-TIOCSDTR = (tIOC|121)
-TIOCCDTR = (tIOC|120)
-TIOCSLTC = (tIOC|117)
-TIOCGLTC = (tIOC|116)
-TIOCOUTQ = (tIOC|115)
-TIOCSTOP = (tIOC|111)
-TIOCSTART = (tIOC|110)
-TIOCGSID = (tIOC|22)
-TIOCSSID = (tIOC|24)
-TIOCMSET = (tIOC|26)
-TIOCMBIS = (tIOC|27)
-TIOCMBIC = (tIOC|28)
-TIOCMGET = (tIOC|29)
-TIOCM_LE = 0001
-TIOCM_DTR = 0002
-TIOCM_RTS = 0004
-TIOCM_ST = 0010
-TIOCM_SR = 0020
-TIOCM_CTS = 0040
-TIOCM_CAR = 0100
-TIOCM_CD = TIOCM_CAR
-TIOCM_RNG = 0200
-TIOCM_RI = TIOCM_RNG
-TIOCM_DSR = 0400
-TIOCREMOTE = (tIOC|30)
-TIOCSIGNAL = (tIOC|31)
-ISPTM = ((ord('P')<<8)|1)
-UNLKPT = ((ord('P')<<8)|2)
-SVR4SOPEN = ((ord('P')<<8)|100)
-LDIOC = (ord('D')<<8)
-LDOPEN = (LDIOC|0)
-LDCLOSE = (LDIOC|1)
-LDCHG = (LDIOC|2)
-LDGETT = (LDIOC|8)
-LDSETT = (LDIOC|9)
-LDSMAP = (LDIOC|10)
-LDGMAP = (LDIOC|11)
-LDNMAP = (LDIOC|12)
-DIOC = (ord('d')<<8)
-DIOCGETP = (DIOC|8)
-DIOCSETP = (DIOC|9)
-FIORDCHK = ((ord('f')<<8)|3)
diff --git a/Lib/irix6/WAIT.py b/Lib/irix6/WAIT.py
deleted file mode 100644
index 741af3b..0000000
--- a/Lib/irix6/WAIT.py
+++ /dev/null
@@ -1,335 +0,0 @@
-# Generated by h2py from /usr/include/sys/wait.h
-
-# Included from standards.h
-def _W_INT(i): return (i)
-
-WUNTRACED = 0004
-WNOHANG = 0100
-_WSTOPPED = 0177
-def WIFEXITED(stat): return ((_W_INT(stat)&0377)==0)
-
-def WEXITSTATUS(stat): return ((_W_INT(stat)>>8)&0377)
-
-def WTERMSIG(stat): return (_W_INT(stat)&0177)
-
-def WSTOPSIG(stat): return ((_W_INT(stat)>>8)&0377)
-
-WEXITED = 0001
-WTRAPPED = 0002
-WSTOPPED = 0004
-WCONTINUED = 0010
-WNOWAIT = 0200
-WOPTMASK = (WEXITED|WTRAPPED|WSTOPPED|WCONTINUED|WNOHANG|WNOWAIT)
-WSTOPFLG = 0177
-WCONTFLG = 0177777
-WCOREFLAG = 0200
-WSIGMASK = 0177
-def WWORD(stat): return (_W_INT(stat)&0177777)
-
-def WIFCONTINUED(stat): return (WWORD(stat)==WCONTFLG)
-
-def WCOREDUMP(stat): return (_W_INT(stat) & WCOREFLAG)
-
-
-# Included from sys/types.h
-
-# Included from sgidefs.h
-_MIPS_ISA_MIPS1 = 1
-_MIPS_ISA_MIPS2 = 2
-_MIPS_ISA_MIPS3 = 3
-_MIPS_ISA_MIPS4 = 4
-_MIPS_SIM_ABI32 = 1
-_MIPS_SIM_NABI32 = 2
-_MIPS_SIM_ABI64 = 3
-P_MYID = (-1)
-P_MYHOSTID = (-1)
-
-# Included from sys/bsd_types.h
-
-# Included from sys/mkdev.h
-ONBITSMAJOR = 7
-ONBITSMINOR = 8
-OMAXMAJ = 0x7f
-OMAXMIN = 0xff
-NBITSMAJOR = 14
-NBITSMINOR = 18
-MAXMAJ = 0x1ff
-MAXMIN = 0x3ffff
-OLDDEV = 0
-NEWDEV = 1
-MKDEV_VER = NEWDEV
-def major(dev): return __major(MKDEV_VER, dev)
-
-def minor(dev): return __minor(MKDEV_VER, dev)
-
-
-# Included from sys/select.h
-FD_SETSIZE = 1024
-__NBBY = 8
-
-# Included from string.h
-NULL = 0L
-NBBY = 8
-
-# Included from sys/procset.h
-P_INITPID = 1
-P_INITUID = 0
-P_INITPGID = 0
-
-# Included from sys/signal.h
-SIGHUP = 1
-SIGINT = 2
-SIGQUIT = 3
-SIGILL = 4
-SIGTRAP = 5
-SIGIOT = 6
-SIGABRT = 6
-SIGEMT = 7
-SIGFPE = 8
-SIGKILL = 9
-SIGBUS = 10
-SIGSEGV = 11
-SIGSYS = 12
-SIGPIPE = 13
-SIGALRM = 14
-SIGTERM = 15
-SIGUSR1 = 16
-SIGUSR2 = 17
-SIGCLD = 18
-SIGCHLD = 18
-SIGPWR = 19
-SIGWINCH = 20
-SIGURG = 21
-SIGPOLL = 22
-SIGIO = 22
-SIGSTOP = 23
-SIGTSTP = 24
-SIGCONT = 25
-SIGTTIN = 26
-SIGTTOU = 27
-SIGVTALRM = 28
-SIGPROF = 29
-SIGXCPU = 30
-SIGXFSZ = 31
-SIG32 = 32
-SIGCKPT = 33
-SIGRTMIN = 49
-SIGRTMAX = 64
-SIGPTINTR = 47
-SIGPTRESCHED = 48
-__sigargs = int
-SIGEV_NONE = 128
-SIGEV_SIGNAL = 129
-SIGEV_CALLBACK = 130
-
-# Included from sys/siginfo.h
-ILL_ILLOPC = 1
-ILL_ILLOPN = 2
-ILL_ILLADR = 3
-ILL_ILLTRP = 4
-ILL_PRVOPC = 5
-ILL_PRVREG = 6
-ILL_COPROC = 7
-ILL_BADSTK = 8
-NSIGILL = 8
-FPE_INTDIV = 1
-FPE_INTOVF = 2
-FPE_FLTDIV = 3
-FPE_FLTOVF = 4
-FPE_FLTUND = 5
-FPE_FLTRES = 6
-FPE_FLTINV = 7
-FPE_FLTSUB = 8
-NSIGFPE = 8
-SEGV_MAPERR = 1
-SEGV_ACCERR = 2
-NSIGSEGV = 2
-BUS_ADRALN = 1
-BUS_ADRERR = 2
-BUS_OBJERR = 3
-NSIGBUS = 3
-TRAP_BRKPT = 1
-TRAP_TRACE = 2
-NSIGTRAP = 2
-CLD_EXITED = 1
-CLD_KILLED = 2
-CLD_DUMPED = 3
-CLD_TRAPPED = 4
-CLD_STOPPED = 5
-CLD_CONTINUED = 6
-NSIGCLD = 6
-POLL_IN = 1
-POLL_OUT = 2
-POLL_MSG = 3
-POLL_ERR = 4
-POLL_PRI = 5
-POLL_HUP = 6
-NSIGPOLL = 6
-SI_MAXSZ = 128
-SI_USER = 0
-SI_KILL = SI_USER
-SI_QUEUE = -1
-SI_ASYNCIO = -2
-SI_TIMER = -3
-SI_MESGQ = -4
-SIG_NOP = 0
-SIG_BLOCK = 1
-SIG_UNBLOCK = 2
-SIG_SETMASK = 3
-SIG_SETMASK32 = 256
-SA_ONSTACK = 0x00000001
-SA_RESETHAND = 0x00000002
-SA_RESTART = 0x00000004
-SA_SIGINFO = 0x00000008
-SA_NODEFER = 0x00000010
-SA_NOCLDWAIT = 0x00010000
-SA_NOCLDSTOP = 0x00020000
-_SA_BSDCALL = 0x10000000
-MINSIGSTKSZ = 512
-SIGSTKSZ = 8192
-SS_ONSTACK = 0x00000001
-SS_DISABLE = 0x00000002
-
-# Included from sys/ucontext.h
-NGREG = 36
-NGREG = 37
-GETCONTEXT = 0
-SETCONTEXT = 1
-UC_SIGMASK = 001
-UC_STACK = 002
-UC_CPU = 004
-UC_MAU = 010
-UC_MCONTEXT = (UC_CPU|UC_MAU)
-UC_ALL = (UC_SIGMASK|UC_STACK|UC_MCONTEXT)
-CTX_R0 = 0
-CTX_AT = 1
-CTX_V0 = 2
-CTX_V1 = 3
-CTX_A0 = 4
-CTX_A1 = 5
-CTX_A2 = 6
-CTX_A3 = 7
-CTX_T0 = 8
-CTX_T1 = 9
-CTX_T2 = 10
-CTX_T3 = 11
-CTX_T4 = 12
-CTX_T5 = 13
-CTX_T6 = 14
-CTX_T7 = 15
-CTX_A4 = 8
-CTX_A5 = 9
-CTX_A6 = 10
-CTX_A7 = 11
-CTX_T0 = 12
-CTX_T1 = 13
-CTX_T2 = 14
-CTX_T3 = 15
-CTX_S0 = 16
-CTX_S1 = 17
-CTX_S2 = 18
-CTX_S3 = 19
-CTX_S4 = 20
-CTX_S5 = 21
-CTX_S6 = 22
-CTX_S7 = 23
-CTX_T8 = 24
-CTX_T9 = 25
-CTX_K0 = 26
-CTX_K1 = 27
-CTX_GP = 28
-CTX_SP = 29
-CTX_S8 = 30
-CTX_RA = 31
-CTX_MDLO = 32
-CTX_MDHI = 33
-CTX_CAUSE = 34
-CTX_EPC = 35
-CTX_SR = 36
-CXT_R0 = CTX_R0
-CXT_AT = CTX_AT
-CXT_V0 = CTX_V0
-CXT_V1 = CTX_V1
-CXT_A0 = CTX_A0
-CXT_A1 = CTX_A1
-CXT_A2 = CTX_A2
-CXT_A3 = CTX_A3
-CXT_T0 = CTX_T0
-CXT_T1 = CTX_T1
-CXT_T2 = CTX_T2
-CXT_T3 = CTX_T3
-CXT_T4 = CTX_T4
-CXT_T5 = CTX_T5
-CXT_T6 = CTX_T6
-CXT_T7 = CTX_T7
-CXT_S0 = CTX_S0
-CXT_S1 = CTX_S1
-CXT_S2 = CTX_S2
-CXT_S3 = CTX_S3
-CXT_S4 = CTX_S4
-CXT_S5 = CTX_S5
-CXT_S6 = CTX_S6
-CXT_S7 = CTX_S7
-CXT_T8 = CTX_T8
-CXT_T9 = CTX_T9
-CXT_K0 = CTX_K0
-CXT_K1 = CTX_K1
-CXT_GP = CTX_GP
-CXT_SP = CTX_SP
-CXT_S8 = CTX_S8
-CXT_RA = CTX_RA
-CXT_MDLO = CTX_MDLO
-CXT_MDHI = CTX_MDHI
-CXT_CAUSE = CTX_CAUSE
-CXT_EPC = CTX_EPC
-CXT_SR = CTX_SR
-SV_ONSTACK = 0x0001
-SV_INTERRUPT = 0x0002
-NUMBSDSIGS = (32)
-def sigmask(sig): return (1L << ((sig)-1))
-
-def sigmask(sig): return (1L << ((sig)-1))
-
-SIG_ERR = (-1)
-SIG_IGN = (1)
-SIG_HOLD = (2)
-SIG_DFL = (0)
-NSIG = 65
-MAXSIG = (NSIG-1)
-NUMSIGS = (NSIG-1)
-BRK_USERBP = 0
-BRK_KERNELBP = 1
-BRK_ABORT = 2
-BRK_BD_TAKEN = 3
-BRK_BD_NOTTAKEN = 4
-BRK_SSTEPBP = 5
-BRK_OVERFLOW = 6
-BRK_DIVZERO = 7
-BRK_RANGE = 8
-BRK_PSEUDO_OP_BIT = 0x80
-BRK_PSEUDO_OP_MAX = 0x3
-BRK_CACHE_SYNC = 0x80
-BRK_SWASH_FLUSH = 0x81
-BRK_SWASH_SWTCH = 0x82
-BRK_MULOVF = 1023
-
-# Included from sys/resource.h
-PRIO_MIN = -20
-PRIO_MAX = 20
-PRIO_PROCESS = 0
-PRIO_PGRP = 1
-PRIO_USER = 2
-RUSAGE_SELF = 0
-RUSAGE_CHILDREN = -1
-RLIMIT_CPU = 0
-RLIMIT_FSIZE = 1
-RLIMIT_DATA = 2
-RLIMIT_STACK = 3
-RLIMIT_CORE = 4
-RLIMIT_NOFILE = 5
-RLIMIT_VMEM = 6
-RLIMIT_RSS = 7
-RLIMIT_AS = RLIMIT_VMEM
-RLIM_NLIMITS = 8
-RLIM32_INFINITY = 0x7fffffff
-RLIM_INFINITY = 0x7fffffff
diff --git a/Lib/irix6/cddb.py b/Lib/irix6/cddb.py
deleted file mode 100644
index 57cf3c6..0000000
--- a/Lib/irix6/cddb.py
+++ /dev/null
@@ -1,208 +0,0 @@
-# This file implements a class which forms an interface to the .cddb
-# directory that is maintained by SGI's cdman program.
-#
-# Usage is as follows:
-#
-# import readcd
-# r = readcd.Readcd()
-# c = Cddb(r.gettrackinfo())
-#
-# Now you can use c.artist, c.title and c.track[trackno] (where trackno
-# starts at 1).  When the CD is not recognized, all values will be the empty
-# string.
-# It is also possible to set the above mentioned variables to new values.
-# You can then use c.write() to write out the changed values to the
-# .cdplayerrc file.
-
-import string, posix, os
-
-_cddbrc = '.cddb'
-_DB_ID_NTRACKS = 5
-_dbid_map = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@_=+abcdefghijklmnopqrstuvwxyz'
-def _dbid(v):
-	if v >= len(_dbid_map):
-		return string.zfill(v, 2)
-	else:
-		return _dbid_map[v]
-
-def tochash(toc):
-	if type(toc) == type(''):
-		tracklist = []
-		for i in range(2, len(toc), 4):
-			tracklist.append((None,
-				  (string.atoi(toc[i:i+2]),
-				   string.atoi(toc[i+2:i+4]))))
-	else:
-		tracklist = toc
-	ntracks = len(tracklist)
-	hash = _dbid((ntracks >> 4) & 0xF) + _dbid(ntracks & 0xF)
-	if ntracks <= _DB_ID_NTRACKS:
-		nidtracks = ntracks
-	else:
-		nidtracks = _DB_ID_NTRACKS - 1
-		min = 0
-		sec = 0
-		for track in tracklist:
-			start, length = track
-			min = min + length[0]
-			sec = sec + length[1]
-		min = min + sec / 60
-		sec = sec % 60
-		hash = hash + _dbid(min) + _dbid(sec)
-	for i in range(nidtracks):
-		start, length = tracklist[i]
-		hash = hash + _dbid(length[0]) + _dbid(length[1])
-	return hash
-	
-class Cddb:
-	def __init__(self, tracklist):
-		if os.environ.has_key('CDDB_PATH'):
-			path = os.environ['CDDB_PATH']
-			cddb_path = string.splitfields(path, ',')
-		else:
-			home = os.environ['HOME']
-			cddb_path = [home + '/' + _cddbrc]
-
-		self._get_id(tracklist)
-
-		for dir in cddb_path:
-			file = dir + '/' + self.id + '.rdb'
-			try:
-				f = open(file, 'r')
-				self.file = file
-				break
-			except IOError:
-				pass
-		ntracks = string.atoi(self.id[:2], 16)
-		self.artist = ''
-		self.title = ''
-		self.track = [None] + [''] * ntracks
-		self.trackartist = [None] + [''] * ntracks
-		self.notes = []
-		if not hasattr(self, 'file'):
-			return
-		import regex
-		reg = regex.compile('^\\([^.]*\\)\\.\\([^:]*\\):[\t ]+\\(.*\\)')
-		while 1:
-			line = f.readline()
-			if not line:
-				break
-			if reg.match(line) == -1:
-				print 'syntax error in ' + file
-				continue
-			name1 = line[reg.regs[1][0]:reg.regs[1][1]]
-			name2 = line[reg.regs[2][0]:reg.regs[2][1]]
-			value = line[reg.regs[3][0]:reg.regs[3][1]]
-			if name1 == 'album':
-				if name2 == 'artist':
-					self.artist = value
-				elif name2 == 'title':
-					self.title = value
-				elif name2 == 'toc':
-					if not self.toc:
-						self.toc = value
-					if self.toc != value:
-						print 'toc\'s don\'t match'
-				elif name2 == 'notes':
-					self.notes.append(value)
-			elif name1[:5] == 'track':
-				try:
-					trackno = string.atoi(name1[5:])
-				except strings.atoi_error:
-					print 'syntax error in ' + file
-					continue
-				if trackno > ntracks:
-					print 'track number ' + `trackno` + \
-						  ' in file ' + file + \
-						  ' out of range'
-					continue
-				if name2 == 'title':
-					self.track[trackno] = value
-				elif name2 == 'artist':
-					self.trackartist[trackno] = value
-		f.close()
-		for i in range(2, len(self.track)):
-			track = self.track[i]
-			# if track title starts with `,', use initial part
-			# of previous track's title
-			if track and track[0] == ',':
-				try:
-					off = string.index(self.track[i - 1],
-							   ',')
-				except string.index_error:
-					pass
-				else:
-					self.track[i] = self.track[i-1][:off] \
-							+ track
-
-	def _get_id(self, tracklist):
-		# fill in self.id and self.toc.
-		# if the argument is a string ending in .rdb, the part
-		# upto the suffix is taken as the id.
-		if type(tracklist) == type(''):
-			if tracklist[-4:] == '.rdb':
-				self.id = tracklist[:-4]
-				self.toc = ''
-				return
-			t = []
-			for i in range(2, len(tracklist), 4):
-				t.append((None, \
-					  (string.atoi(tracklist[i:i+2]), \
-					   string.atoi(tracklist[i+2:i+4]))))
-			tracklist = t
-		ntracks = len(tracklist)
-		self.id = _dbid((ntracks >> 4) & 0xF) + _dbid(ntracks & 0xF)
-		if ntracks <= _DB_ID_NTRACKS:
-			nidtracks = ntracks
-		else:
-			nidtracks = _DB_ID_NTRACKS - 1
-			min = 0
-			sec = 0
-			for track in tracklist:
-				start, length = track
-				min = min + length[0]
-				sec = sec + length[1]
-			min = min + sec / 60
-			sec = sec % 60
-			self.id = self.id + _dbid(min) + _dbid(sec)
-		for i in range(nidtracks):
-			start, length = tracklist[i]
-			self.id = self.id + _dbid(length[0]) + _dbid(length[1])
-		self.toc = string.zfill(ntracks, 2)
-		for track in tracklist:
-			start, length = track
-			self.toc = self.toc + string.zfill(length[0], 2) + \
-				  string.zfill(length[1], 2)
-
-	def write(self):
-		import posixpath
-		if os.environ.has_key('CDDB_WRITE_DIR'):
-			dir = os.environ['CDDB_WRITE_DIR']
-		else:
-			dir = os.environ['HOME'] + '/' + _cddbrc
-		file = dir + '/' + self.id + '.rdb'
-		if posixpath.exists(file):
-			# make backup copy
-			posix.rename(file, file + '~')
-		f = open(file, 'w')
-		f.write('album.title:\t' + self.title + '\n')
-		f.write('album.artist:\t' + self.artist + '\n')
-		f.write('album.toc:\t' + self.toc + '\n')
-		for note in self.notes:
-			f.write('album.notes:\t' + note + '\n')
-		prevpref = None
-		for i in range(1, len(self.track)):
-			if self.trackartist[i]:
-				f.write('track'+`i`+'.artist:\t'+self.trackartist[i]+'\n')
-			track = self.track[i]
-			try:
-				off = string.index(track, ',')
-			except string.index_error:
-				prevpref = None
-			else:
-				if prevpref and track[:off] == prevpref:
-					track = track[off:]
-				else:
-					prevpref = track[:off]
-			f.write('track' + `i` + '.title:\t' + track + '\n')
-		f.close()
diff --git a/Lib/irix6/cdplayer.py b/Lib/irix6/cdplayer.py
deleted file mode 100644
index 5c2c95a..0000000
--- a/Lib/irix6/cdplayer.py
+++ /dev/null
@@ -1,89 +0,0 @@
-# This file implements a class which forms an interface to the .cdplayerrc
-# file that is maintained by SGI's cdplayer program.
-#
-# Usage is as follows:
-#
-# import readcd
-# r = readcd.Readcd()
-# c = Cdplayer(r.gettrackinfo())
-#
-# Now you can use c.artist, c.title and c.track[trackno] (where trackno
-# starts at 1).  When the CD is not recognized, all values will be the empty
-# string.
-# It is also possible to set the above mentioned variables to new values.
-# You can then use c.write() to write out the changed values to the
-# .cdplayerrc file.
-
-cdplayerrc = '.cdplayerrc'
-
-class Cdplayer:
-	def __init__(self, tracklist):
-		import string
-		self.artist = ''
-		self.title = ''
-		if type(tracklist) == type(''):
-			t = []
-			for i in range(2, len(tracklist), 4):
-				t.append((None, \
-					  (string.atoi(tracklist[i:i+2]), \
-					   string.atoi(tracklist[i+2:i+4]))))
-			tracklist = t
-		self.track = [None] + [''] * len(tracklist)
-		self.id = 'd' + string.zfill(len(tracklist), 2)
-		for track in tracklist:
-			start, length = track
-			self.id = self.id + string.zfill(length[0], 2) + \
-				  string.zfill(length[1], 2)
-		try:
-			import posix
-			f = open(posix.environ['HOME'] + '/' + cdplayerrc, 'r')
-		except IOError:
-			return
-		import regex
-		reg = regex.compile('^\\([^:]*\\):\t\\(.*\\)')
-		s = self.id + '.'
-		l = len(s)
-		while 1:
-			line = f.readline()
-			if line == '':
-				break
-			if line[:l] == s:
-				line = line[l:]
-				if reg.match(line) == -1:
-					print 'syntax error in ~/' + cdplayerrc
-					continue
-				name = line[reg.regs[1][0]:reg.regs[1][1]]
-				value = line[reg.regs[2][0]:reg.regs[2][1]]
-				if name == 'title':
-					self.title = value
-				elif name == 'artist':
-					self.artist = value
-				elif name[:5] == 'track':
-					trackno = string.atoi(name[6:])
-					self.track[trackno] = value
-		f.close()
-
-	def write(self):
-		import posix
-		filename = posix.environ['HOME'] + '/' + cdplayerrc
-		try:
-			old = open(filename, 'r')
-		except IOError:
-			old = open('/dev/null', 'r')
-		new = open(filename + '.new', 'w')
-		s = self.id + '.'
-		l = len(s)
-		while 1:
-			line = old.readline()
-			if line == '':
-				break
-			if line[:l] <> s:
-				new.write(line)
-		new.write(self.id + '.title:\t' + self.title + '\n')
-		new.write(self.id + '.artist:\t' + self.artist + '\n')
-		for i in range(1, len(self.track)):
-			new.write(self.id + '.track.' + `i` + ':\t' + \
-				  self.track[i] + '\n')
-		old.close()
-		new.close()
-		posix.rename(filename + '.new', filename)
diff --git a/Lib/irix6/flp.doc b/Lib/irix6/flp.doc
deleted file mode 100644
index 1a2f374..0000000
--- a/Lib/irix6/flp.doc
+++ /dev/null
@@ -1,117 +0,0 @@
-.SH
-Module flp
-.LP
-The flp module loads fl-forms from fd files, as generated
-by fdesign. The module is designed to be flexible enough to allow
-almost anything to be done with the loaded form.
-.LP
-Loadform defines 
-two types of functions: functions to parse fd files and functions to
-create the forms from the templates returned by the parse functions.
-There are fairly low-level create functions that create single objects,
-and convenience routines that create complete forms, including callbacks,
-etc.
-.LP
-The exception flp.error is raised whenever an error occurs while parsing a forms
-definition file or creating a form.
-.SH 2
-Parsing functions
-.LP
-There are two parsing functions, parse_form() and parse_forms(). They
-take the following form:
-.LP
-.ft C
-ftuple = parse_form(filename, formname)
-.br
-ftdict = parse_forms(filename)
-.IP
-Parse_form parses a single form, and returns a tuple (ftmp, otmplist).
-Ftmp is a template for a form, otmplist is a list of templates for
-objects. See below for a description of these templates.
-.IP
-Parse_forms parses all forms in an fd file. It returns a dictionary of
-(ftmp, otmplist) tuples, indexed by formname.
-.IP
-Filename is the name of the forms definition file to inspect. The functions
-appends '.fd' if needed, and use 'sys.path' to locate the file.
-.IP
-formname is the name of the form to load. This argument is mandatory,
-even if the file only contains one form.
-.LP
-The form template and object template are structures that contain all
-the information read from the fd file, in 'natural' form. A form
-template record contains the following fields:
-.IP
-.nf
-"Name", the name of the form;
-"Width", the width of the form;
-"Height", the height of the form; and
-"Numberofobjects", the number of objects in the form.
-.LP
-An object template contains the following fields:
-.IP
-.nf
-"Class", the class of object (eg. FL.BUTTON);
-"Type", the sub-class (eg. FL.NORMALBUTTON);
-"Box", a list with four members: [x, y, width, height];
-"Boxtype", the type of box (eg. FL.DOWNBOX);
-"Colors", a list with the two object colors;
-"Alignment", the label alignment (eg. FL.ALIGNLEFT); 
-"Style", the label style (eg. FL.BOLDSTYLE);
-"Lcol", the label color;
-"Label", a string containing the label;
-"Name", a string containing the name of the object;
-"Callback", a string containing the callback routine name; and
-"Argument", a string containing the callback routine extra argument.
-.SH
-Low-level create routines.
-.LP
-The three low-level creation routines are called as follows:
-.LP
-.ft C
-form = create_form(form_template)
-.IP
-Create an fl form from a form template. Returns the form created.
-.LP
-.ft C
-obj = create_object(form, obj_template)
-.IP
-Create an object in an fl form. Return the new object.
-An error is raised if the object has a callback routine.
-.SH
-High-level create routines.
-.LP
-The 'standard' way to handle forms in python is to define a class
-that contains the form and all the objects (insofar as they are named),
-and that defines all the callback functions, and use an instance of
-this class to handle the form interaction.
-Flp contains three routines that simplify handling this paradigm:
-.LP
-.ft C
-create_full_form(instance, ftuple)
-.IP
-This routine takes an instance of your form-handling class and an
-ftuple (as returned by the parsing routines) as parameters. It inserts
-the form into the instance, defines all object names and arranges that
-the callback methods are called. All the names inserted into the
-instance are the same as the names used for the objects, etc. in the
-fd file.
-.LP
-.ft C
-merge_full_form(instance, form, ftuple)
-.IP
-This function does the same as create_full_form, only it does not create
-the form itself nor the 'background box' that fdesign automatically
-adds to each form. This is useful if your class inherits a superclass
-that already defines a skeleton form (with 'OK' and 'Cancel' buttons,
-for instance), and you want to merge the new form into that existing
-form. The 'form' parameter is the form to which the new objects are
-added.
-.LP
-If you use the paradigm sketched here but need slightly more control
-over object creation there is a routine that creates a single object
-and inserts its name (and arranges for the callback routine to be
-called):
-.LP
-.ft C
-create_object_instance(instance, form, obj_template)
diff --git a/Lib/irix6/flp.py b/Lib/irix6/flp.py
deleted file mode 100644
index 14e2278..0000000
--- a/Lib/irix6/flp.py
+++ /dev/null
@@ -1,455 +0,0 @@
-#
-# flp - Module to load fl forms from fd files
-#
-# Jack Jansen, December 1991
-#
-import string
-import os
-import sys
-import FL
-
-SPLITLINE = '--------------------'
-FORMLINE = '=============== FORM ==============='
-ENDLINE = '=============================='
-
-error = 'flp.error'
-
-##################################################################
-#    Part 1 - The parsing routines                               #
-##################################################################
-
-#
-# Externally visible function. Load form.
-#
-def parse_form(filename, formname):
-    forms = checkcache(filename)
-    if forms is None:
-	forms = parse_forms(filename)
-    if forms.has_key(formname):
-	return forms[formname]
-    else:
-	raise error, 'No such form in fd file'
-
-#
-# Externally visible function. Load all forms.
-#
-def parse_forms(filename):
-    forms = checkcache(filename)
-    if forms != None: return forms
-    fp = _open_formfile(filename)
-    nforms = _parse_fd_header(fp)
-    forms = {}
-    for i in range(nforms):
-	form = _parse_fd_form(fp, None)
-	forms[form[0].Name] = form
-    writecache(filename, forms)
-    return forms
-
-#
-# Internal: see if a cached version of the file exists
-#
-MAGIC = '.fdc'
-_internal_cache = {}			# Used by frozen scripts only
-def checkcache(filename):
-    if _internal_cache.has_key(filename):
-	altforms = _internal_cache[filename]
-	return _unpack_cache(altforms)
-    import marshal
-    fp, filename = _open_formfile2(filename)
-    fp.close()
-    cachename = filename + 'c'
-    try:
-	fp = open(cachename, 'r')
-    except IOError:
-	#print 'flp: no cache file', cachename
-	return None
-    try:
-	if fp.read(4) != MAGIC:
-	    print 'flp: bad magic word in cache file', cachename
-	    return None
-	cache_mtime = rdlong(fp)
-	file_mtime = getmtime(filename)
-	if cache_mtime != file_mtime:
-	    #print 'flp: outdated cache file', cachename
-	    return None
-	#print 'flp: valid cache file', cachename
-	altforms = marshal.load(fp)
-	return _unpack_cache(altforms)
-    finally:
-	fp.close()
-
-def _unpack_cache(altforms):
-	forms = {}
-	for name in altforms.keys():
-	    altobj, altlist = altforms[name]
-	    obj = _newobj()
-	    obj.make(altobj)
-	    list = []
-	    for altobj in altlist:
-		nobj = _newobj()
-		nobj.make(altobj)
-		list.append(nobj)
-	    forms[name] = obj, list
-	return forms
-
-def rdlong(fp):
-    s = fp.read(4)
-    if len(s) != 4: return None
-    a, b, c, d = s[0], s[1], s[2], s[3]
-    return ord(a)<<24 | ord(b)<<16 | ord(c)<<8 | ord(d)
-
-def wrlong(fp, x):
-    a, b, c, d = (x>>24)&0xff, (x>>16)&0xff, (x>>8)&0xff, x&0xff
-    fp.write(chr(a) + chr(b) + chr(c) + chr(d))
-
-def getmtime(filename):
-    import os
-    from stat import ST_MTIME
-    try:
-	return os.stat(filename)[ST_MTIME]
-    except os.error:
-	return None
-
-#
-# Internal: write cached version of the form (parsing is too slow!)
-#
-def writecache(filename, forms):
-    import marshal
-    fp, filename = _open_formfile2(filename)
-    fp.close()
-    cachename = filename + 'c'
-    try:
-	fp = open(cachename, 'w')
-    except IOError:
-	print 'flp: can\'t create cache file', cachename
-	return # Never mind
-    fp.write('\0\0\0\0') # Seek back and write MAGIC when done
-    wrlong(fp, getmtime(filename))
-    altforms = _pack_cache(forms)
-    marshal.dump(altforms, fp)
-    fp.seek(0)
-    fp.write(MAGIC)
-    fp.close()
-    #print 'flp: wrote cache file', cachename
-
-#
-# External: print some statements that set up the internal cache.
-# This is for use with the "freeze" script.  You should call
-# flp.freeze(filename) for all forms used by the script, and collect
-# the output on a file in a module file named "frozenforms.py".  Then
-# in the main program of the script import frozenforms.
-# (Don't forget to take this out when using the unfrozen version of
-# the script!)
-#
-def freeze(filename):
-    forms = parse_forms(filename)
-    altforms = _pack_cache(forms)
-    print 'import flp'
-    print 'flp._internal_cache[', `filename`, '] =', altforms
-
-#
-# Internal: create the data structure to be placed in the cache
-#
-def _pack_cache(forms):
-    altforms = {}
-    for name in forms.keys():
-	obj, list = forms[name]
-	altobj = obj.__dict__
-	altlist = []
-	for obj in list: altlist.append(obj.__dict__)
-	altforms[name] = altobj, altlist
-    return altforms
-
-#
-# Internal: Locate form file (using PYTHONPATH) and open file
-#
-def _open_formfile(filename):
-    return _open_formfile2(filename)[0]
-
-def _open_formfile2(filename):
-    if filename[-3:] <> '.fd':
-	filename = filename + '.fd'
-    if filename[0] == '/':
-	try:
-	    fp = open(filename,'r')
-	except IOError:
-	    fp = None
-    else:
-	for pc in sys.path:
-	    pn = os.path.join(pc, filename)
-	    try:
-		fp = open(pn, 'r')
-		filename = pn
-		break
-	    except IOError:
-		fp = None
-    if fp == None:
-	raise error, 'Cannot find forms file ' + filename
-    return fp, filename
-
-#
-# Internal: parse the fd file header, return number of forms
-#
-def _parse_fd_header(file):
-    # First read the magic header line
-    datum = _parse_1_line(file)
-    if datum <> ('Magic', 12321):
-	raise error, 'Not a forms definition file'
-    # Now skip until we know number of forms
-    while 1:
-	datum = _parse_1_line(file)
-	if type(datum) == type(()) and datum[0] == 'Numberofforms':
-	    break
-    return datum[1]
-#
-# Internal: parse fd form, or skip if name doesn't match.
-# the special value None means 'allways parse it'.
-#
-def _parse_fd_form(file, name):
-    datum = _parse_1_line(file)
-    if datum <> FORMLINE:
-	raise error, 'Missing === FORM === line'
-    form = _parse_object(file)
-    if form.Name == name or name == None:
-	objs = []
-	for j in range(form.Numberofobjects):
-	    obj = _parse_object(file)
-	    objs.append(obj)
-	return (form, objs)
-    else:
-	for j in range(form.Numberofobjects):
-	    _skip_object(file)
-    return None
-
-#
-# Internal class: a convient place to store object info fields
-#
-class _newobj:
-    def add(self, name, value):
-	self.__dict__[name] = value
-    def make(self, dict):
-	for name in dict.keys():
-	    self.add(name, dict[name])
-
-#
-# Internal parsing routines.
-#
-def _parse_string(str):
-    if '\\' in str:
-	s = '\'' + str + '\''
-	try:
-	    return eval(s)
-	except:
-	    pass
-    return str
-
-def _parse_num(str):
-    return eval(str)
-
-def _parse_numlist(str):
-    slist = string.split(str)
-    nlist = []
-    for i in slist:
-	nlist.append(_parse_num(i))
-    return nlist
-
-# This dictionary maps item names to parsing routines.
-# If no routine is given '_parse_num' is default.
-_parse_func = { \
-	'Name':		_parse_string, \
-	'Box':		_parse_numlist, \
-	'Colors':	_parse_numlist, \
-	'Label':	_parse_string, \
-	'Name':		_parse_string, \
-	'Callback':	_parse_string, \
-	'Argument':	_parse_string }
-
-# This function parses a line, and returns either
-# a string or a tuple (name,value)
-
-import regex
-prog = regex.compile('^\([^:]*\): *\(.*\)')
-
-def _parse_line(line):
-    if prog.match(line) < 0:
-	return line
-    a = prog.regs
-    name = line[:a[1][1]]
-    if name[0] == 'N':
-	    name = string.joinfields(string.split(name),'')
-	    name = string.lower(name)
-    name = string.upper(name[0]) + name[1:]
-    value = line[a[2][0]:]
-    try:
-	pf = _parse_func[name]
-    except KeyError:
-	pf = _parse_num
-    value = pf(value)
-    return (name, value)
-
-def _readline(file):
-    line = file.readline()
-    if not line:
-    	raise EOFError
-    return line[:-1]
-	
-def _parse_1_line(file):
-    line = _readline(file)
-    while line == '':
-	line = _readline(file)
-    return _parse_line(line)
-
-def _skip_object(file):
-    line = ''
-    while not line in (SPLITLINE, FORMLINE, ENDLINE):
-	pos = file.tell()
-	line = _readline(file)
-    if line == FORMLINE:
-	file.seek(pos)
-
-def _parse_object(file):
-    obj = _newobj()
-    while 1:
-	pos = file.tell()
-	datum = _parse_1_line(file)
-	if datum in (SPLITLINE, FORMLINE, ENDLINE):
-	    if datum == FORMLINE:
-		file.seek(pos)
-	    return obj
-	if type(datum) <> type(()) or len(datum) <> 2:
-	    raise error, 'Parse error, illegal line in object: '+datum
-	obj.add(datum[0], datum[1])
-
-#################################################################
-#   Part 2 - High-level object/form creation routines            #
-#################################################################
-
-#
-# External - Create a form an link to an instance variable.
-#
-def create_full_form(inst, (fdata, odatalist)):
-    form = create_form(fdata)
-    exec 'inst.'+fdata.Name+' = form\n'
-    for odata in odatalist:
-	create_object_instance(inst, form, odata)
-
-#
-# External - Merge a form into an existing form in an instance
-# variable.
-#
-def merge_full_form(inst, form, (fdata, odatalist)):
-    exec 'inst.'+fdata.Name+' = form\n'
-    if odatalist[0].Class <> FL.BOX:
-	raise error, 'merge_full_form() expects FL.BOX as first obj'
-    for odata in odatalist[1:]:
-	create_object_instance(inst, form, odata)
-
-
-#################################################################
-#   Part 3 - Low-level object/form creation routines            #
-#################################################################
-
-#
-# External Create_form - Create form from parameters
-#
-def create_form(fdata):
-    import fl
-    return fl.make_form(FL.NO_BOX, fdata.Width, fdata.Height)
-
-#
-# External create_object - Create an object. Make sure there are
-# no callbacks. Returns the object created.
-#
-def create_object(form, odata):
-    obj = _create_object(form, odata)
-    if odata.Callback:
-	raise error, 'Creating free object with callback'
-    return obj
-#
-# External create_object_instance - Create object in an instance.
-#
-def create_object_instance(inst, form, odata):
-    obj = _create_object(form, odata)
-    if odata.Callback:
-	cbfunc = eval('inst.'+odata.Callback)
-	obj.set_call_back(cbfunc, odata.Argument)
-    if odata.Name:
-	exec 'inst.' + odata.Name + ' = obj\n'
-#
-# Internal _create_object: Create the object and fill options
-#
-def _create_object(form, odata):
-    crfunc = _select_crfunc(form, odata.Class)
-    obj = crfunc(odata.Type, odata.Box[0], odata.Box[1], odata.Box[2], \
-	    odata.Box[3], odata.Label)
-    if not odata.Class in (FL.BEGIN_GROUP, FL.END_GROUP):
-	obj.boxtype = odata.Boxtype
-	obj.col1 = odata.Colors[0]
-	obj.col2 = odata.Colors[1]
-	obj.align = odata.Alignment
-	obj.lstyle = odata.Style
-	obj.lsize = odata.Size
-	obj.lcol = odata.Lcol
-    return obj
-#
-# Internal crfunc: helper function that returns correct create function
-#
-def _select_crfunc(fm, cl):
-    if cl == FL.BEGIN_GROUP: return fm.bgn_group
-    elif cl == FL.END_GROUP: return fm.end_group
-    elif cl == FL.BITMAP: return fm.add_bitmap
-    elif cl == FL.BOX: return fm.add_box
-    elif cl == FL.BROWSER: return fm.add_browser
-    elif cl == FL.BUTTON: return fm.add_button
-    elif cl == FL.CHART: return fm.add_chart
-    elif cl == FL.CHOICE: return fm.add_choice
-    elif cl == FL.CLOCK: return fm.add_clock
-    elif cl == FL.COUNTER: return fm.add_counter
-    elif cl == FL.DIAL: return fm.add_dial
-    elif cl == FL.FREE: return fm.add_free
-    elif cl == FL.INPUT: return fm.add_input
-    elif cl == FL.LIGHTBUTTON: return fm.add_lightbutton
-    elif cl == FL.MENU: return fm.add_menu
-    elif cl == FL.POSITIONER: return fm.add_positioner
-    elif cl == FL.ROUNDBUTTON: return fm.add_roundbutton
-    elif cl == FL.SLIDER: return fm.add_slider
-    elif cl == FL.VALSLIDER: return fm.add_valslider
-    elif cl == FL.TEXT: return fm.add_text
-    elif cl == FL.TIMER: return fm.add_timer
-    else:
-	raise error, 'Unknown object type: ' + `cl`
-
-
-def test():
-    import time
-    t0 = time.time()
-    if len(sys.argv) == 2:
-	forms = parse_forms(sys.argv[1])
-	t1 = time.time()
-	print 'parse time:', 0.001*(t1-t0), 'sec.'
-	keys = forms.keys()
-	keys.sort()
-	for i in keys:
-	    _printform(forms[i])
-    elif len(sys.argv) == 3:
-	form = parse_form(sys.argv[1], sys.argv[2])
-	t1 = time.time()
-	print 'parse time:', round(t1-t0, 3), 'sec.'
-	_printform(form)
-    else:
-	print 'Usage: test fdfile [form]'
-
-def _printform(form):
-    f = form[0]
-    objs = form[1]
-    print 'Form ', f.Name, ', size: ', f.Width, f.Height, ' Nobj ', f.Numberofobjects
-    for i in objs:
-	print '  Obj ', i.Name, ' type ', i.Class, i.Type
-	print '    Box ', i.Box, ' btype ', i.Boxtype
-	print '    Label ', i.Label, ' size/style/col/align ', i.Size,i.Style, i.Lcol, i.Alignment
-	print '    cols ', i.Colors
-	print '    cback ', i.Callback, i.Argument
-
-# Local variables:
-# py-indent-offset: 4
-# end:
diff --git a/Lib/irix6/jpeg.py b/Lib/irix6/jpeg.py
deleted file mode 100644
index 85d6d83..0000000
--- a/Lib/irix6/jpeg.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# Implement 'jpeg' interface using SGI's compression library
-
-# XXX Options 'smooth' and 'optimize' are ignored.
-
-# XXX It appears that compressing grayscale images doesn't work right;
-# XXX the resulting file causes weirdness.
-
-error = 'jpeg.error' # Exception
-
-options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0}
-
-comp = None
-decomp = None
-
-def compress(imgdata, width, height, bytesperpixel):
-	global comp
-	import cl, CL
-	if comp is None: comp = cl.OpenCompressor(CL.JPEG)
-	if bytesperpixel == 1:
-		format = CL.GRAYSCALE
-	elif bytesperpixel == 4:
-		format = CL.RGBX
-	if options['forcegray']:
-		iformat = CL.GRAYSCALE
-	else:
-		iformat = CL.YUV
-	# XXX How to support 'optimize'?
-	params = [CL.IMAGE_WIDTH, width, CL.IMAGE_HEIGHT, height, \
-		  CL.ORIGINAL_FORMAT, format, \
-		  CL.ORIENTATION, CL.BOTTOM_UP, \
-		  CL.QUALITY_FACTOR, options['quality'], \
-		  CL.INTERNAL_FORMAT, iformat, \
-		 ]
-	comp.SetParams(params)
-	jpegdata = comp.Compress(1, imgdata)
-	return jpegdata
-
-def decompress(jpegdata):
-	global decomp
-	import cl, CL
-	if decomp is None: decomp = cl.OpenDecompressor(CL.JPEG)
-	headersize = decomp.ReadHeader(jpegdata)
-	params = [CL.IMAGE_WIDTH, 0, CL.IMAGE_HEIGHT, 0, CL.INTERNAL_FORMAT, 0]
-	decomp.GetParams(params)
-	width, height, format = params[1], params[3], params[5]
-	if format == CL.GRAYSCALE or options['forcegray']:
-		format = CL.GRAYSCALE
-		bytesperpixel = 1
-	else:
-		format = CL.RGBX
-		bytesperpixel = 4
-	# XXX How to support 'smooth'?
-	params = [CL.ORIGINAL_FORMAT, format, \
-		  CL.ORIENTATION, CL.BOTTOM_UP, \
-		  CL.FRAME_BUFFER_SIZE, width*height*bytesperpixel]
-	decomp.SetParams(params)
-	imgdata = decomp.Decompress(1, jpegdata)
-	return imgdata, width, height, bytesperpixel
-
-def setoption(name, value):
-	if type(value) <> type(0):
-		raise TypeError, 'jpeg.setoption: numeric options only'
-	if name == 'forcegrey':
-		name = 'forcegray'
-	if not options.has_key(name):
-		raise KeyError, 'jpeg.setoption: unknown option name'
-	options[name] = int(value)
-
-def test():
-	import sys
-	if sys.argv[1:2] == ['-g']:
-		del sys.argv[1]
-		setoption('forcegray', 1)
-	if not sys.argv[1:]:
-		sys.argv.append('/usr/local/images/data/jpg/asterix.jpg')
-	for file in sys.argv[1:]:
-		show(file)
-
-def show(file):
-	import gl, GL, DEVICE
-	jpegdata = open(file, 'r').read()
-	imgdata, width, height, bytesperpixel = decompress(jpegdata)
-	gl.foreground()
-	gl.prefsize(width, height)
-	win = gl.winopen(file)
-	if bytesperpixel == 1:
-		gl.cmode()
-		gl.pixmode(GL.PM_SIZE, 8)
-		gl.gconfig()
-		for i in range(256):
-			gl.mapcolor(i, i, i, i)
-	else:
-		gl.RGBmode()
-		gl.pixmode(GL.PM_SIZE, 32)
-		gl.gconfig()
-	gl.qdevice(DEVICE.REDRAW)
-	gl.qdevice(DEVICE.ESCKEY)
-	gl.qdevice(DEVICE.WINQUIT)
-	gl.qdevice(DEVICE.WINSHUT)
-	gl.lrectwrite(0, 0, width-1, height-1, imgdata)
-	while 1:
-		dev, val = gl.qread()
-		if dev in (DEVICE.ESCKEY, DEVICE.WINSHUT, DEVICE.WINQUIT):
-			break
-		if dev == DEVICE.REDRAW:
-			gl.lrectwrite(0, 0, width-1, height-1, imgdata)
-	gl.winclose(win)
-	# Now test the compression and write the result to a fixed filename
-	newjpegdata = compress(imgdata, width, height, bytesperpixel)
-	open('/tmp/j.jpg', 'w').write(newjpegdata)
diff --git a/Lib/irix6/panel.py b/Lib/irix6/panel.py
deleted file mode 100644
index 2c0365c..0000000
--- a/Lib/irix6/panel.py
+++ /dev/null
@@ -1,281 +0,0 @@
-# Module 'panel'
-#
-# Support for the Panel library.
-# Uses built-in module 'pnl'.
-# Applciations should use 'panel.function' instead of 'pnl.function';
-# most 'pnl' functions are transparently exported by 'panel',
-# but dopanel() is overridden and you have to use this version
-# if you want to use callbacks.
-
-
-import pnl
-
-
-debug = 0
-
-
-# Test if an object is a list.
-#
-def is_list(x):
-	return type(x) == type([])
-
-
-# Reverse a list.
-#
-def reverse(list):
-	res = []
-	for item in list:
-		res.insert(0, item)
-	return res
-
-
-# Get an attribute of a list, which may itself be another list.
-# Don't use 'prop' for name.
-#
-def getattrlist(list, name):
-	for item in list:
-		if item and is_list(item) and item[0] == name:
-			return item[1:]
-	return []
-
-
-# Get a property of a list, which may itself be another list.
-#
-def getproplist(list, name):
-	for item in list:
-		if item and is_list(item) and item[0] == 'prop':
-			if len(item) > 1 and item[1] == name:
-				return item[2:]
-	return []
-
-
-# Test if an actuator description contains the property 'end-of-group'
-#
-def is_endgroup(list):
-	x = getproplist(list, 'end-of-group')
-	return (x and x[0] == '#t')
-
-
-# Neatly display an actuator definition given as S-expression
-# the prefix string is printed before each line.
-#
-def show_actuator(prefix, a):
-	for item in a:
-		if not is_list(item):
-			print prefix, item
-		elif item and item[0] == 'al':
-			print prefix, 'Subactuator list:'
-			for a in item[1:]:
-				show_actuator(prefix + '    ', a)
-		elif len(item) == 2:
-			print prefix, item[0], '=>', item[1]
-		elif len(item) == 3 and item[0] == 'prop':
-			print prefix, 'Prop', item[1], '=>',
-			print item[2]
-		else:
-			print prefix, '?', item
-
-
-# Neatly display a panel.
-#
-def show_panel(prefix, p):
-	for item in p:
-		if not is_list(item):
-			print prefix, item
-		elif item and item[0] == 'al':
-			print prefix, 'Actuator list:'
-			for a in item[1:]:
-				show_actuator(prefix + '    ', a)
-		elif len(item) == 2:
-			print prefix, item[0], '=>', item[1]
-		elif len(item) == 3 and item[0] == 'prop':
-			print prefix, 'Prop', item[1], '=>',
-			print item[2]
-		else:
-			print prefix, '?', item
-
-
-# Exception raised by build_actuator or build_panel.
-#
-panel_error = 'panel error'
-
-
-# Dummy callback used to initialize the callbacks.
-#
-def dummy_callback(arg):
-	pass
-
-
-# Assign attributes to members of the target.
-# Attribute names in exclist are ignored.
-# The member name is the attribute name prefixed with the prefix.
-#
-def assign_members(target, attrlist, exclist, prefix):
-	for item in attrlist:
-		if is_list(item) and len(item) == 2 and item[0] not in exclist:
-			name, value = item[0], item[1]
-			ok = 1
-			if value[0] in '-0123456789':
-				value = eval(value)
-			elif value[0] == '"':
-				value = value[1:-1]
-			elif value == 'move-then-resize':
-				# Strange default set by Panel Editor...
-				ok = 0
-			else:
-				print 'unknown value', value, 'for', name
-				ok = 0
-			if ok:
-				lhs = 'target.' + prefix + name
-				stmt = lhs + '=' + `value`
-				if debug: print 'exec', stmt
-				try:
-					exec stmt + '\n'
-				except KeyboardInterrupt: # Don't catch this!
-					raise KeyboardInterrupt
-				except:
-					print 'assign failed:', stmt
-
-
-# Build a real actuator from an actuator descriptior.
-# Return a pair (actuator, name).
-#
-def build_actuator(descr):
-	namelist = getattrlist(descr, 'name')
-	if namelist:
-		# Assume it is a string
-		actuatorname = namelist[0][1:-1]
-	else:
-		actuatorname = ''
-	type = descr[0]
-	if type[:4] == 'pnl_': type = type[4:]
-	act = pnl.mkact(type)
-	act.downfunc = act.activefunc = act.upfunc = dummy_callback
-	#
-	assign_members(act, descr[1:], ['al', 'data', 'name'], '')
-	#
-	# Treat actuator-specific data
-	#
-	datalist = getattrlist(descr, 'data')
-	prefix = ''
-	if type[-4:] == 'puck':
-		prefix = 'puck_'
-	elif type == 'mouse':
-		prefix = 'mouse_'
-	assign_members(act, datalist, [], prefix)
-	#
-	return act, actuatorname
-
-
-# Build all sub-actuators and add them to the super-actuator.
-# The super-actuator must already have been added to the panel.
-# Sub-actuators with defined names are added as members to the panel
-# so they can be referenced as p.name.
-#
-# Note: I have no idea how panel.endgroup() works when applied
-# to a sub-actuator.
-#
-def build_subactuators(panel, super_act, al):
-	#
-	# This is nearly the same loop as below in build_panel(),
-	# except a call is made to addsubact() instead of addact().
-	#
-	for a in al:
-		act, name = build_actuator(a)
-		act.addsubact(super_act)
-		if name:
-			stmt = 'panel.' + name + ' = act'
-			if debug: print 'exec', stmt
-			exec stmt + '\n'
-		if is_endgroup(a):
-			panel.endgroup()
-		sub_al = getattrlist(a, 'al')
-		if sub_al:
-			build_subactuators(panel, act, sub_al)
-	#
-	# Fix the actuator to which whe just added subactuators.
-	# This can't hurt (I hope) and is needed for the scroll actuator.
-	#
-	super_act.fixact()
-
-
-# Build a real panel from a panel definition.
-# Return a panel object p, where for each named actuator a, p.name is a
-# reference to a.
-#
-def build_panel(descr):
-	#
-	# Sanity check
-	#
-	if (not descr) or descr[0] <> 'panel':
-		raise panel_error, 'panel description must start with "panel"'
-	#
-	if debug: show_panel('', descr)
-	#
-	# Create an empty panel
-	#
-	panel = pnl.mkpanel()
-	#
-	# Assign panel attributes
-	#
-	assign_members(panel, descr[1:], ['al'], '')
-	#
-	# Look for actuator list
-	#
-	al = getattrlist(descr, 'al')
-	#
-	# The order in which actuators are created is important
-	# because of the endgroup() operator.
-	# Unfortunately the Panel Editor outputs the actuator list
-	# in reverse order, so we reverse it here.
-	#
-	al = reverse(al)
-	#
-	for a in al:
-		act, name = build_actuator(a)
-		act.addact(panel)
-		if name:
-			stmt = 'panel.' + name + ' = act'
-			exec stmt + '\n'
-		if is_endgroup(a):
-			panel.endgroup()
-		sub_al = getattrlist(a, 'al')
-		if sub_al:
-			build_subactuators(panel, act, sub_al)
-	#
-	return panel
-
-
-# Wrapper around pnl.dopanel() which calls call-back functions.
-#
-def my_dopanel():
-	# Extract only the first 4 elements to allow for future expansion
-	a, down, active, up = pnl.dopanel()[:4]
-	if down:
-		down.downfunc(down)
-	if active:
-		active.activefunc(active)
-	if up:
-		up.upfunc(up)
-	return a
-
-
-# Create one or more panels from a description file (S-expressions)
-# generated by the Panel Editor.
-# 
-def defpanellist(file):
-	import panelparser
-	descrlist = panelparser.parse_file(open(file, 'r'))
-	panellist = []
-	for descr in descrlist:
-		panellist.append(build_panel(descr))
-	return panellist
-
-
-# Import everything from built-in method pnl, so the user can always
-# use panel.foo() instead of pnl.foo().
-# This gives *no* performance penalty once this module is imported.
-#
-from pnl import *			# for export
-
-dopanel = my_dopanel			# override pnl.dopanel
diff --git a/Lib/irix6/panelparser.py b/Lib/irix6/panelparser.py
deleted file mode 100644
index 1b069fa..0000000
--- a/Lib/irix6/panelparser.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# Module 'parser'
-#
-# Parse S-expressions output by the Panel Editor
-# (which is written in Scheme so it can't help writing S-expressions).
-#
-# See notes at end of file.
-
-
-whitespace = ' \t\n'
-operators = '()\''
-separators = operators + whitespace + ';' + '"'
-
-
-# Tokenize a string.
-# Return a list of tokens (strings).
-#
-def tokenize_string(s):
-	tokens = []
-	while s:
-		c = s[:1]
-		if c in whitespace:
-			s = s[1:]
-		elif c == ';':
-			s = ''
-		elif c == '"':
-			n = len(s)
-			i = 1
-			while i < n:
-				c = s[i]
-				i = i+1
-				if c == '"': break
-				if c == '\\': i = i+1
-			tokens.append(s[:i])
-			s = s[i:]
-		elif c in operators:
-			tokens.append(c)
-			s = s[1:]
-		else:
-			n = len(s)
-			i = 1
-			while i < n:
-				if s[i] in separators: break
-				i = i+1
-			tokens.append(s[:i])
-			s = s[i:]
-	return tokens
-
-
-# Tokenize a whole file (given as file object, not as file name).
-# Return a list of tokens (strings).
-#
-def tokenize_file(fp):
-	tokens = []
-	while 1:
-		line = fp.readline()
-		if not line: break
-		tokens = tokens + tokenize_string(line)
-	return tokens
-
-
-# Exception raised by parse_exr.
-#
-syntax_error = 'syntax error'
-
-
-# Parse an S-expression.
-# Input is a list of tokens as returned by tokenize_*().
-# Return a pair (expr, tokens)
-# where expr is a list representing the s-expression,
-# and tokens contains the remaining tokens.
-# May raise syntax_error.
-#
-def parse_expr(tokens):
-	if (not tokens) or tokens[0] <> '(':
-		raise syntax_error, 'expected "("'
-	tokens = tokens[1:]
-	expr = []
-	while 1:
-		if not tokens:
-			raise syntax_error, 'missing ")"'
-		if tokens[0] == ')':
-			return expr, tokens[1:]
-		elif tokens[0] == '(':
-			subexpr, tokens = parse_expr(tokens)
-			expr.append(subexpr)
-		else:
-			expr.append(tokens[0])
-			tokens = tokens[1:]
-
-
-# Parse a file (given as file object, not as file name).
-# Return a list of parsed S-expressions found at the top level.
-#
-def parse_file(fp):
-	tokens = tokenize_file(fp)
-	exprlist = []
-	while tokens:
-		expr, tokens = parse_expr(tokens)
-		exprlist.append(expr)
-	return exprlist
-
-
-# EXAMPLE:
-#
-# The input
-#	'(hip (hop hur-ray))'
-#
-# passed to tokenize_string() returns the token list
-#	['(', 'hip', '(', 'hop', 'hur-ray', ')', ')']
-#
-# When this is passed to parse_expr() it returns the expression
-#	['hip', ['hop', 'hur-ray']]
-# plus an empty token list (because there are no tokens left.
-#
-# When a file containing the example is passed to parse_file() it returns
-# a list whose only element is the output of parse_expr() above:
-#	[['hip', ['hop', 'hur-ray']]]
-
-
-# TOKENIZING:
-#
-# Comments start with semicolon (;) and continue till the end of the line.
-#
-# Tokens are separated by whitespace, except the following characters
-# always form a separate token (outside strings):
-#	( ) '
-# Strings are enclosed in double quotes (") and backslash (\) is used
-# as escape character in strings.
diff --git a/Lib/irix6/readcd.doc b/Lib/irix6/readcd.doc
deleted file mode 100644
index 1be549c..0000000
--- a/Lib/irix6/readcd.doc
+++ /dev/null
@@ -1,104 +0,0 @@
-Interface to CD-ROM player.
-
-This module implements an interface to the built-in cd module.  The
-intention is to provide a more user-friendly interface than the
-built-in module.
-
-The module defines a class Readcd with several methods.  The
-initialization of the class will try to open the CD player.  This
-means that initialization will fail if the CD player is already in
-use.  A RuntimeError will be raised by the cd module in that case.
-
-The way to work with this module is as follows.  The user specifies
-the parts of the CD that are to be read and he specifies callback
-functions which are to be called by the system.  At some point he can
-tell the system to play.  The specified parts of the CD will then be
-read and the callbacks will be called.
-
-Initialization.
-===============
-
-r = readcd.Readcd([cd-player [, mode]])
-
-The optional arguments are the name of the CD device and the mode.
-When "mode" is not specified, it defaults to 'r' (which is the only
-possible value); when "cd-player" also isn't specified, it defaults
-to "None" which indicates the default CD player.
-
-Methods.
-========
-
-eject() -- Eject the CD from the player.
-
-reset() -- Reset the list of data stretches to be played.
-
-appendtrack(track) -- Append the specified track to the list of music
-stretches.
-
-appendstretch(first, last) -- Append the stretch from "first" to "last"
-to the list of music stretches.  Both "first" and "last" can be in one
-of four forms.  "None": for "first", the beginning of the CD, for
-"last" the end of the CD; a single integer: a track number--playing
-starts at the beginning of the track or ends at the end of the
-specified track; a three-tuple: the absolute time from the start of
-the CD in minutes, seconds, frames; a four-tuple: track number and
-relative time within the track in minutes, seconds, frames.
-
-settracks(tracklist) -- The argument is a list of integers.  The list
-of stretches is set to argument list.  The old list is discarded.
-
-setcallback(type, func, arg) -- Set a callback function for "type".
-The function will be called as func(arg, type, data) where "arg" is
-the third argument of setcallback, "type" is the type of callback,
-"data" is type-dependent data.  See the CDsetcallback(3) manual page
-for more information.  The possible "type" arguments are defined in
-the CD module.
-
-removecallback(type) -- Remove the callback for "type".
-
-gettrackinfo([tracklist]) -- Return a list of tuples.  Each tuple
-consists of start and length information of a track.  The start and
-length information consist of three-tuples with minutes, seconds and
-frames.  The optional tracklist argument gives a list of interesting
-track numbers.  If no tracklist is specified, information about all
-tracks is returned.
-
-getstatus() -- Return the status information of the CD.
-
-play() -- Play the preprogrammed stretches of music from the CD.  When
-nothing was programmed, the whole CD is played.
-
-Specifying stretches.
-=====================
-
-There are three methods available to specify a stretch of music to be
-played.  The easiest way is to use "settracklist(tracklist)" with which
-a list of tracks can be specified.  "settracklist(tracklist)" is
-equivalent to the sequence
-	reset()
-	for track in tracklist:
-		appendtrack(track)
-
-The next method is "appendtrack(track)" with which a whole track can be
-added to the list of music to be played.  "appendtrack(track)" is
-equivalent to "appendstretch(track, track)".
-
-The most complete method is "appendstretch(first, last)".  Using this
-method, it is possible to specify any stretch of music.
-
-When two consecutive tracks are played, it is possible to choose
-whether the pause that may be between the tracks is played as well or
-whether the pause should be skipped.  When the end of a stretch is
-specified using a track number and the next stretch starts at the
-beginning of the following track and that was also specified using the
-track number (that is, both were specified as integers, not as tuples),
-the pause is played.  When either value was specified using absolute
-time or track-relative time (that is, as three-tuple or as
-four-tuple), the pause will not be played.
-
-Errors.
-=======
-
-When an error occurs, an exception will be raised.  Depending on where
-the error occurs, the exception may either be "readcd.Error" or
-"RuntimeError".
diff --git a/Lib/irix6/readcd.py b/Lib/irix6/readcd.py
deleted file mode 100644
index 5c4b824..0000000
--- a/Lib/irix6/readcd.py
+++ /dev/null
@@ -1,242 +0,0 @@
-# Class interface to the CD module.
-
-import cd, CD
-
-Error = 'Readcd.Error'
-_Stop = 'Readcd.Stop'
-
-def _doatime(self, cb_type, data):
-	if ((data[0] * 60) + data[1]) * 75 + data[2] > self.end:
-##		print 'done with list entry',`self.listindex`
-		raise _Stop
-	func, arg = self.callbacks[cb_type]
-	if func:
-		func(arg, cb_type, data)
-
-def _dopnum(self, cb_type, data):
-	if data > self.end:
-##		print 'done with list entry',`self.listindex`
-		raise _Stop
-	func, arg = self.callbacks[cb_type]
-	if func:
-		func(arg, cb_type, data)
-
-class Readcd:
-	def __init__(self, *arg):
-		if len(arg) == 0:
-			self.player = cd.open()
-		elif len(arg) == 1:
-			self.player = cd.open(arg[0])
-		elif len(arg) == 2:
-			self.player = cd.open(arg[0], arg[1])
-		else:
-			raise Error, 'bad __init__ call'
-		self.list = []
-		self.callbacks = [(None, None)] * 8
-		self.parser = cd.createparser()
-		self.playing = 0
-		self.end = 0
-		self.status = None
-		self.trackinfo = None
-
-	def eject(self):
-		self.player.eject()
-		self.list = []
-		self.end = 0
-		self.listindex = 0
-		self.status = None
-		self.trackinfo = None
-		if self.playing:
-##			print 'stop playing from eject'
-			raise _Stop
-
-	def pmsf2msf(self, track, min, sec, frame):
-		if not self.status:
-			self.cachestatus()
-		if track < self.status[5] or track > self.status[6]:
-			raise Error, 'track number out of range'
-		if not self.trackinfo:
-			self.cacheinfo()
-		start, total = self.trackinfo[track]
-		start = ((start[0] * 60) + start[1]) * 75 + start[2]
-		total = ((total[0] * 60) + total[1]) * 75 + total[2]
-		block = ((min * 60) + sec) * 75 + frame
-		if block > total:
-			raise Error, 'out of range'
-		block = start + block
-		min, block = divmod(block, 75*60)
-		sec, frame = divmod(block, 75)
-		return min, sec, frame
-
-	def reset(self):
-		self.list = []
-
-	def appendtrack(self, track):
-		self.appendstretch(track, track)
-				
-	def appendstretch(self, start, end):
-		if not self.status:
-			self.cachestatus()
-		if not start:
-			start = 1
-		if not end:
-			end = self.status[6]
-		if type(end) == type(0):
-			if end < self.status[5] or end > self.status[6]:
-				raise Error, 'range error'
-		else:
-			l = len(end)
-			if l == 4:
-				prog, min, sec, frame = end
-				if prog < self.status[5] or prog > self.status[6]:
-					raise Error, 'range error'
-				end = self.pmsf2msf(prog, min, sec, frame)
-			elif l <> 3:
-				raise Error, 'syntax error'
-		if type(start) == type(0):
-			if start < self.status[5] or start > self.status[6]:
-				raise Error, 'range error'
-			if len(self.list) > 0:
-				s, e = self.list[-1]
-				if type(e) == type(0):
-					if start == e+1:
-						start = s
-						del self.list[-1]
-		else:
-			l = len(start)
-			if l == 4:
-				prog, min, sec, frame = start
-				if prog < self.status[5] or prog > self.status[6]:
-					raise Error, 'range error'
-				start = self.pmsf2msf(prog, min, sec, frame)
-			elif l <> 3:
-				raise Error, 'syntax error'
-		self.list.append((start, end))
-
-	def settracks(self, list):
-		self.list = []
-		for track in list:
-			self.appendtrack(track)
-
-	def setcallback(self, cb_type, func, arg):
-		if cb_type < 0 or cb_type >= 8:
-			raise Error, 'type out of range'
-		self.callbacks[cb_type] = (func, arg)
-		if self.playing:
-			start, end = self.list[self.listindex]
-			if type(end) == type(0):
-				if cb_type <> CD.PNUM:
-					self.parser.setcallback(cb_type, func, arg)
-			else:
-				if cb_type <> CD.ATIME:
-					self.parser.setcallback(cb_type, func, arg)
-
-	def removecallback(self, cb_type):
-		if cb_type < 0 or cb_type >= 8:
-			raise Error, 'type out of range'
-		self.callbacks[cb_type] = (None, None)
-		if self.playing:
-			start, end = self.list[self.listindex]
-			if type(end) == type(0):
-				if cb_type <> CD.PNUM:
-					self.parser.removecallback(cb_type)
-			else:
-				if cb_type <> CD.ATIME:
-					self.parser.removecallback(cb_type)
-
-	def gettrackinfo(self, *arg):
-		if not self.status:
-			self.cachestatus()
-		if not self.trackinfo:
-			self.cacheinfo()
-		if len(arg) == 0:
-			return self.trackinfo[self.status[5]:self.status[6]+1]
-		result = []
-		for i in arg:
-			if i < self.status[5] or i > self.status[6]:
-				raise Error, 'range error'
-			result.append(self.trackinfo[i])
-		return result
-
-	def cacheinfo(self):
-		if not self.status:
-			self.cachestatus()
-		self.trackinfo = []
-		for i in range(self.status[5]):
-			self.trackinfo.append(None)
-		for i in range(self.status[5], self.status[6]+1):
-			self.trackinfo.append(self.player.gettrackinfo(i))
-
-	def cachestatus(self):
-		self.status = self.player.getstatus()
-		if self.status[0] == CD.NODISC:
-			self.status = None
-			raise Error, 'no disc in player'
-
-	def getstatus(self):
-		return self.player.getstatus()
-
-	def play(self):
-		if not self.status:
-			self.cachestatus()
-		size = self.player.bestreadsize()
-		self.listindex = 0
-		self.playing = 0
-		for i in range(8):
-			func, arg = self.callbacks[i]
-			if func:
-				self.parser.setcallback(i, func, arg)
-			else:
-				self.parser.removecallback(i)
-		if len(self.list) == 0:
-			for i in range(self.status[5], self.status[6]+1):
-				self.appendtrack(i)
-		try:
-			while 1:
-				if not self.playing:
-					if self.listindex >= len(self.list):
-						return
-					start, end = self.list[self.listindex]
-					if type(start) == type(0):
-						dummy = self.player.seektrack(
-							start)
-					else:
-						min, sec, frame = start
-						dummy = self.player.seek(
-							min, sec, frame)
-					if type(end) == type(0):
-						self.parser.setcallback(
-							CD.PNUM, _dopnum, self)
-						self.end = end
-						func, arg = \
-						      self.callbacks[CD.ATIME]
-						if func:
-							self.parser.setcallback(CD.ATIME, func, arg)
-						else:
-							self.parser.removecallback(CD.ATIME)
-					else:
-						min, sec, frame = end
-						self.parser.setcallback(
-							CD.ATIME, _doatime,
-							self)
-						self.end = (min * 60 + sec) * \
-							   75 + frame
-						func, arg = \
-						      self.callbacks[CD.PNUM]
-						if func:
-							self.parser.setcallback(CD.PNUM, func, arg)
-						else:
-							self.parser.removecallback(CD.PNUM)
-					self.playing = 1
-				data = self.player.readda(size)
-				if data == '':
-					self.playing = 0
-					self.listindex = self.listindex + 1
-					continue
-				try:
-					self.parser.parseframe(data)
-				except _Stop:
-					self.playing = 0
-					self.listindex = self.listindex + 1
-		finally:
-			self.playing = 0
diff --git a/Lib/irix6/regen b/Lib/irix6/regen
deleted file mode 100755
index 4c4ea5c..0000000
--- a/Lib/irix6/regen
+++ /dev/null
@@ -1,13 +0,0 @@
-#! /bin/sh
-case `uname -sr` in
-'IRIX '[45].*)	;;
-*)	echo Probably not on an IRIX system 1>&2
-	exit 1;;
-esac
-set -v
-h2py /usr/include/sys/fcntl.h
-h2py /usr/include/sys/file.h
-h2py /usr/include/sys/socket.h
-h2py -i '(u_long)' /usr/include/netinet/in.h
-h2py /usr/include/sys/termios.h
-h2py /usr/include/errno.h
diff --git a/Lib/irix6/torgb.py b/Lib/irix6/torgb.py
deleted file mode 100644
index f283063..0000000
--- a/Lib/irix6/torgb.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# Convert "arbitrary" image files to rgb files (SGI's image format).
-# Input may be compressed.
-# The uncompressed file type may be PBM, PGM, PPM, GIF, TIFF, or Sun raster.
-# An exception is raised if the file is not of a recognized type.
-# Returned filename is either the input filename or a temporary filename;
-# in the latter case the caller must ensure that it is removed.
-# Other temporary files used are removed by the function.
-
-import os
-import tempfile
-import pipes
-import imghdr
-
-table = {}
-
-t = pipes.Template()
-t.append('fromppm $IN $OUT', 'ff')
-table['ppm'] = t
-
-t = pipes.Template()
-t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
-t.append('fromppm $IN $OUT', 'ff')
-table['pnm'] = t
-table['pgm'] = t
-table['pbm'] = t
-
-t = pipes.Template()
-t.append('fromgif $IN $OUT', 'ff')
-table['gif'] = t
-
-t = pipes.Template()
-t.append('tifftopnm', '--')
-t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
-t.append('fromppm $IN $OUT', 'ff')
-table['tiff'] = t
-
-t = pipes.Template()
-t.append('rasttopnm', '--')
-t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
-t.append('fromppm $IN $OUT', 'ff')
-table['rast'] = t
-
-t = pipes.Template()
-t.append('djpeg', '--')
-t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
-t.append('fromppm $IN $OUT', 'ff')
-table['jpeg'] = t
-
-uncompress = pipes.Template()
-uncompress.append('uncompress', '--')
-
-
-error = 'torgb.error' # Exception
-
-def torgb(filename):
-	temps = []
-	ret = None
-	try:
-		ret = _torgb(filename, temps)
-	finally:
-		for temp in temps[:]:
-			if temp <> ret:
-				try:
-					os.unlink(temp)
-				except os.error:
-					pass
-				temps.remove(temp)
-	return ret
-
-def _torgb(filename, temps):
-	if filename[-2:] == '.Z':
-		fname = tempfile.mktemp()
-		temps.append(fname)
-		sts = uncompress.copy(filename, fname)
-		if sts:
-			raise error, filename + ': uncompress failed'
-	else:
-		fname = filename
-	try:
-		ftype = imghdr.what(fname)
-	except IOError, msg:
-		if type(msg) == type(()) and len(msg) == 2 and \
-			type(msg[0]) == type(0) and type(msg[1]) == type(''):
-			msg = msg[1]
-		if type(msg) <> type(''):
-			msg = `msg`
-		raise error, filename + ': ' + msg
-	if ftype == 'rgb':
-		return fname
-	if ftype == None or not table.has_key(ftype):
-		raise error, \
-			filename + ': unsupported image file type ' + `ftype`
-	temp = tempfile.mktemp()
-	sts = table[ftype].copy(fname, temp)
-	if sts:
-		raise error, filename + ': conversion to rgb failed'
-	return temp
diff --git a/Lib/linux1/FCNTL.py b/Lib/linux1/FCNTL.py
deleted file mode 100755
index f65c4fa..0000000
--- a/Lib/linux1/FCNTL.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Generated by h2py from /usr/include/sys/fcntl.h
-
-# Included from fcntl.h
-
-# Included from features.h
-_FEATURES_H = 1
-_GNU_SOURCE = 1
-__USE_ANSI = 1
-__FAVOR_BSD = 1
-_BSD_SOURCE = 1
-_SVID_SOURCE = 1
-_POSIX_SOURCE = 1
-_POSIX_C_SOURCE = 2
-__USE_POSIX = 1
-__USE_POSIX2 = 1
-__USE_MISC = 1
-__USE_BSD = 1
-__USE_SVID = 1
-__USE_GNU = 1
-__GNU_LIBRARY__ = 1
-
-# Included from sys/cdefs.h
-_SYS_CDEFS_H = 1
-def __P(args): return args	 
-
-def __P(args): return args
-
-def __P(args): return ()	 
-
-def __STRING(x): return #x
-
-def __STRING(x): return "x"
-
-
-# Included from sys/types.h
-
-# Included from linux/types.h
-__FD_SETSIZE = 256
-
-# Included from asm/types.h
-def __FD_ZERO(fdsetp): return \
-
-
-# Included from sys/bitypes.h
-
-# Included from gnu/types.h
-_GNU_TYPES_H = 1
-__FDSET_LONGS = 8
-def __FD_ZERO(fdsetp): return \
-
-__FD_SETSIZE = 256
-def __FDELT(d): return ((d) / __NFDBITS)
-
-def __FDMASK(d): return (1 << ((d) % __NFDBITS))
-
-def __FD_ZERO(set): return \
-
-
-# Included from linux/fcntl.h
-
-# Included from asm/fcntl.h
-O_ACCMODE = 0003
-O_RDONLY = 00
-O_WRONLY = 01
-O_RDWR = 02
-O_CREAT = 0100
-O_EXCL = 0200
-O_NOCTTY = 0400
-O_TRUNC = 01000
-O_APPEND = 02000
-O_NONBLOCK = 04000
-O_NDELAY = O_NONBLOCK
-O_SYNC = 010000
-FASYNC = 020000
-F_DUPFD = 0
-F_GETFD = 1
-F_SETFD = 2
-F_GETFL = 3
-F_SETFL = 4
-F_GETLK = 5
-F_SETLK = 6
-F_SETLKW = 7
-F_SETOWN = 8
-F_GETOWN = 9
-FD_CLOEXEC = 1
-F_RDLCK = 0
-F_WRLCK = 1
-F_UNLCK = 2
-F_EXLCK = 4
-F_SHLCK = 8
-LOCK_SH = 1
-LOCK_EX = 2
-LOCK_NB = 4
-LOCK_UN = 8
-F_POSIX = 1
-F_FLOCK = 2
-FNDELAY = O_NDELAY
-F_ULOCK = 0
-F_LOCK = 1
-F_TLOCK = 2
-F_TEST = 3
diff --git a/Lib/linux1/IN.py b/Lib/linux1/IN.py
deleted file mode 100755
index 86710d1..0000000
--- a/Lib/linux1/IN.py
+++ /dev/null
@@ -1,239 +0,0 @@
-# Generated by h2py from /usr/include/netinet/in.h
-_NETINET_IN_H = 1
-
-# Included from features.h
-_FEATURES_H = 1
-_GNU_SOURCE = 1
-__USE_ANSI = 1
-__FAVOR_BSD = 1
-_BSD_SOURCE = 1
-_SVID_SOURCE = 1
-_POSIX_SOURCE = 1
-_POSIX_C_SOURCE = 2
-__USE_POSIX = 1
-__USE_POSIX2 = 1
-__USE_MISC = 1
-__USE_BSD = 1
-__USE_SVID = 1
-__USE_GNU = 1
-__GNU_LIBRARY__ = 1
-
-# Included from sys/cdefs.h
-_SYS_CDEFS_H = 1
-def __P(args): return args	 
-
-def __P(args): return args
-
-def __P(args): return ()	 
-
-def __STRING(x): return #x
-
-def __STRING(x): return "x"
-
-
-# Included from sys/socket.h
-
-# Included from linux/socket.h
-
-# Included from asm/socket.h
-FIOSETOWN = 0x8901
-SIOCSPGRP = 0x8902
-FIOGETOWN = 0x8903
-SIOCGPGRP = 0x8904
-SIOCATMARK = 0x8905
-SIOCGSTAMP = 0x8906
-SOL_SOCKET = 1
-SO_DEBUG = 1
-SO_REUSEADDR = 2
-SO_TYPE = 3
-SO_ERROR = 4
-SO_DONTROUTE = 5
-SO_BROADCAST = 6
-SO_SNDBUF = 7
-SO_RCVBUF = 8
-SO_KEEPALIVE = 9
-SO_OOBINLINE = 10
-SO_NO_CHECK = 11
-SO_PRIORITY = 12
-SO_LINGER = 13
-
-# Included from linux/sockios.h
-SIOCADDRT = 0x890B
-SIOCDELRT = 0x890C
-SIOCGIFNAME = 0x8910
-SIOCSIFLINK = 0x8911
-SIOCGIFCONF = 0x8912
-SIOCGIFFLAGS = 0x8913
-SIOCSIFFLAGS = 0x8914
-SIOCGIFADDR = 0x8915
-SIOCSIFADDR = 0x8916
-SIOCGIFDSTADDR = 0x8917
-SIOCSIFDSTADDR = 0x8918
-SIOCGIFBRDADDR = 0x8919
-SIOCSIFBRDADDR = 0x891a
-SIOCGIFNETMASK = 0x891b
-SIOCSIFNETMASK = 0x891c
-SIOCGIFMETRIC = 0x891d
-SIOCSIFMETRIC = 0x891e
-SIOCGIFMEM = 0x891f
-SIOCSIFMEM = 0x8920
-SIOCGIFMTU = 0x8921
-SIOCSIFMTU = 0x8922
-SIOCSIFHWADDR = 0x8924
-SIOCGIFENCAP = 0x8925
-SIOCSIFENCAP = 0x8926
-SIOCGIFHWADDR = 0x8927
-SIOCGIFSLAVE = 0x8929
-SIOCSIFSLAVE = 0x8930
-SIOCADDMULTI = 0x8931
-SIOCDELMULTI = 0x8932
-OLD_SIOCDARP = 0x8950
-OLD_SIOCGARP = 0x8951
-OLD_SIOCSARP = 0x8952
-SIOCDARP = 0x8953
-SIOCGARP = 0x8954
-SIOCSARP = 0x8955
-SIOCDRARP = 0x8960
-SIOCGRARP = 0x8961
-SIOCSRARP = 0x8962
-SIOCGIFMAP = 0x8970
-SIOCSIFMAP = 0x8971
-SIOCDEVPRIVATE = 0x89F0
-SIOCPROTOPRIVATE = 0x89E0
-
-# Included from linux/uio.h
-MAX_IOVEC = 8
-SOCK_STREAM = 1
-SOCK_DGRAM = 2
-SOCK_RAW = 3
-SOCK_RDM = 4
-SOCK_SEQPACKET = 5
-SOCK_PACKET = 10
-AF_UNSPEC = 0
-AF_UNIX = 1
-AF_INET = 2
-AF_AX25 = 3
-AF_IPX = 4
-AF_APPLETALK = 5
-AF_NETROM = 6
-AF_BRIDGE = 7
-AF_AAL5 = 8
-AF_X25 = 9
-AF_INET6 = 10
-AF_MAX = 12
-PF_UNSPEC = AF_UNSPEC
-PF_UNIX = AF_UNIX
-PF_INET = AF_INET
-PF_AX25 = AF_AX25
-PF_IPX = AF_IPX
-PF_APPLETALK = AF_APPLETALK
-PF_NETROM = AF_NETROM
-PF_BRIDGE = AF_BRIDGE
-PF_AAL5 = AF_AAL5
-PF_X25 = AF_X25
-PF_INET6 = AF_INET6
-PF_MAX = AF_MAX
-SOMAXCONN = 128
-MSG_OOB = 1
-MSG_PEEK = 2
-MSG_DONTROUTE = 4
-SOL_IP = 0
-SOL_IPX = 256
-SOL_AX25 = 257
-SOL_ATALK = 258
-SOL_NETROM = 259
-SOL_TCP = 6
-SOL_UDP = 17
-IP_TOS = 1
-IPTOS_LOWDELAY = 0x10
-IPTOS_THROUGHPUT = 0x08
-IPTOS_RELIABILITY = 0x04
-IP_TTL = 2
-IP_HDRINCL = 3
-IP_OPTIONS = 4
-IP_MULTICAST_IF = 32
-IP_MULTICAST_TTL = 33
-IP_MULTICAST_LOOP = 34
-IP_ADD_MEMBERSHIP = 35
-IP_DROP_MEMBERSHIP = 36
-IP_DEFAULT_MULTICAST_TTL = 1
-IP_DEFAULT_MULTICAST_LOOP = 1
-IP_MAX_MEMBERSHIPS = 20
-IPX_TYPE = 1
-TCP_NODELAY = 1
-TCP_MAXSEG = 2
-SOPRI_INTERACTIVE = 0
-SOPRI_NORMAL = 1
-SOPRI_BACKGROUND = 2
-
-# Included from sys/types.h
-
-# Included from linux/types.h
-__FD_SETSIZE = 256
-
-# Included from asm/types.h
-def __FD_ZERO(fdsetp): return \
-
-
-# Included from sys/bitypes.h
-
-# Included from pthread/mit/posix.h
-
-# Included from pthread/mit/types.h
-
-# Included from pthread/mit/xtypes.h
-
-# Included from pthread/mit/sys/types.h
-IMPLINK_IP = 155
-IMPLINK_LOWEXPER = 156
-IMPLINK_HIGHEXPER = 158
-
-# Included from linux/in.h
-__SOCK_SIZE__ = 16
-IN_CLASSA_NET = 0xff000000
-IN_CLASSA_NSHIFT = 24
-IN_CLASSA_HOST = (0xffffffff & ~IN_CLASSA_NET)
-IN_CLASSA_MAX = 128
-IN_CLASSB_NET = 0xffff0000
-IN_CLASSB_NSHIFT = 16
-IN_CLASSB_HOST = (0xffffffff & ~IN_CLASSB_NET)
-IN_CLASSB_MAX = 65536
-IN_CLASSC_NET = 0xffffff00
-IN_CLASSC_NSHIFT = 8
-IN_CLASSC_HOST = (0xffffffff & ~IN_CLASSC_NET)
-def IN_MULTICAST(a): return IN_CLASSD(a)
-
-IN_MULTICAST_NET = 0xF0000000
-INADDR_NONE = 0xffffffff
-IN_LOOPBACKNET = 127
-INADDR_LOOPBACK = 0x7f000001
-INADDR_UNSPEC_GROUP = 0xe0000000
-INADDR_ALLHOSTS_GROUP = 0xe0000001
-INADDR_MAX_LOCAL_GROUP = 0xe00000ff
-
-# Included from asm/byteorder.h
-__LITTLE_ENDIAN = 1234
-def __constant_ntohl(x): return \
-
-def __constant_ntohs(x): return \
-
-def __htonl(x): return __ntohl(x)
-
-def __htons(x): return __ntohs(x)
-
-def __constant_htonl(x): return __constant_ntohl(x)
-
-def __constant_htons(x): return __constant_ntohs(x)
-
-def ntohl(x): return \
-
-def ntohs(x): return \
-
-def htonl(x): return \
-
-def htons(x): return \
-
-def LOOPBACK(x): return (((x) & htonl(0xff000000)) == htonl(0x7f000000))
-
-def MULTICAST(x): return (((x) & htonl(0xf0000000)) == htonl(0xe0000000))
-
diff --git a/Lib/linux1/SOCKET.py b/Lib/linux1/SOCKET.py
deleted file mode 100755
index 71077c3..0000000
--- a/Lib/linux1/SOCKET.py
+++ /dev/null
@@ -1,183 +0,0 @@
-# Generated by h2py from /usr/include/sys/socket.h
-
-# Included from features.h
-_FEATURES_H = 1
-_GNU_SOURCE = 1
-__USE_ANSI = 1
-__FAVOR_BSD = 1
-_BSD_SOURCE = 1
-_SVID_SOURCE = 1
-_POSIX_SOURCE = 1
-_POSIX_C_SOURCE = 2
-__USE_POSIX = 1
-__USE_POSIX2 = 1
-__USE_MISC = 1
-__USE_BSD = 1
-__USE_SVID = 1
-__USE_GNU = 1
-__GNU_LIBRARY__ = 1
-
-# Included from sys/cdefs.h
-_SYS_CDEFS_H = 1
-def __P(args): return args	 
-
-def __P(args): return args
-
-def __P(args): return ()	 
-
-def __STRING(x): return #x
-
-def __STRING(x): return "x"
-
-
-# Included from linux/socket.h
-
-# Included from asm/socket.h
-FIOSETOWN = 0x8901
-SIOCSPGRP = 0x8902
-FIOGETOWN = 0x8903
-SIOCGPGRP = 0x8904
-SIOCATMARK = 0x8905
-SIOCGSTAMP = 0x8906
-SOL_SOCKET = 1
-SO_DEBUG = 1
-SO_REUSEADDR = 2
-SO_TYPE = 3
-SO_ERROR = 4
-SO_DONTROUTE = 5
-SO_BROADCAST = 6
-SO_SNDBUF = 7
-SO_RCVBUF = 8
-SO_KEEPALIVE = 9
-SO_OOBINLINE = 10
-SO_NO_CHECK = 11
-SO_PRIORITY = 12
-SO_LINGER = 13
-
-# Included from linux/sockios.h
-SIOCADDRT = 0x890B
-SIOCDELRT = 0x890C
-SIOCGIFNAME = 0x8910
-SIOCSIFLINK = 0x8911
-SIOCGIFCONF = 0x8912
-SIOCGIFFLAGS = 0x8913
-SIOCSIFFLAGS = 0x8914
-SIOCGIFADDR = 0x8915
-SIOCSIFADDR = 0x8916
-SIOCGIFDSTADDR = 0x8917
-SIOCSIFDSTADDR = 0x8918
-SIOCGIFBRDADDR = 0x8919
-SIOCSIFBRDADDR = 0x891a
-SIOCGIFNETMASK = 0x891b
-SIOCSIFNETMASK = 0x891c
-SIOCGIFMETRIC = 0x891d
-SIOCSIFMETRIC = 0x891e
-SIOCGIFMEM = 0x891f
-SIOCSIFMEM = 0x8920
-SIOCGIFMTU = 0x8921
-SIOCSIFMTU = 0x8922
-SIOCSIFHWADDR = 0x8924
-SIOCGIFENCAP = 0x8925
-SIOCSIFENCAP = 0x8926
-SIOCGIFHWADDR = 0x8927
-SIOCGIFSLAVE = 0x8929
-SIOCSIFSLAVE = 0x8930
-SIOCADDMULTI = 0x8931
-SIOCDELMULTI = 0x8932
-OLD_SIOCDARP = 0x8950
-OLD_SIOCGARP = 0x8951
-OLD_SIOCSARP = 0x8952
-SIOCDARP = 0x8953
-SIOCGARP = 0x8954
-SIOCSARP = 0x8955
-SIOCDRARP = 0x8960
-SIOCGRARP = 0x8961
-SIOCSRARP = 0x8962
-SIOCGIFMAP = 0x8970
-SIOCSIFMAP = 0x8971
-SIOCDEVPRIVATE = 0x89F0
-SIOCPROTOPRIVATE = 0x89E0
-
-# Included from linux/uio.h
-MAX_IOVEC = 8
-SOCK_STREAM = 1
-SOCK_DGRAM = 2
-SOCK_RAW = 3
-SOCK_RDM = 4
-SOCK_SEQPACKET = 5
-SOCK_PACKET = 10
-AF_UNSPEC = 0
-AF_UNIX = 1
-AF_INET = 2
-AF_AX25 = 3
-AF_IPX = 4
-AF_APPLETALK = 5
-AF_NETROM = 6
-AF_BRIDGE = 7
-AF_AAL5 = 8
-AF_X25 = 9
-AF_INET6 = 10
-AF_MAX = 12
-PF_UNSPEC = AF_UNSPEC
-PF_UNIX = AF_UNIX
-PF_INET = AF_INET
-PF_AX25 = AF_AX25
-PF_IPX = AF_IPX
-PF_APPLETALK = AF_APPLETALK
-PF_NETROM = AF_NETROM
-PF_BRIDGE = AF_BRIDGE
-PF_AAL5 = AF_AAL5
-PF_X25 = AF_X25
-PF_INET6 = AF_INET6
-PF_MAX = AF_MAX
-SOMAXCONN = 128
-MSG_OOB = 1
-MSG_PEEK = 2
-MSG_DONTROUTE = 4
-SOL_IP = 0
-SOL_IPX = 256
-SOL_AX25 = 257
-SOL_ATALK = 258
-SOL_NETROM = 259
-SOL_TCP = 6
-SOL_UDP = 17
-IP_TOS = 1
-IPTOS_LOWDELAY = 0x10
-IPTOS_THROUGHPUT = 0x08
-IPTOS_RELIABILITY = 0x04
-IP_TTL = 2
-IP_HDRINCL = 3
-IP_OPTIONS = 4
-IP_MULTICAST_IF = 32
-IP_MULTICAST_TTL = 33
-IP_MULTICAST_LOOP = 34
-IP_ADD_MEMBERSHIP = 35
-IP_DROP_MEMBERSHIP = 36
-IP_DEFAULT_MULTICAST_TTL = 1
-IP_DEFAULT_MULTICAST_LOOP = 1
-IP_MAX_MEMBERSHIPS = 20
-IPX_TYPE = 1
-TCP_NODELAY = 1
-TCP_MAXSEG = 2
-SOPRI_INTERACTIVE = 0
-SOPRI_NORMAL = 1
-SOPRI_BACKGROUND = 2
-
-# Included from sys/types.h
-
-# Included from linux/types.h
-__FD_SETSIZE = 256
-
-# Included from asm/types.h
-def __FD_ZERO(fdsetp): return \
-
-
-# Included from sys/bitypes.h
-
-# Included from pthread/mit/posix.h
-
-# Included from pthread/mit/types.h
-
-# Included from pthread/mit/xtypes.h
-
-# Included from pthread/mit/sys/types.h
diff --git a/Lib/linux1/TERMIOS.py b/Lib/linux1/TERMIOS.py
deleted file mode 100755
index 4b17df6..0000000
--- a/Lib/linux1/TERMIOS.py
+++ /dev/null
@@ -1,270 +0,0 @@
-# Generated by h2py from /usr/include/termios.h
-
-# Included from features.h
-_FEATURES_H = 1
-_GNU_SOURCE = 1
-__USE_ANSI = 1
-__FAVOR_BSD = 1
-_BSD_SOURCE = 1
-_SVID_SOURCE = 1
-_POSIX_SOURCE = 1
-_POSIX_C_SOURCE = 2
-__USE_POSIX = 1
-__USE_POSIX2 = 1
-__USE_MISC = 1
-__USE_BSD = 1
-__USE_SVID = 1
-__USE_GNU = 1
-__GNU_LIBRARY__ = 1
-
-# Included from sys/cdefs.h
-_SYS_CDEFS_H = 1
-def __P(args): return args	 
-
-def __P(args): return args
-
-def __P(args): return ()	 
-
-def __STRING(x): return #x
-
-def __STRING(x): return "x"
-
-
-# Included from sys/types.h
-
-# Included from linux/types.h
-__FD_SETSIZE = 256
-
-# Included from asm/types.h
-def __FD_ZERO(fdsetp): return \
-
-
-# Included from sys/bitypes.h
-
-# Included from linux/termios.h
-
-# Included from asm/termios.h
-TCGETS = 0x5401
-TCSETS = 0x5402
-TCSETSW = 0x5403
-TCSETSF = 0x5404
-TCGETA = 0x5405
-TCSETA = 0x5406
-TCSETAW = 0x5407
-TCSETAF = 0x5408
-TCSBRK = 0x5409
-TCXONC = 0x540A
-TCFLSH = 0x540B
-TIOCEXCL = 0x540C
-TIOCNXCL = 0x540D
-TIOCSCTTY = 0x540E
-TIOCGPGRP = 0x540F
-TIOCSPGRP = 0x5410
-TIOCOUTQ = 0x5411
-TIOCSTI = 0x5412
-TIOCGWINSZ = 0x5413
-TIOCSWINSZ = 0x5414
-TIOCMGET = 0x5415
-TIOCMBIS = 0x5416
-TIOCMBIC = 0x5417
-TIOCMSET = 0x5418
-TIOCGSOFTCAR = 0x5419
-TIOCSSOFTCAR = 0x541A
-FIONREAD = 0x541B
-TIOCINQ = FIONREAD
-TIOCLINUX = 0x541C
-TIOCCONS = 0x541D
-TIOCGSERIAL = 0x541E
-TIOCSSERIAL = 0x541F
-TIOCPKT = 0x5420
-FIONBIO = 0x5421
-TIOCNOTTY = 0x5422
-TIOCSETD = 0x5423
-TIOCGETD = 0x5424
-TCSBRKP = 0x5425
-TIOCTTYGSTRUCT = 0x5426
-FIONCLEX = 0x5450
-FIOCLEX = 0x5451
-FIOASYNC = 0x5452
-TIOCSERCONFIG = 0x5453
-TIOCSERGWILD = 0x5454
-TIOCSERSWILD = 0x5455
-TIOCGLCKTRMIOS = 0x5456
-TIOCSLCKTRMIOS = 0x5457
-TIOCSERGSTRUCT = 0x5458
-TIOCSERGETLSR = 0x5459
-TIOCSERGETMULTI = 0x545A
-TIOCSERSETMULTI = 0x545B
-TIOCPKT_DATA = 0
-TIOCPKT_FLUSHREAD = 1
-TIOCPKT_FLUSHWRITE = 2
-TIOCPKT_STOP = 4
-TIOCPKT_START = 8
-TIOCPKT_NOSTOP = 16
-TIOCPKT_DOSTOP = 32
-NCC = 8
-NCCS = 19
-VINTR = 0
-VQUIT = 1
-VERASE = 2
-VKILL = 3
-VEOF = 4
-VTIME = 5
-VMIN = 6
-VSWTC = 7
-VSTART = 8
-VSTOP = 9
-VSUSP = 10
-VEOL = 11
-VREPRINT = 12
-VDISCARD = 13
-VWERASE = 14
-VLNEXT = 15
-VEOL2 = 16
-INIT_C_CC = "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
-IGNBRK = 0000001
-BRKINT = 0000002
-IGNPAR = 0000004
-PARMRK = 0000010
-INPCK = 0000020
-ISTRIP = 0000040
-INLCR = 0000100
-IGNCR = 0000200
-ICRNL = 0000400
-IUCLC = 0001000
-IXON = 0002000
-IXANY = 0004000
-IXOFF = 0010000
-IMAXBEL = 0020000
-OPOST = 0000001
-OLCUC = 0000002
-ONLCR = 0000004
-OCRNL = 0000010
-ONOCR = 0000020
-ONLRET = 0000040
-OFILL = 0000100
-OFDEL = 0000200
-NLDLY = 0000400
-NL0 = 0000000
-NL1 = 0000400
-CRDLY = 0003000
-CR0 = 0000000
-CR1 = 0001000
-CR2 = 0002000
-CR3 = 0003000
-TABDLY = 0014000
-TAB0 = 0000000
-TAB1 = 0004000
-TAB2 = 0010000
-TAB3 = 0014000
-XTABS = 0014000
-BSDLY = 0020000
-BS0 = 0000000
-BS1 = 0020000
-VTDLY = 0040000
-VT0 = 0000000
-VT1 = 0040000
-FFDLY = 0100000
-FF0 = 0000000
-FF1 = 0100000
-CBAUD = 0010017
-B0 = 0000000
-B50 = 0000001
-B75 = 0000002
-B110 = 0000003
-B134 = 0000004
-B150 = 0000005
-B200 = 0000006
-B300 = 0000007
-B600 = 0000010
-B1200 = 0000011
-B1800 = 0000012
-B2400 = 0000013
-B4800 = 0000014
-B9600 = 0000015
-B19200 = 0000016
-B38400 = 0000017
-EXTA = B19200
-EXTB = B38400
-CSIZE = 0000060
-CS5 = 0000000
-CS6 = 0000020
-CS7 = 0000040
-CS8 = 0000060
-CSTOPB = 0000100
-CREAD = 0000200
-PARENB = 0000400
-PARODD = 0001000
-HUPCL = 0002000
-CLOCAL = 0004000
-CBAUDEX = 0010000
-B57600 = 0010001
-B115200 = 0010002
-B230400 = 0010003
-CIBAUD = 002003600000
-CRTSCTS = 020000000000
-ISIG = 0000001
-ICANON = 0000002
-XCASE = 0000004
-ECHO = 0000010
-ECHOE = 0000020
-ECHOK = 0000040
-ECHONL = 0000100
-NOFLSH = 0000200
-TOSTOP = 0000400
-ECHOCTL = 0001000
-ECHOPRT = 0002000
-ECHOKE = 0004000
-FLUSHO = 0010000
-PENDIN = 0040000
-IEXTEN = 0100000
-TIOCM_LE = 0x001
-TIOCM_DTR = 0x002
-TIOCM_RTS = 0x004
-TIOCM_ST = 0x008
-TIOCM_SR = 0x010
-TIOCM_CTS = 0x020
-TIOCM_CAR = 0x040
-TIOCM_RNG = 0x080
-TIOCM_DSR = 0x100
-TIOCM_CD = TIOCM_CAR
-TIOCM_RI = TIOCM_RNG
-TIOCSER_TEMT = 0x01
-TCOOFF = 0
-TCOON = 1
-TCIOFF = 2
-TCION = 3
-TCIFLUSH = 0
-TCOFLUSH = 1
-TCIOFLUSH = 2
-TCSANOW = 0
-TCSADRAIN = 1
-TCSAFLUSH = 2
-N_TTY = 0
-N_SLIP = 1
-N_MOUSE = 2
-N_PPP = 3
-def CTRL(ch): return ((ch)&0x1F)
-
-IBSHIFT = 16
-CNUL = 0
-CDEL = 0177
-CESC = ord('\\')
-CINTR = 0177
-CQUIT = 034
-CERASE = ord('#')
-CKILL = ord('@')
-CEOT = 04
-CEOL = 0
-CEOL2 = 0
-CEOF = 4
-CSTART = 021
-CSTOP = 023
-CSWTCH = 032
-NSWTCH = 0
-CSUSP = CTRL(ord('Z'))
-CDSUSP = CTRL(ord('Y'))
-CRPRNT = CTRL(ord('R'))
-CFLUSH = CTRL(ord('O'))
-CWERASE = CTRL(ord('W'))
-CLNEXT = CTRL(ord('V'))
diff --git a/Lib/linux1/regen b/Lib/linux1/regen
deleted file mode 100755
index d8dbc04..0000000
--- a/Lib/linux1/regen
+++ /dev/null
@@ -1,11 +0,0 @@
-#! /bin/sh
-case `uname` in
-Linux*)	;;
-*)	echo Probably not on a Linux system 1>&2
-	exit 1;;
-esac
-set -v
-h2py /usr/include/sys/fcntl.h
-h2py /usr/include/sys/socket.h
-h2py -i '(u_long)' /usr/include/netinet/in.h
-h2py /usr/include/termios.h
diff --git a/Lib/linux2/FCNTL.py b/Lib/linux2/FCNTL.py
deleted file mode 100755
index 0058aba..0000000
--- a/Lib/linux2/FCNTL.py
+++ /dev/null
@@ -1,108 +0,0 @@
-# Generated by h2py from /usr/include/sys/fcntl.h
-
-# Included from fcntl.h
-
-# Included from features.h
-_FEATURES_H = 1
-_GNU_SOURCE = 1
-__USE_ANSI = 1
-__FAVOR_BSD = 1
-_BSD_SOURCE = 1
-_SVID_SOURCE = 1
-_POSIX_SOURCE = 1
-_POSIX_C_SOURCE = 2
-__USE_POSIX = 1
-__USE_POSIX2 = 1
-__USE_MISC = 1
-__USE_BSD = 1
-__USE_SVID = 1
-__USE_GNU = 1
-__GNU_LIBRARY__ = 1
-
-# Included from sys/cdefs.h
-_SYS_CDEFS_H = 1
-def __P(args): return args	 
-
-def __P(args): return args
-
-def __P(args): return ()	 
-
-def __STRING(x): return #x
-
-def __STRING(x): return "x"
-
-
-# Included from sys/types.h
-
-# Included from linux/types.h
-
-# Included from linux/posix_types.h
-__FD_SETSIZE = 1024
-def __FDELT(d): return ((d) / __NFDBITS)
-
-
-# Included from asm/posix_types.h
-def __FD_ZERO(fdsetp): return \
-
-
-# Included from asm/types.h
-
-# Included from sys/bitypes.h
-
-# Included from gnu/types.h
-_GNU_TYPES_H = 1
-__FDSET_LONGS = 8
-def __FD_ZERO(fdsetp): return \
-
-__FD_SETSIZE = 256
-def __FDELT(d): return ((d) / __NFDBITS)
-
-def __FDMASK(d): return (1 << ((d) % __NFDBITS))
-
-def __FD_ZERO(set): return \
-
-
-# Included from linux/fcntl.h
-
-# Included from asm/fcntl.h
-O_ACCMODE = 0003
-O_RDONLY = 00
-O_WRONLY = 01
-O_RDWR = 02
-O_CREAT = 0100
-O_EXCL = 0200
-O_NOCTTY = 0400
-O_TRUNC = 01000
-O_APPEND = 02000
-O_NONBLOCK = 04000
-O_NDELAY = O_NONBLOCK
-O_SYNC = 010000
-FASYNC = 020000
-F_DUPFD = 0
-F_GETFD = 1
-F_SETFD = 2
-F_GETFL = 3
-F_SETFL = 4
-F_GETLK = 5
-F_SETLK = 6
-F_SETLKW = 7
-F_SETOWN = 8
-F_GETOWN = 9
-FD_CLOEXEC = 1
-F_RDLCK = 0
-F_WRLCK = 1
-F_UNLCK = 2
-F_EXLCK = 4
-F_SHLCK = 8
-LOCK_SH = 1
-LOCK_EX = 2
-LOCK_NB = 4
-LOCK_UN = 8
-F_POSIX = 1
-F_FLOCK = 2
-F_BROKEN = 4
-FNDELAY = O_NDELAY
-F_ULOCK = 0
-F_LOCK = 1
-F_TLOCK = 2
-F_TEST = 3
diff --git a/Lib/linux2/IN.py b/Lib/linux2/IN.py
deleted file mode 100755
index 42c041f..0000000
--- a/Lib/linux2/IN.py
+++ /dev/null
@@ -1,430 +0,0 @@
-# Generated by h2py from /usr/include/netinet/in.h
-_NETINET_IN_H = 1
-
-# Included from features.h
-_FEATURES_H = 1
-_GNU_SOURCE = 1
-__USE_ANSI = 1
-__FAVOR_BSD = 1
-_BSD_SOURCE = 1
-_SVID_SOURCE = 1
-_POSIX_SOURCE = 1
-_POSIX_C_SOURCE = 2
-__USE_POSIX = 1
-__USE_POSIX2 = 1
-__USE_MISC = 1
-__USE_BSD = 1
-__USE_SVID = 1
-__USE_GNU = 1
-__GNU_LIBRARY__ = 1
-
-# Included from sys/cdefs.h
-_SYS_CDEFS_H = 1
-def __P(args): return args	 
-
-def __P(args): return args
-
-def __P(args): return ()	 
-
-def __STRING(x): return #x
-
-def __STRING(x): return "x"
-
-
-# Included from sys/socket.h
-
-# Included from linux/socket.h
-
-# Included from asm/socket.h
-
-# Included from asm/sockios.h
-FIOSETOWN = 0x8901
-SIOCSPGRP = 0x8902
-FIOGETOWN = 0x8903
-SIOCGPGRP = 0x8904
-SIOCATMARK = 0x8905
-SIOCGSTAMP = 0x8906
-SOL_SOCKET = 1
-SO_DEBUG = 1
-SO_REUSEADDR = 2
-SO_TYPE = 3
-SO_ERROR = 4
-SO_DONTROUTE = 5
-SO_BROADCAST = 6
-SO_SNDBUF = 7
-SO_RCVBUF = 8
-SO_KEEPALIVE = 9
-SO_OOBINLINE = 10
-SO_NO_CHECK = 11
-SO_PRIORITY = 12
-SO_LINGER = 13
-SO_BSDCOMPAT = 14
-
-# Included from linux/sockios.h
-SIOCADDRT = 0x890B
-SIOCDELRT = 0x890C
-SIOCGIFNAME = 0x8910
-SIOCSIFLINK = 0x8911
-SIOCGIFCONF = 0x8912
-SIOCGIFFLAGS = 0x8913
-SIOCSIFFLAGS = 0x8914
-SIOCGIFADDR = 0x8915
-SIOCSIFADDR = 0x8916
-SIOCGIFDSTADDR = 0x8917
-SIOCSIFDSTADDR = 0x8918
-SIOCGIFBRDADDR = 0x8919
-SIOCSIFBRDADDR = 0x891a
-SIOCGIFNETMASK = 0x891b
-SIOCSIFNETMASK = 0x891c
-SIOCGIFMETRIC = 0x891d
-SIOCSIFMETRIC = 0x891e
-SIOCGIFMEM = 0x891f
-SIOCSIFMEM = 0x8920
-SIOCGIFMTU = 0x8921
-SIOCSIFMTU = 0x8922
-SIOCSIFHWADDR = 0x8924
-SIOCGIFENCAP = 0x8925
-SIOCSIFENCAP = 0x8926
-SIOCGIFHWADDR = 0x8927
-SIOCGIFSLAVE = 0x8929
-SIOCSIFSLAVE = 0x8930
-SIOCADDMULTI = 0x8931
-SIOCDELMULTI = 0x8932
-SIOCGIFBR = 0x8940
-SIOCSIFBR = 0x8941
-OLD_SIOCDARP = 0x8950
-OLD_SIOCGARP = 0x8951
-OLD_SIOCSARP = 0x8952
-SIOCDARP = 0x8953
-SIOCGARP = 0x8954
-SIOCSARP = 0x8955
-SIOCDRARP = 0x8960
-SIOCGRARP = 0x8961
-SIOCSRARP = 0x8962
-SIOCGIFMAP = 0x8970
-SIOCSIFMAP = 0x8971
-SIOCADDDLCI = 0x8980
-SIOCDELDLCI = 0x8981
-SIOCDEVPRIVATE = 0x89F0
-SIOCPROTOPRIVATE = 0x89E0
-
-# Included from linux/uio.h
-UIO_MAXIOV = 16
-SCM_RIGHTS = 1
-SOCK_STREAM = 1
-SOCK_DGRAM = 2
-SOCK_RAW = 3
-SOCK_RDM = 4
-SOCK_SEQPACKET = 5
-SOCK_PACKET = 10
-AF_UNSPEC = 0
-AF_UNIX = 1
-AF_INET = 2
-AF_AX25 = 3
-AF_IPX = 4
-AF_APPLETALK = 5
-AF_NETROM = 6
-AF_BRIDGE = 7
-AF_AAL5 = 8
-AF_X25 = 9
-AF_INET6 = 10
-AF_MAX = 12
-PF_UNSPEC = AF_UNSPEC
-PF_UNIX = AF_UNIX
-PF_INET = AF_INET
-PF_AX25 = AF_AX25
-PF_IPX = AF_IPX
-PF_APPLETALK = AF_APPLETALK
-PF_NETROM = AF_NETROM
-PF_BRIDGE = AF_BRIDGE
-PF_AAL5 = AF_AAL5
-PF_X25 = AF_X25
-PF_INET6 = AF_INET6
-PF_MAX = AF_MAX
-SOMAXCONN = 128
-MSG_OOB = 1
-MSG_PEEK = 2
-MSG_DONTROUTE = 4
-MSG_PROXY = 16
-SOL_IP = 0
-SOL_IPX = 256
-SOL_AX25 = 257
-SOL_ATALK = 258
-SOL_NETROM = 259
-SOL_TCP = 6
-SOL_UDP = 17
-IP_TOS = 1
-IPTOS_LOWDELAY = 0x10
-IPTOS_THROUGHPUT = 0x08
-IPTOS_RELIABILITY = 0x04
-IPTOS_MINCOST = 0x02
-IP_TTL = 2
-IP_HDRINCL = 3
-IP_OPTIONS = 4
-IP_MULTICAST_IF = 32
-IP_MULTICAST_TTL = 33
-IP_MULTICAST_LOOP = 34
-IP_ADD_MEMBERSHIP = 35
-IP_DROP_MEMBERSHIP = 36
-IP_DEFAULT_MULTICAST_TTL = 1
-IP_DEFAULT_MULTICAST_LOOP = 1
-IP_MAX_MEMBERSHIPS = 20
-IPX_TYPE = 1
-TCP_NODELAY = 1
-TCP_MAXSEG = 2
-SOPRI_INTERACTIVE = 0
-SOPRI_NORMAL = 1
-SOPRI_BACKGROUND = 2
-
-# Included from sys/types.h
-
-# Included from linux/types.h
-
-# Included from linux/posix_types.h
-__FD_SETSIZE = 1024
-def __FDELT(d): return ((d) / __NFDBITS)
-
-
-# Included from asm/posix_types.h
-def __FD_ZERO(fdsetp): return \
-
-
-# Included from asm/types.h
-
-# Included from sys/bitypes.h
-
-# Included from pthread/mit/posix.h
-
-# Included from pthread/mit/types.h
-
-# Included from pthread/mit/xtypes.h
-
-# Included from pthread/mit/sys/types.h
-IMPLINK_IP = 155
-IMPLINK_LOWEXPER = 156
-IMPLINK_HIGHEXPER = 158
-
-# Included from linux/in.h
-__SOCK_SIZE__ = 16
-IN_CLASSA_NET = 0xff000000
-IN_CLASSA_NSHIFT = 24
-IN_CLASSA_HOST = (0xffffffff & ~IN_CLASSA_NET)
-IN_CLASSA_MAX = 128
-IN_CLASSB_NET = 0xffff0000
-IN_CLASSB_NSHIFT = 16
-IN_CLASSB_HOST = (0xffffffff & ~IN_CLASSB_NET)
-IN_CLASSB_MAX = 65536
-IN_CLASSC_NET = 0xffffff00
-IN_CLASSC_NSHIFT = 8
-IN_CLASSC_HOST = (0xffffffff & ~IN_CLASSC_NET)
-def IN_MULTICAST(a): return IN_CLASSD(a)
-
-IN_MULTICAST_NET = 0xF0000000
-IN_LOOPBACKNET = 127
-INADDR_LOOPBACK = 0x7f000001
-INADDR_UNSPEC_GROUP = 0xe0000000
-INADDR_ALLHOSTS_GROUP = 0xe0000001
-INADDR_MAX_LOCAL_GROUP = 0xe00000ff
-
-# Included from asm/byteorder.h
-__LITTLE_ENDIAN = 1234
-
-# Included from linux/config.h
-
-# Included from linux/autoconf.h
-CONFIG_MODULES = 1
-CONFIG_MODVERSIONS = 1
-CONFIG_KERNELD = 1
-CONFIG_MATH_EMULATION = 1
-CONFIG_NET = 1
-CONFIG_PCI = 1
-CONFIG_SYSVIPC = 1
-CONFIG_BINFMT_AOUT = 1
-CONFIG_BINFMT_ELF = 1
-CONFIG_KERNEL_ELF = 1
-CONFIG_M386 = 1
-CONFIG_BLK_DEV_FD = 1
-CONFIG_BLK_DEV_IDE = 1
-CONFIG_BLK_DEV_IDECD = 1
-CONFIG_BLK_DEV_IDETAPE = 1
-CONFIG_BLK_DEV_IDE_PCMCIA = 1
-CONFIG_BLK_DEV_CMD640 = 1
-CONFIG_BLK_DEV_CMD640_ENHANCED = 1
-CONFIG_BLK_DEV_RZ1000 = 1
-CONFIG_BLK_DEV_LOOP_MODULE = 1
-CONFIG_BLK_DEV_MD = 1
-CONFIG_MD_LINEAR_MODULE = 1
-CONFIG_MD_STRIPED_MODULE = 1
-CONFIG_BLK_DEV_RAM = 1
-CONFIG_BLK_DEV_INITRD = 1
-CONFIG_FIREWALL = 1
-CONFIG_NET_ALIAS = 1
-CONFIG_INET = 1
-CONFIG_IP_FORWARD = 1
-CONFIG_IP_FIREWALL = 1
-CONFIG_IP_ACCT = 1
-CONFIG_NET_IPIP_MODULE = 1
-CONFIG_IP_ALIAS_MODULE = 1
-CONFIG_INET_RARP_MODULE = 1
-CONFIG_IP_NOSR = 1
-CONFIG_SKB_LARGE = 1
-CONFIG_IPX_MODULE = 1
-CONFIG_ATALK_MODULE = 1
-CONFIG_SCSI = 1
-CONFIG_BLK_DEV_SD = 1
-CONFIG_CHR_DEV_ST_MODULE = 1
-CONFIG_BLK_DEV_SR = 1
-CONFIG_CHR_DEV_SG_MODULE = 1
-CONFIG_SCSI_CONSTANTS = 1
-CONFIG_SCSI_7000FASST_MODULE = 1
-CONFIG_SCSI_AHA152X_MODULE = 1
-CONFIG_SCSI_AHA1542_MODULE = 1
-CONFIG_SCSI_AHA1740_MODULE = 1
-CONFIG_SCSI_AIC7XXX_MODULE = 1
-CONFIG_SCSI_ADVANSYS_MODULE = 1
-CONFIG_SCSI_IN2000_MODULE = 1
-CONFIG_SCSI_AM53C974 = 1
-CONFIG_SCSI_BUSLOGIC_MODULE = 1
-CONFIG_SCSI_DTC3280_MODULE = 1
-CONFIG_SCSI_EATA_DMA_MODULE = 1
-CONFIG_SCSI_EATA_PIO_MODULE = 1
-CONFIG_SCSI_EATA_MODULE = 1
-CONFIG_SCSI_FUTURE_DOMAIN_MODULE = 1
-CONFIG_SCSI_GENERIC_NCR5380_MODULE = 1
-CONFIG_SCSI_G_NCR5380_PORT = 1
-CONFIG_SCSI_NCR53C406A_MODULE = 1
-CONFIG_SCSI_NCR53C7xx_MODULE = 1
-CONFIG_SCSI_NCR53C8XX_MODULE = 1
-CONFIG_SCSI_PPA_MODULE = 1
-CONFIG_SCSI_PAS16_MODULE = 1
-CONFIG_SCSI_QLOGIC_FAS_MODULE = 1
-CONFIG_SCSI_QLOGIC_ISP_MODULE = 1
-CONFIG_SCSI_SEAGATE_MODULE = 1
-CONFIG_SCSI_T128_MODULE = 1
-CONFIG_SCSI_U14_34F_MODULE = 1
-CONFIG_SCSI_ULTRASTOR_MODULE = 1
-CONFIG_NETDEVICES = 1
-CONFIG_DUMMY_MODULE = 1
-CONFIG_EQUALIZER_MODULE = 1
-CONFIG_PLIP_MODULE = 1
-CONFIG_PPP_MODULE = 1
-CONFIG_SLIP_MODULE = 1
-CONFIG_SLIP_COMPRESSED = 1
-CONFIG_SLIP_SMART = 1
-CONFIG_NET_ETHERNET = 1
-CONFIG_NET_VENDOR_3COM = 1
-CONFIG_EL1_MODULE = 1
-CONFIG_EL2_MODULE = 1
-CONFIG_EL3_MODULE = 1
-CONFIG_VORTEX_MODULE = 1
-CONFIG_LANCE = 1
-CONFIG_LANCE32 = 1
-CONFIG_NET_VENDOR_SMC = 1
-CONFIG_WD80x3_MODULE = 1
-CONFIG_ULTRA_MODULE = 1
-CONFIG_SMC9194_MODULE = 1
-CONFIG_NET_ISA = 1
-CONFIG_E2100_MODULE = 1
-CONFIG_DEPCA_MODULE = 1
-CONFIG_EWRK3_MODULE = 1
-CONFIG_EEXPRESS_MODULE = 1
-CONFIG_HPLAN_PLUS_MODULE = 1
-CONFIG_HPLAN_MODULE = 1
-CONFIG_HP100_MODULE = 1
-CONFIG_NE2000_MODULE = 1
-CONFIG_NET_EISA = 1
-CONFIG_APRICOT_MODULE = 1
-CONFIG_DE4X5_MODULE = 1
-CONFIG_DEC_ELCP_MODULE = 1
-CONFIG_DGRS_MODULE = 1
-CONFIG_NET_POCKET = 1
-CONFIG_DE600_MODULE = 1
-CONFIG_DE620_MODULE = 1
-CONFIG_TR = 1
-CONFIG_IBMTR_MODULE = 1
-CONFIG_ARCNET_MODULE = 1
-CONFIG_ARCNET_ETH = 1
-CONFIG_ARCNET_1051 = 1
-CONFIG_ISDN_MODULE = 1
-CONFIG_ISDN_PPP = 1
-CONFIG_ISDN_PPP_VJ = 1
-CONFIG_ISDN_DRV_ICN_MODULE = 1
-CONFIG_ISDN_DRV_PCBIT_MODULE = 1
-CONFIG_ISDN_DRV_TELES_MODULE = 1
-CONFIG_CD_NO_IDESCSI = 1
-CONFIG_AZTCD_MODULE = 1
-CONFIG_GSCD_MODULE = 1
-CONFIG_SBPCD_MODULE = 1
-CONFIG_MCD_MODULE = 1
-CONFIG_MCDX_MODULE = 1
-CONFIG_OPTCD_MODULE = 1
-CONFIG_CM206_MODULE = 1
-CONFIG_SJCD_MODULE = 1
-CONFIG_CDI_INIT = 1
-CONFIG_ISP16_CDI_MODULE = 1
-CONFIG_CDU31A_MODULE = 1
-CONFIG_CDU535_MODULE = 1
-CONFIG_QUOTA = 1
-CONFIG_LOCK_MANDATORY = 1
-CONFIG_MINIX_FS = 1
-CONFIG_EXT_FS_MODULE = 1
-CONFIG_EXT2_FS = 1
-CONFIG_XIA_FS_MODULE = 1
-CONFIG_FAT_FS = 1
-CONFIG_MSDOS_FS = 1
-CONFIG_VFAT_FS_MODULE = 1
-CONFIG_UMSDOS_FS_MODULE = 1
-CONFIG_PROC_FS = 1
-CONFIG_NFS_FS = 1
-CONFIG_SMB_FS_MODULE = 1
-CONFIG_NCP_FS_MODULE = 1
-CONFIG_ISO9660_FS = 1
-CONFIG_HPFS_FS_MODULE = 1
-CONFIG_SYSV_FS_MODULE = 1
-CONFIG_UFS_FS_MODULE = 1
-CONFIG_SERIAL = 1
-CONFIG_CYCLADES_MODULE = 1
-CONFIG_RISCOM8_MODULE = 1
-CONFIG_PRINTER_MODULE = 1
-CONFIG_MOUSE = 1
-CONFIG_ATIXL_BUSMOUSE = 1
-CONFIG_BUSMOUSE = 1
-CONFIG_MS_BUSMOUSE = 1
-CONFIG_PSMOUSE = 1
-CONFIG_82C710_MOUSE = 1
-CONFIG_FTAPE_MODULE = 1
-UTS_SYSNAME = "Linux"
-UTS_MACHINE = "unknown"
-UTS_NODENAME = "(none)"
-UTS_DOMAINNAME = "(none)"
-DEF_INITSEG = 0x9000
-DEF_SYSSEG = 0x1000
-DEF_SETUPSEG = 0x9020
-DEF_SYSSIZE = 0x7F00
-NORMAL_VGA = 0xffff
-EXTENDED_VGA = 0xfffe
-ASK_VGA = 0xfffd
-def __constant_ntohl(x): return \
-
-def __constant_ntohs(x): return \
-
-def __htonl(x): return __ntohl(x)
-
-def __htons(x): return __ntohs(x)
-
-def __constant_htonl(x): return __constant_ntohl(x)
-
-def __constant_htons(x): return __constant_ntohs(x)
-
-def ntohl(x): return \
-
-def ntohs(x): return \
-
-def htonl(x): return \
-
-def htons(x): return \
-
-def LOOPBACK(x): return (((x) & htonl(0xff000000)) == htonl(0x7f000000))
-
-def MULTICAST(x): return (((x) & htonl(0xf0000000)) == htonl(0xe0000000))
-
diff --git a/Lib/linux2/SOCKET.py b/Lib/linux2/SOCKET.py
deleted file mode 100755
index 90c5406..0000000
--- a/Lib/linux2/SOCKET.py
+++ /dev/null
@@ -1,199 +0,0 @@
-# Generated by h2py from /usr/include/sys/socket.h
-
-# Included from features.h
-_FEATURES_H = 1
-_GNU_SOURCE = 1
-__USE_ANSI = 1
-__FAVOR_BSD = 1
-_BSD_SOURCE = 1
-_SVID_SOURCE = 1
-_POSIX_SOURCE = 1
-_POSIX_C_SOURCE = 2
-__USE_POSIX = 1
-__USE_POSIX2 = 1
-__USE_MISC = 1
-__USE_BSD = 1
-__USE_SVID = 1
-__USE_GNU = 1
-__GNU_LIBRARY__ = 1
-
-# Included from sys/cdefs.h
-_SYS_CDEFS_H = 1
-def __P(args): return args	 
-
-def __P(args): return args
-
-def __P(args): return ()	 
-
-def __STRING(x): return #x
-
-def __STRING(x): return "x"
-
-
-# Included from linux/socket.h
-
-# Included from asm/socket.h
-
-# Included from asm/sockios.h
-FIOSETOWN = 0x8901
-SIOCSPGRP = 0x8902
-FIOGETOWN = 0x8903
-SIOCGPGRP = 0x8904
-SIOCATMARK = 0x8905
-SIOCGSTAMP = 0x8906
-SOL_SOCKET = 1
-SO_DEBUG = 1
-SO_REUSEADDR = 2
-SO_TYPE = 3
-SO_ERROR = 4
-SO_DONTROUTE = 5
-SO_BROADCAST = 6
-SO_SNDBUF = 7
-SO_RCVBUF = 8
-SO_KEEPALIVE = 9
-SO_OOBINLINE = 10
-SO_NO_CHECK = 11
-SO_PRIORITY = 12
-SO_LINGER = 13
-SO_BSDCOMPAT = 14
-
-# Included from linux/sockios.h
-SIOCADDRT = 0x890B
-SIOCDELRT = 0x890C
-SIOCGIFNAME = 0x8910
-SIOCSIFLINK = 0x8911
-SIOCGIFCONF = 0x8912
-SIOCGIFFLAGS = 0x8913
-SIOCSIFFLAGS = 0x8914
-SIOCGIFADDR = 0x8915
-SIOCSIFADDR = 0x8916
-SIOCGIFDSTADDR = 0x8917
-SIOCSIFDSTADDR = 0x8918
-SIOCGIFBRDADDR = 0x8919
-SIOCSIFBRDADDR = 0x891a
-SIOCGIFNETMASK = 0x891b
-SIOCSIFNETMASK = 0x891c
-SIOCGIFMETRIC = 0x891d
-SIOCSIFMETRIC = 0x891e
-SIOCGIFMEM = 0x891f
-SIOCSIFMEM = 0x8920
-SIOCGIFMTU = 0x8921
-SIOCSIFMTU = 0x8922
-SIOCSIFHWADDR = 0x8924
-SIOCGIFENCAP = 0x8925
-SIOCSIFENCAP = 0x8926
-SIOCGIFHWADDR = 0x8927
-SIOCGIFSLAVE = 0x8929
-SIOCSIFSLAVE = 0x8930
-SIOCADDMULTI = 0x8931
-SIOCDELMULTI = 0x8932
-SIOCGIFBR = 0x8940
-SIOCSIFBR = 0x8941
-OLD_SIOCDARP = 0x8950
-OLD_SIOCGARP = 0x8951
-OLD_SIOCSARP = 0x8952
-SIOCDARP = 0x8953
-SIOCGARP = 0x8954
-SIOCSARP = 0x8955
-SIOCDRARP = 0x8960
-SIOCGRARP = 0x8961
-SIOCSRARP = 0x8962
-SIOCGIFMAP = 0x8970
-SIOCSIFMAP = 0x8971
-SIOCADDDLCI = 0x8980
-SIOCDELDLCI = 0x8981
-SIOCDEVPRIVATE = 0x89F0
-SIOCPROTOPRIVATE = 0x89E0
-
-# Included from linux/uio.h
-UIO_MAXIOV = 16
-SCM_RIGHTS = 1
-SOCK_STREAM = 1
-SOCK_DGRAM = 2
-SOCK_RAW = 3
-SOCK_RDM = 4
-SOCK_SEQPACKET = 5
-SOCK_PACKET = 10
-AF_UNSPEC = 0
-AF_UNIX = 1
-AF_INET = 2
-AF_AX25 = 3
-AF_IPX = 4
-AF_APPLETALK = 5
-AF_NETROM = 6
-AF_BRIDGE = 7
-AF_AAL5 = 8
-AF_X25 = 9
-AF_INET6 = 10
-AF_MAX = 12
-PF_UNSPEC = AF_UNSPEC
-PF_UNIX = AF_UNIX
-PF_INET = AF_INET
-PF_AX25 = AF_AX25
-PF_IPX = AF_IPX
-PF_APPLETALK = AF_APPLETALK
-PF_NETROM = AF_NETROM
-PF_BRIDGE = AF_BRIDGE
-PF_AAL5 = AF_AAL5
-PF_X25 = AF_X25
-PF_INET6 = AF_INET6
-PF_MAX = AF_MAX
-SOMAXCONN = 128
-MSG_OOB = 1
-MSG_PEEK = 2
-MSG_DONTROUTE = 4
-MSG_PROXY = 16
-SOL_IP = 0
-SOL_IPX = 256
-SOL_AX25 = 257
-SOL_ATALK = 258
-SOL_NETROM = 259
-SOL_TCP = 6
-SOL_UDP = 17
-IP_TOS = 1
-IPTOS_LOWDELAY = 0x10
-IPTOS_THROUGHPUT = 0x08
-IPTOS_RELIABILITY = 0x04
-IPTOS_MINCOST = 0x02
-IP_TTL = 2
-IP_HDRINCL = 3
-IP_OPTIONS = 4
-IP_MULTICAST_IF = 32
-IP_MULTICAST_TTL = 33
-IP_MULTICAST_LOOP = 34
-IP_ADD_MEMBERSHIP = 35
-IP_DROP_MEMBERSHIP = 36
-IP_DEFAULT_MULTICAST_TTL = 1
-IP_DEFAULT_MULTICAST_LOOP = 1
-IP_MAX_MEMBERSHIPS = 20
-IPX_TYPE = 1
-TCP_NODELAY = 1
-TCP_MAXSEG = 2
-SOPRI_INTERACTIVE = 0
-SOPRI_NORMAL = 1
-SOPRI_BACKGROUND = 2
-
-# Included from sys/types.h
-
-# Included from linux/types.h
-
-# Included from linux/posix_types.h
-__FD_SETSIZE = 1024
-def __FDELT(d): return ((d) / __NFDBITS)
-
-
-# Included from asm/posix_types.h
-def __FD_ZERO(fdsetp): return \
-
-
-# Included from asm/types.h
-
-# Included from sys/bitypes.h
-
-# Included from pthread/mit/posix.h
-
-# Included from pthread/mit/types.h
-
-# Included from pthread/mit/xtypes.h
-
-# Included from pthread/mit/sys/types.h
diff --git a/Lib/linux2/TERMIOS.py b/Lib/linux2/TERMIOS.py
deleted file mode 100755
index 14bb226..0000000
--- a/Lib/linux2/TERMIOS.py
+++ /dev/null
@@ -1,316 +0,0 @@
-# Generated by h2py from /usr/include/termios.h
-
-# Included from features.h
-_FEATURES_H = 1
-_GNU_SOURCE = 1
-__USE_ANSI = 1
-__FAVOR_BSD = 1
-_BSD_SOURCE = 1
-_SVID_SOURCE = 1
-_POSIX_SOURCE = 1
-_POSIX_C_SOURCE = 2
-__USE_POSIX = 1
-__USE_POSIX2 = 1
-__USE_MISC = 1
-__USE_BSD = 1
-__USE_SVID = 1
-__USE_GNU = 1
-__GNU_LIBRARY__ = 1
-
-# Included from sys/cdefs.h
-_SYS_CDEFS_H = 1
-def __P(args): return args	 
-
-def __P(args): return args
-
-def __P(args): return ()	 
-
-def __STRING(x): return #x
-
-def __STRING(x): return "x"
-
-
-# Included from sys/types.h
-
-# Included from linux/types.h
-
-# Included from linux/posix_types.h
-__FD_SETSIZE = 1024
-def __FDELT(d): return ((d) / __NFDBITS)
-
-
-# Included from asm/posix_types.h
-def __FD_ZERO(fdsetp): return \
-
-
-# Included from asm/types.h
-
-# Included from sys/bitypes.h
-
-# Included from linux/termios.h
-
-# Included from asm/termios.h
-
-# Included from asm/termbits.h
-NCCS = 19
-VINTR = 0
-VQUIT = 1
-VERASE = 2
-VKILL = 3
-VEOF = 4
-VTIME = 5
-VMIN = 6
-VSWTC = 7
-VSTART = 8
-VSTOP = 9
-VSUSP = 10
-VEOL = 11
-VREPRINT = 12
-VDISCARD = 13
-VWERASE = 14
-VLNEXT = 15
-VEOL2 = 16
-IGNBRK = 0000001
-BRKINT = 0000002
-IGNPAR = 0000004
-PARMRK = 0000010
-INPCK = 0000020
-ISTRIP = 0000040
-INLCR = 0000100
-IGNCR = 0000200
-ICRNL = 0000400
-IUCLC = 0001000
-IXON = 0002000
-IXANY = 0004000
-IXOFF = 0010000
-IMAXBEL = 0020000
-OPOST = 0000001
-OLCUC = 0000002
-ONLCR = 0000004
-OCRNL = 0000010
-ONOCR = 0000020
-ONLRET = 0000040
-OFILL = 0000100
-OFDEL = 0000200
-NLDLY = 0000400
-NL0 = 0000000
-NL1 = 0000400
-CRDLY = 0003000
-CR0 = 0000000
-CR1 = 0001000
-CR2 = 0002000
-CR3 = 0003000
-TABDLY = 0014000
-TAB0 = 0000000
-TAB1 = 0004000
-TAB2 = 0010000
-TAB3 = 0014000
-XTABS = 0014000
-BSDLY = 0020000
-BS0 = 0000000
-BS1 = 0020000
-VTDLY = 0040000
-VT0 = 0000000
-VT1 = 0040000
-FFDLY = 0100000
-FF0 = 0000000
-FF1 = 0100000
-CBAUD = 0010017
-B0 = 0000000
-B50 = 0000001
-B75 = 0000002
-B110 = 0000003
-B134 = 0000004
-B150 = 0000005
-B200 = 0000006
-B300 = 0000007
-B600 = 0000010
-B1200 = 0000011
-B1800 = 0000012
-B2400 = 0000013
-B4800 = 0000014
-B9600 = 0000015
-B19200 = 0000016
-B38400 = 0000017
-EXTA = B19200
-EXTB = B38400
-CSIZE = 0000060
-CS5 = 0000000
-CS6 = 0000020
-CS7 = 0000040
-CS8 = 0000060
-CSTOPB = 0000100
-CREAD = 0000200
-PARENB = 0000400
-PARODD = 0001000
-HUPCL = 0002000
-CLOCAL = 0004000
-CBAUDEX = 0010000
-B57600 = 0010001
-B115200 = 0010002
-B230400 = 0010003
-B460800 = 0010004
-CIBAUD = 002003600000
-CRTSCTS = 020000000000
-ISIG = 0000001
-ICANON = 0000002
-XCASE = 0000004
-ECHO = 0000010
-ECHOE = 0000020
-ECHOK = 0000040
-ECHONL = 0000100
-NOFLSH = 0000200
-TOSTOP = 0000400
-ECHOCTL = 0001000
-ECHOPRT = 0002000
-ECHOKE = 0004000
-FLUSHO = 0010000
-PENDIN = 0040000
-IEXTEN = 0100000
-TCOOFF = 0
-TCOON = 1
-TCIOFF = 2
-TCION = 3
-TCIFLUSH = 0
-TCOFLUSH = 1
-TCIOFLUSH = 2
-TCSANOW = 0
-TCSADRAIN = 1
-TCSAFLUSH = 2
-
-# Included from asm/ioctls.h
-
-# Included from asm/ioctl.h
-_IOC_NRBITS = 8
-_IOC_TYPEBITS = 8
-_IOC_SIZEBITS = 14
-_IOC_DIRBITS = 2
-_IOC_NRMASK = ((1 << _IOC_NRBITS)-1)
-_IOC_TYPEMASK = ((1 << _IOC_TYPEBITS)-1)
-_IOC_SIZEMASK = ((1 << _IOC_SIZEBITS)-1)
-_IOC_DIRMASK = ((1 << _IOC_DIRBITS)-1)
-_IOC_NRSHIFT = 0
-_IOC_TYPESHIFT = (_IOC_NRSHIFT+_IOC_NRBITS)
-_IOC_SIZESHIFT = (_IOC_TYPESHIFT+_IOC_TYPEBITS)
-_IOC_DIRSHIFT = (_IOC_SIZESHIFT+_IOC_SIZEBITS)
-def _IOC_DIR(nr): return (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
-
-def _IOC_TYPE(nr): return (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
-
-def _IOC_NR(nr): return (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
-
-def _IOC_SIZE(nr): return (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
-
-IOCSIZE_MASK = (_IOC_SIZEMASK << _IOC_SIZESHIFT)
-IOCSIZE_SHIFT = (_IOC_SIZESHIFT)
-TCGETS = 0x5401
-TCSETS = 0x5402
-TCSETSW = 0x5403
-TCSETSF = 0x5404
-TCGETA = 0x5405
-TCSETA = 0x5406
-TCSETAW = 0x5407
-TCSETAF = 0x5408
-TCSBRK = 0x5409
-TCXONC = 0x540A
-TCFLSH = 0x540B
-TIOCEXCL = 0x540C
-TIOCNXCL = 0x540D
-TIOCSCTTY = 0x540E
-TIOCGPGRP = 0x540F
-TIOCSPGRP = 0x5410
-TIOCOUTQ = 0x5411
-TIOCSTI = 0x5412
-TIOCGWINSZ = 0x5413
-TIOCSWINSZ = 0x5414
-TIOCMGET = 0x5415
-TIOCMBIS = 0x5416
-TIOCMBIC = 0x5417
-TIOCMSET = 0x5418
-TIOCGSOFTCAR = 0x5419
-TIOCSSOFTCAR = 0x541A
-FIONREAD = 0x541B
-TIOCINQ = FIONREAD
-TIOCLINUX = 0x541C
-TIOCCONS = 0x541D
-TIOCGSERIAL = 0x541E
-TIOCSSERIAL = 0x541F
-TIOCPKT = 0x5420
-FIONBIO = 0x5421
-TIOCNOTTY = 0x5422
-TIOCSETD = 0x5423
-TIOCGETD = 0x5424
-TCSBRKP = 0x5425
-TIOCTTYGSTRUCT = 0x5426
-FIONCLEX = 0x5450
-FIOCLEX = 0x5451
-FIOASYNC = 0x5452
-TIOCSERCONFIG = 0x5453
-TIOCSERGWILD = 0x5454
-TIOCSERSWILD = 0x5455
-TIOCGLCKTRMIOS = 0x5456
-TIOCSLCKTRMIOS = 0x5457
-TIOCSERGSTRUCT = 0x5458
-TIOCSERGETLSR = 0x5459
-TIOCSERGETMULTI = 0x545A
-TIOCSERSETMULTI = 0x545B
-TIOCMIWAIT = 0x545C
-TIOCGICOUNT = 0x545D
-TIOCPKT_DATA = 0
-TIOCPKT_FLUSHREAD = 1
-TIOCPKT_FLUSHWRITE = 2
-TIOCPKT_STOP = 4
-TIOCPKT_START = 8
-TIOCPKT_NOSTOP = 16
-TIOCPKT_DOSTOP = 32
-TIOCSER_TEMT = 0x01
-NCC = 8
-INIT_C_CC = "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
-TIOCM_LE = 0x001
-TIOCM_DTR = 0x002
-TIOCM_RTS = 0x004
-TIOCM_ST = 0x008
-TIOCM_SR = 0x010
-TIOCM_CTS = 0x020
-TIOCM_CAR = 0x040
-TIOCM_RNG = 0x080
-TIOCM_DSR = 0x100
-TIOCM_CD = TIOCM_CAR
-TIOCM_RI = TIOCM_RNG
-N_TTY = 0
-N_SLIP = 1
-N_MOUSE = 2
-N_PPP = 3
-N_STRIP = 4
-
-# Included from linux/string.h
-
-# Included from asm/string.h
-def COMMON(x): return \
-
-def COMMON(x): return \
-
-def CTRL(ch): return ((ch)&0x1F)
-
-IBSHIFT = 16
-CNUL = 0
-CDEL = 0177
-CESC = ord('\\')
-CINTR = 0177
-CQUIT = 034
-CERASE = ord('#')
-CKILL = ord('@')
-CEOT = 04
-CEOL = 0
-CEOL2 = 0
-CEOF = 4
-CSTART = 021
-CSTOP = 023
-CSWTCH = 032
-NSWTCH = 0
-CSUSP = CTRL(ord('Z'))
-CDSUSP = CTRL(ord('Y'))
-CRPRNT = CTRL(ord('R'))
-CFLUSH = CTRL(ord('O'))
-CWERASE = CTRL(ord('W'))
-CLNEXT = CTRL(ord('V'))
diff --git a/Lib/linux2/regen b/Lib/linux2/regen
deleted file mode 100755
index d8dbc04..0000000
--- a/Lib/linux2/regen
+++ /dev/null
@@ -1,11 +0,0 @@
-#! /bin/sh
-case `uname` in
-Linux*)	;;
-*)	echo Probably not on a Linux system 1>&2
-	exit 1;;
-esac
-set -v
-h2py /usr/include/sys/fcntl.h
-h2py /usr/include/sys/socket.h
-h2py -i '(u_long)' /usr/include/netinet/in.h
-h2py /usr/include/termios.h
diff --git a/Lib/next3/regen b/Lib/next3/regen
deleted file mode 100755
index fe4f4b5..0000000
--- a/Lib/next3/regen
+++ /dev/null
@@ -1,11 +0,0 @@
-#! /bin/sh
-set -v
-INCLUDE="/NextDeveloper/Headers;/NextDeveloper/Headers/ansi;/NextDeveloper/Headers/bsd"
-export INCLUDE
-
-python ../../Tools/scripts/h2py.py /usr/include/bsd/sys/fcntl.h
-echo "Adding O_NDELAY and O_SYNC"
-echo "O_NDELAY = FNDELAY" >> FCNTL.py
-echo "O_SYNC = FSYNC" >> FCNTL.py
-python ../../Tools/scripts/h2py.py /usr/include/bsd/sys/socket.h
-python ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/bsd/netinet/in.h
diff --git a/Lib/sunos4/FCNTL.py b/Lib/sunos4/FCNTL.py
deleted file mode 100755
index 1256d81..0000000
--- a/Lib/sunos4/FCNTL.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# Generated by h2py from stdin
-_FOPEN = (-1)
-_FREAD = 0x0001
-_FWRITE = 0x0002
-_FNDELAY = 0x0004
-_FAPPEND = 0x0008
-_FSETBLK = 0x0010
-_FASYNC = 0x0040
-_FSHLOCK = 0x0080
-_FEXLOCK = 0x0100
-_FCREAT = 0x0200
-_FTRUNC = 0x0400
-_FEXCL = 0x0800
-_FNBIO = 0x1000
-_FSYNC = 0x2000
-_FNONBLOCK = 0x4000
-_FNOCTTY = 0x8000
-_FMARK = 0x10000
-_FDEFER = 0x20000
-O_RDONLY = 0
-O_WRONLY = 1
-O_RDWR = 2
-O_APPEND = _FAPPEND
-O_CREAT = _FCREAT
-O_TRUNC = _FTRUNC
-O_EXCL = _FEXCL
-O_NONBLOCK = _FNONBLOCK
-O_NOCTTY = _FNOCTTY
-O_SYNC = _FSYNC
-FAPPEND = _FAPPEND
-FSYNC = _FSYNC
-FASYNC = _FASYNC
-FNBIO = _FNBIO
-FNONBIO = _FNONBLOCK
-FNDELAY = _FNDELAY
-FREAD = _FREAD
-FWRITE = _FWRITE
-FMARK = _FMARK
-FDEFER = _FDEFER
-FSETBLK = _FSETBLK
-FSHLOCK = _FSHLOCK
-FEXLOCK = _FEXLOCK
-FOPEN = _FOPEN
-FCREAT = _FCREAT
-FTRUNC = _FTRUNC
-FEXCL = _FEXCL
-FNOCTTY = _FNOCTTY
-FD_CLOEXEC = 1
-F_DUPFD = 0
-F_GETFD = 1
-F_SETFD = 2
-F_GETFL = 3
-F_SETFL = 4
-F_GETOWN = 5
-F_SETOWN = 6
-F_GETLK = 7
-F_SETLK = 8
-F_SETLKW = 9
-F_RGETLK = 10
-F_RSETLK = 11
-F_CNVT = 12
-F_RSETLKW = 13
-F_RDLCK = 1
-F_WRLCK = 2
-F_UNLCK = 3
-F_UNLKSYS = 4
-O_ACCMODE = (O_RDONLY|O_WRONLY|O_RDWR)
diff --git a/Lib/sunos4/IN.py b/Lib/sunos4/IN.py
deleted file mode 100755
index a05a944..0000000
--- a/Lib/sunos4/IN.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Generated by h2py from /usr/include/netinet/in.h
-IPPROTO_IP = 0
-IPPROTO_ICMP = 1
-IPPROTO_IGMP = 2
-IPPROTO_GGP = 3
-IPPROTO_TCP = 6
-IPPROTO_EGP = 8
-IPPROTO_PUP = 12
-IPPROTO_UDP = 17
-IPPROTO_IDP = 22
-IPPROTO_HELLO = 63
-IPPROTO_ND = 77
-IPPROTO_RAW = 255
-IPPROTO_MAX = 256
-IPPORT_ECHO = 7
-IPPORT_DISCARD = 9
-IPPORT_SYSTAT = 11
-IPPORT_DAYTIME = 13
-IPPORT_NETSTAT = 15
-IPPORT_FTP = 21
-IPPORT_TELNET = 23
-IPPORT_SMTP = 25
-IPPORT_TIMESERVER = 37
-IPPORT_NAMESERVER = 42
-IPPORT_WHOIS = 43
-IPPORT_MTP = 57
-IPPORT_TFTP = 69
-IPPORT_RJE = 77
-IPPORT_FINGER = 79
-IPPORT_TTYLINK = 87
-IPPORT_SUPDUP = 95
-IPPORT_EXECSERVER = 512
-IPPORT_LOGINSERVER = 513
-IPPORT_CMDSERVER = 514
-IPPORT_EFSSERVER = 520
-IPPORT_BIFFUDP = 512
-IPPORT_WHOSERVER = 513
-IPPORT_ROUTESERVER = 520
-IPPORT_RESERVED = 1024
-IPPORT_USERRESERVED = 5000
-IMPLINK_IP = 155
-IMPLINK_LOWEXPER = 156
-IMPLINK_HIGHEXPER = 158
-IN_CLASSA_NET = 0xff000000
-IN_CLASSA_NSHIFT = 24
-IN_CLASSA_HOST = 0x00ffffff
-IN_CLASSA_MAX = 128
-IN_CLASSB_NET = 0xffff0000
-IN_CLASSB_NSHIFT = 16
-IN_CLASSB_HOST = 0x0000ffff
-IN_CLASSB_MAX = 65536
-IN_CLASSC_NET = 0xffffff00
-IN_CLASSC_NSHIFT = 8
-IN_CLASSC_HOST = 0x000000ff
-INADDR_ANY = 0x00000000
-INADDR_LOOPBACK = 0x7F000001
-INADDR_BROADCAST = 0xffffffff
-IN_LOOPBACKNET = 127
-IP_OPTIONS = 1
diff --git a/Lib/sunos4/SOCKET.py b/Lib/sunos4/SOCKET.py
deleted file mode 100755
index 65ce4bc..0000000
--- a/Lib/sunos4/SOCKET.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# Generated by h2py from /usr/include/sys/socket.h
-SOCK_STREAM = 1
-SOCK_DGRAM = 2
-SOCK_RAW = 3
-SOCK_RDM = 4
-SOCK_SEQPACKET = 5
-SO_DEBUG = 0x0001
-SO_ACCEPTCONN = 0x0002
-SO_REUSEADDR = 0x0004
-SO_KEEPALIVE = 0x0008
-SO_DONTROUTE = 0x0010
-SO_BROADCAST = 0x0020
-SO_USELOOPBACK = 0x0040
-SO_LINGER = 0x0080
-SO_OOBINLINE = 0x0100
-SO_DONTLINGER = (~SO_LINGER)
-SO_SNDBUF = 0x1001
-SO_RCVBUF = 0x1002
-SO_SNDLOWAT = 0x1003
-SO_RCVLOWAT = 0x1004
-SO_SNDTIMEO = 0x1005
-SO_RCVTIMEO = 0x1006
-SO_ERROR = 0x1007
-SO_TYPE = 0x1008
-SOL_SOCKET = 0xffff
-AF_UNSPEC = 0
-AF_UNIX = 1
-AF_INET = 2
-AF_IMPLINK = 3
-AF_PUP = 4
-AF_CHAOS = 5
-AF_NS = 6
-AF_NBS = 7
-AF_ECMA = 8
-AF_DATAKIT = 9
-AF_CCITT = 10
-AF_SNA = 11
-AF_DECnet = 12
-AF_DLI = 13
-AF_LAT = 14
-AF_HYLINK = 15
-AF_APPLETALK = 16
-AF_NIT = 17
-AF_802 = 18
-AF_OSI = 19
-AF_X25 = 20
-AF_OSINET = 21
-AF_GOSIP = 22
-AF_MAX = 21
-PF_UNSPEC = AF_UNSPEC
-PF_UNIX = AF_UNIX
-PF_INET = AF_INET
-PF_IMPLINK = AF_IMPLINK
-PF_PUP = AF_PUP
-PF_CHAOS = AF_CHAOS
-PF_NS = AF_NS
-PF_NBS = AF_NBS
-PF_ECMA = AF_ECMA
-PF_DATAKIT = AF_DATAKIT
-PF_CCITT = AF_CCITT
-PF_SNA = AF_SNA
-PF_DECnet = AF_DECnet
-PF_DLI = AF_DLI
-PF_LAT = AF_LAT
-PF_HYLINK = AF_HYLINK
-PF_APPLETALK = AF_APPLETALK
-PF_NIT = AF_NIT
-PF_802 = AF_802
-PF_OSI = AF_OSI
-PF_X25 = AF_X25
-PF_OSINET = AF_OSINET
-PF_GOSIP = AF_GOSIP
-PF_MAX = AF_MAX
-SOMAXCONN = 5
-MSG_OOB = 0x1
-MSG_PEEK = 0x2
-MSG_DONTROUTE = 0x4
-MSG_MAXIOVLEN = 16
diff --git a/Lib/sunos4/SUNAUDIODEV.py b/Lib/sunos4/SUNAUDIODEV.py
deleted file mode 100755
index b66610d..0000000
--- a/Lib/sunos4/SUNAUDIODEV.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Symbolic constants for use with sunaudiodev module
-# The names are the same as in audioio.h with the leading AUDIO_
-# removed.
-
-# Not all values are supported on all releases of SunOS.
-
-# Encoding types, for fields i_encoding and o_encoding
-
-ENCODING_NONE = 0			# no encoding assigned
-ENCODING_ULAW = 1			# u-law encoding
-ENCODING_ALAW = 2			# A-law encoding
-ENCODING_LINEAR = 3			# Linear PCM encoding
-
-# Gain ranges for i_gain, o_gain and monitor_gain
-
-MIN_GAIN = 0				# minimum gain value
-MAX_GAIN = 255				# maximum gain value
-
-# Balance values for i_balance and o_balance
-
-LEFT_BALANCE = 0			# left channel only
-MID_BALANCE = 32			# equal left/right channel
-RIGHT_BALANCE = 64			# right channel only
-BALANCE_SHIFT = 3
-
-# Port names for i_port and o_port
-
-PORT_A = 1
-PORT_B = 2
-PORT_C = 3
-PORT_D = 4
-
-SPEAKER = 0x01				# output to built-in speaker
-HEADPHONE = 0x02			# output to headphone jack
-LINE_OUT = 0x04				# output to line out
-
-MICROPHONE = 0x01			# input from microphone
-LINE_IN = 0x02				# input from line in
diff --git a/Lib/sunos4/WAIT.py b/Lib/sunos4/WAIT.py
deleted file mode 100755
index 43612f0..0000000
--- a/Lib/sunos4/WAIT.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by h2py from /usr/include/sys/wait.h
-WUNTRACED = 0004
-WNOHANG = 0100
-WEXITED = 0001
-WTRAPPED = 0002
-WSTOPPED = WUNTRACED
-WCONTINUED = 0010
-WNOWAIT = 0200
-WOPTMASK = (WEXITED|WTRAPPED|WSTOPPED|WCONTINUED|WNOHANG|WNOWAIT)
-WSTOPFLG = 0177
-WCONTFLG = 0177777
-WCOREFLG = 0200
-WSIGMASK = 0177
diff --git a/Lib/sunos4/regen b/Lib/sunos4/regen
deleted file mode 100755
index 8b52d74..0000000
--- a/Lib/sunos4/regen
+++ /dev/null
@@ -1,12 +0,0 @@
-#! /bin/sh
-case `uname -sr` in
-'SunOS 4.'*)	;;
-*)	echo Probably not on a SunOS 4 system 1>&2
-	exit 1;;
-esac
-set -v
-h2py </usr/include/sys/fcntlcom.h >FCNTL.py
-echo "O_ACCMODE = (O_RDONLY|O_WRONLY|O_RDWR)" >>FCNTL.py
-h2py /usr/include/sys/socket.h
-h2py /usr/include/sys/wait.h
-h2py -i '(u_long)' /usr/include/netinet/in.h
diff --git a/Lib/sunos5/FCNTL.py b/Lib/sunos5/FCNTL.py
deleted file mode 100755
index 78dbe70..0000000
--- a/Lib/sunos5/FCNTL.py
+++ /dev/null
@@ -1,204 +0,0 @@
-# Generated by h2py from /usr/include/sys/fcntl.h
-
-# Included from sys/feature_tests.h
-_POSIX_C_SOURCE = 1
-
-# Included from sys/types.h
-
-# Included from sys/isa_defs.h
-_CHAR_ALIGNMENT = 1
-_SHORT_ALIGNMENT = 2
-_INT_ALIGNMENT = 4
-_LONG_ALIGNMENT = 4
-_LONG_LONG_ALIGNMENT = 4
-_DOUBLE_ALIGNMENT = 4
-_LONG_DOUBLE_ALIGNMENT = 4
-_POINTER_ALIGNMENT = 4
-_MAX_ALIGNMENT = 4
-_ALIGNMENT_REQUIRED = 0
-_CHAR_ALIGNMENT = 1
-_SHORT_ALIGNMENT = 2
-_INT_ALIGNMENT = 4
-_LONG_ALIGNMENT = 4
-_LONG_LONG_ALIGNMENT = 8
-_DOUBLE_ALIGNMENT = 8
-_LONG_DOUBLE_ALIGNMENT = 16
-_POINTER_ALIGNMENT = 4
-_MAX_ALIGNMENT = 16
-_ALIGNMENT_REQUIRED = 1
-_CHAR_ALIGNMENT = 1
-_SHORT_ALIGNMENT = 2
-_INT_ALIGNMENT = 4
-_LONG_ALIGNMENT = 4
-_LONG_LONG_ALIGNMENT = 8
-_DOUBLE_ALIGNMENT = 8
-_LONG_DOUBLE_ALIGNMENT = 8
-_POINTER_ALIGNMENT = 4
-_MAX_ALIGNMENT = 8
-_ALIGNMENT_REQUIRED = 1
-
-# Included from sys/machtypes.h
-SHRT_MIN = -32768
-SHRT_MAX = 32767
-INT_MIN = (-2147483647-1)
-INT_MAX = 2147483647
-LONG_MIN = (-2147483647-1)
-LONG_MAX = 2147483647
-P_MYID = (-1)
-
-# Included from sys/select.h
-
-# Included from sys/time.h
-DST_NONE = 0
-DST_USA = 1
-DST_AUST = 2
-DST_WET = 3
-DST_MET = 4
-DST_EET = 5
-DST_CAN = 6
-DST_GB = 7
-DST_RUM = 8
-DST_TUR = 9
-DST_AUSTALT = 10
-ITIMER_REAL = 0
-ITIMER_VIRTUAL = 1
-ITIMER_PROF = 2
-ITIMER_REALPROF = 3
-SEC = 1
-MILLISEC = 1000
-MICROSEC = 1000000
-NANOSEC = 1000000000
-__CLOCK_REALTIME0 = 0
-CLOCK_VIRTUAL = 1
-CLOCK_PROF = 2
-__CLOCK_REALTIME3 = 3
-CLOCK_REALTIME = __CLOCK_REALTIME3
-CLOCK_REALTIME = __CLOCK_REALTIME0
-TIMER_RELTIME = 0x0
-TIMER_ABSTIME = 0x1
-
-# Included from sys/mutex.h
-
-# Included from sys/dki_lkinfo.h
-
-# Included from sys/dl.h
-NOSTATS = 1
-LSB_NLKDS = 91
-def MUTEX_HELD(x): return (mutex_owned(x))
-
-
-# Included from time.h
-NULL = 0
-CLOCKS_PER_SEC = 1000000
-
-# Included from sys/siginfo.h
-SIGEV_NONE = 1
-SIGEV_SIGNAL = 2
-SIGEV_THREAD = 3
-SI_NOINFO = 32767
-SI_USER = 0
-SI_LWP = (-1)
-SI_QUEUE = (-2)
-SI_TIMER = (-3)
-SI_ASYNCIO = (-4)
-SI_MESGQ = (-5)
-
-# Included from sys/machsig.h
-ILL_ILLOPC = 1
-ILL_ILLOPN = 2
-ILL_ILLADR = 3
-ILL_ILLTRP = 4
-ILL_PRVOPC = 5
-ILL_PRVREG = 6
-ILL_COPROC = 7
-ILL_BADSTK = 8
-NSIGILL = 8
-EMT_TAGOVF = 1
-NSIGEMT = 1
-FPE_INTDIV = 1
-FPE_INTOVF = 2
-FPE_FLTDIV = 3
-FPE_FLTOVF = 4
-FPE_FLTUND = 5
-FPE_FLTRES = 6
-FPE_FLTINV = 7
-FPE_FLTSUB = 8
-NSIGFPE = 8
-SEGV_MAPERR = 1
-SEGV_ACCERR = 2
-NSIGSEGV = 2
-BUS_ADRALN = 1
-BUS_ADRERR = 2
-BUS_OBJERR = 3
-NSIGBUS = 3
-TRAP_BRKPT = 1
-TRAP_TRACE = 2
-NSIGTRAP = 2
-CLD_EXITED = 1
-CLD_KILLED = 2
-CLD_DUMPED = 3
-CLD_TRAPPED = 4
-CLD_STOPPED = 5
-CLD_CONTINUED = 6
-NSIGCLD = 6
-POLL_IN = 1
-POLL_OUT = 2
-POLL_MSG = 3
-POLL_ERR = 4
-POLL_PRI = 5
-POLL_HUP = 6
-NSIGPOLL = 6
-PROF_SIG = 1
-NSIGPROF = 1
-SI_MAXSZ = 128
-def SI_CANQUEUE(c): return ((c) <= SI_QUEUE)
-
-FD_SETSIZE = 1024
-NBBY = 8
-O_RDONLY = 0
-O_WRONLY = 1
-O_RDWR = 2
-O_NDELAY = 0x04
-O_APPEND = 0x08
-O_SYNC = 0x10
-O_DSYNC = 0x40
-O_RSYNC = 0x8000
-O_NONBLOCK = 0x80
-O_PRIV = 0x1000
-O_CREAT = 0x100
-O_TRUNC = 0x200
-O_EXCL = 0x400
-O_NOCTTY = 0x800
-F_DUPFD = 0
-F_GETFD = 1
-F_SETFD = 2
-F_GETFL = 3
-F_SETFL = 4
-F_SETLK = 6
-F_SETLKW = 7
-F_O_GETLK = 5
-F_SETLK = 6
-F_SETLKW = 7
-F_CHKFL = 8
-F_ALLOCSP = 10
-F_FREESP = 11
-F_ISSTREAM = 13
-F_GETLK = 14
-F_PRIV = 15
-F_NPRIV = 16
-F_QUOTACTL = 17
-F_BLOCKS = 18
-F_BLKSIZE = 19
-F_RSETLK = 20
-F_RGETLK = 21
-F_RSETLKW = 22
-F_GETOWN = 23
-F_SETOWN = 24
-F_REVOKE = 25
-F_HASREMOTELOCKS = 26
-F_RDLCK = 01
-F_WRLCK = 02
-F_UNLCK = 03
-F_UNLKSYS = 04
-O_ACCMODE = 3
-FD_CLOEXEC = 1
diff --git a/Lib/sunos5/IN.py b/Lib/sunos5/IN.py
deleted file mode 100755
index d5406a2..0000000
--- a/Lib/sunos5/IN.py
+++ /dev/null
@@ -1,1086 +0,0 @@
-# Generated by h2py from /usr/include/netinet/in.h
-
-# Included from sys/stream.h
-
-# Included from sys/vnode.h
-
-# Included from sys/types.h
-
-# Included from sys/feature_tests.h
-_POSIX_C_SOURCE = 1
-
-# Included from sys/isa_defs.h
-_CHAR_ALIGNMENT = 1
-_SHORT_ALIGNMENT = 2
-_INT_ALIGNMENT = 4
-_LONG_ALIGNMENT = 4
-_LONG_LONG_ALIGNMENT = 4
-_DOUBLE_ALIGNMENT = 4
-_LONG_DOUBLE_ALIGNMENT = 4
-_POINTER_ALIGNMENT = 4
-_MAX_ALIGNMENT = 4
-_ALIGNMENT_REQUIRED = 0
-_CHAR_ALIGNMENT = 1
-_SHORT_ALIGNMENT = 2
-_INT_ALIGNMENT = 4
-_LONG_ALIGNMENT = 4
-_LONG_LONG_ALIGNMENT = 8
-_DOUBLE_ALIGNMENT = 8
-_LONG_DOUBLE_ALIGNMENT = 16
-_POINTER_ALIGNMENT = 4
-_MAX_ALIGNMENT = 16
-_ALIGNMENT_REQUIRED = 1
-_CHAR_ALIGNMENT = 1
-_SHORT_ALIGNMENT = 2
-_INT_ALIGNMENT = 4
-_LONG_ALIGNMENT = 4
-_LONG_LONG_ALIGNMENT = 8
-_DOUBLE_ALIGNMENT = 8
-_LONG_DOUBLE_ALIGNMENT = 8
-_POINTER_ALIGNMENT = 4
-_MAX_ALIGNMENT = 8
-_ALIGNMENT_REQUIRED = 1
-
-# Included from sys/machtypes.h
-SHRT_MIN = -32768
-SHRT_MAX = 32767
-INT_MIN = (-2147483647-1)
-INT_MAX = 2147483647
-LONG_MIN = (-2147483647-1)
-LONG_MAX = 2147483647
-P_MYID = (-1)
-
-# Included from sys/select.h
-
-# Included from sys/time.h
-DST_NONE = 0
-DST_USA = 1
-DST_AUST = 2
-DST_WET = 3
-DST_MET = 4
-DST_EET = 5
-DST_CAN = 6
-DST_GB = 7
-DST_RUM = 8
-DST_TUR = 9
-DST_AUSTALT = 10
-ITIMER_REAL = 0
-ITIMER_VIRTUAL = 1
-ITIMER_PROF = 2
-ITIMER_REALPROF = 3
-SEC = 1
-MILLISEC = 1000
-MICROSEC = 1000000
-NANOSEC = 1000000000
-__CLOCK_REALTIME0 = 0
-CLOCK_VIRTUAL = 1
-CLOCK_PROF = 2
-__CLOCK_REALTIME3 = 3
-CLOCK_REALTIME = __CLOCK_REALTIME3
-CLOCK_REALTIME = __CLOCK_REALTIME0
-TIMER_RELTIME = 0x0
-TIMER_ABSTIME = 0x1
-
-# Included from sys/mutex.h
-
-# Included from sys/dki_lkinfo.h
-
-# Included from sys/dl.h
-NOSTATS = 1
-LSB_NLKDS = 91
-def MUTEX_HELD(x): return (mutex_owned(x))
-
-
-# Included from time.h
-NULL = 0
-CLOCKS_PER_SEC = 1000000
-
-# Included from sys/siginfo.h
-SIGEV_NONE = 1
-SIGEV_SIGNAL = 2
-SIGEV_THREAD = 3
-SI_NOINFO = 32767
-SI_USER = 0
-SI_LWP = (-1)
-SI_QUEUE = (-2)
-SI_TIMER = (-3)
-SI_ASYNCIO = (-4)
-SI_MESGQ = (-5)
-
-# Included from sys/machsig.h
-ILL_ILLOPC = 1
-ILL_ILLOPN = 2
-ILL_ILLADR = 3
-ILL_ILLTRP = 4
-ILL_PRVOPC = 5
-ILL_PRVREG = 6
-ILL_COPROC = 7
-ILL_BADSTK = 8
-NSIGILL = 8
-EMT_TAGOVF = 1
-NSIGEMT = 1
-FPE_INTDIV = 1
-FPE_INTOVF = 2
-FPE_FLTDIV = 3
-FPE_FLTOVF = 4
-FPE_FLTUND = 5
-FPE_FLTRES = 6
-FPE_FLTINV = 7
-FPE_FLTSUB = 8
-NSIGFPE = 8
-SEGV_MAPERR = 1
-SEGV_ACCERR = 2
-NSIGSEGV = 2
-BUS_ADRALN = 1
-BUS_ADRERR = 2
-BUS_OBJERR = 3
-NSIGBUS = 3
-TRAP_BRKPT = 1
-TRAP_TRACE = 2
-NSIGTRAP = 2
-CLD_EXITED = 1
-CLD_KILLED = 2
-CLD_DUMPED = 3
-CLD_TRAPPED = 4
-CLD_STOPPED = 5
-CLD_CONTINUED = 6
-NSIGCLD = 6
-POLL_IN = 1
-POLL_OUT = 2
-POLL_MSG = 3
-POLL_ERR = 4
-POLL_PRI = 5
-POLL_HUP = 6
-NSIGPOLL = 6
-PROF_SIG = 1
-NSIGPROF = 1
-SI_MAXSZ = 128
-def SI_CANQUEUE(c): return ((c) <= SI_QUEUE)
-
-FD_SETSIZE = 1024
-NBBY = 8
-
-# Included from sys/t_lock.h
-
-# Included from sys/machlock.h
-LOCK_HELD_VALUE = 0xff
-def SPIN_LOCK(pl): return ((pl) > ipltospl(LOCK_LEVEL))
-
-def LOCK_SAMPLE_INTERVAL(i): return (((i) & 0xff) == 0)
-
-LOCK_LEVEL = 10
-CLOCK_LEVEL = 10
-PTR24_LSB = 5
-PTR24_MSB = (PTR24_LSB + 24)
-PTR24_ALIGN = 32
-PTR24_BASE = 0xe0000000
-
-# Included from sys/sleepq.h
-NSLEEPQ = 512
-
-# Included from sys/turnstile.h
-
-# Included from sys/param.h
-_POSIX_VDISABLE = 0
-MAX_INPUT = 512
-MAX_CANON = 256
-UID_NOBODY = 60001
-GID_NOBODY = UID_NOBODY
-UID_NOACCESS = 60002
-MAXPID = 30000
-MAXUID = 2147483647
-MAXLINK = 32767
-NMOUNT = 40
-CANBSIZ = 256
-NOFILE = 20
-NGROUPS_UMIN = 0
-NGROUPS_UMAX = 32
-NGROUPS_MAX_DEFAULT = 16
-PMASK = 0177
-PCATCH = 0400
-PNOSTOP = 01000
-PSWP = 0
-PINOD = 10
-PSNDD = PINOD
-PAMAP = PINOD
-PPMAP = PAMAP
-PRIBIO = 20
-PZERO = 25
-PMEM = 0
-NZERO = 20
-PPIPE = 26
-PVFS = 27
-PWAIT = 30
-PLOCK = 35
-PSLEP = 39
-PUSER = 60
-PIDLE = 127
-NULL = 0
-CMASK = 0
-CDLIMIT = (1L<<11)
-NBPS = 0x20000
-NBPSCTR = 512
-UBSIZE = 512
-SCTRSHFT = 9
-SYSNAME = 9
-PREMOTE = 39
-MAXPATHLEN = 1024
-MAXSYMLINKS = 20
-MAXNAMELEN = 256
-NADDR = 13
-PIPE_BUF = 5120
-PIPE_MAX = 5120
-NBBY = 8
-MAXBSIZE = 8192
-DEV_BSIZE = 512
-DEV_BSHIFT = 9
-MAXFRAG = 8
-def btodb(bytes): return   \
-
-def dbtob(db): return   \
-
-def lbtodb(bytes): return   \
-
-def ldbtob(db): return   \
-
-NCARGS = 0x100000
-FSHIFT = 8
-FSCALE = (1<<FSHIFT)
-def DELAY(n): return drv_usecwait(n)
-
-def mmu_ptob(x): return ((x) << MMU_PAGESHIFT)
-
-def mmu_btop(x): return (((unsigned)(x)) >> MMU_PAGESHIFT)
-
-def mmu_btopr(x): return ((((unsigned)(x) + MMU_PAGEOFFSET) >> MMU_PAGESHIFT))
-
-def mmu_ptod(x): return ((x) << (MMU_PAGESHIFT - DEV_BSHIFT))
-
-def ptod(x): return ((x) << (PAGESHIFT - DEV_BSHIFT))
-
-def ptob(x): return ((x) << PAGESHIFT)
-
-def btop(x): return (((unsigned)(x)) >> PAGESHIFT)
-
-def btopr(x): return ((((unsigned)(x) + PAGEOFFSET) >> PAGESHIFT))
-
-def dtop(DD): return (((DD) + NDPP - 1) >> (PAGESHIFT - DEV_BSHIFT))
-
-def dtopt(DD): return ((DD) >> (PAGESHIFT - DEV_BSHIFT))
-
-def PAGOFF(x): return (((uint)(x)) & PAGEOFFSET)
-
-
-# Included from sys/unistd.h
-_SC_ARG_MAX = 1
-_SC_CHILD_MAX = 2
-_SC_CLK_TCK = 3
-_SC_NGROUPS_MAX = 4
-_SC_OPEN_MAX = 5
-_SC_JOB_CONTROL = 6
-_SC_SAVED_IDS = 7
-_SC_VERSION = 8
-_SC_PASS_MAX = 9
-_SC_LOGNAME_MAX = 10
-_SC_PAGESIZE = 11
-_SC_XOPEN_VERSION = 12
-_SC_NPROCESSORS_CONF = 14
-_SC_NPROCESSORS_ONLN = 15
-_SC_STREAM_MAX = 16
-_SC_TZNAME_MAX = 17
-_SC_AIO_LISTIO_MAX = 18
-_SC_AIO_MAX = 19
-_SC_AIO_PRIO_DELTA_MAX = 20
-_SC_ASYNCHRONOUS_IO = 21
-_SC_DELAYTIMER_MAX = 22
-_SC_FSYNC = 23
-_SC_MAPPED_FILES = 24
-_SC_MEMLOCK = 25
-_SC_MEMLOCK_RANGE = 26
-_SC_MEMORY_PROTECTION = 27
-_SC_MESSAGE_PASSING = 28
-_SC_MQ_OPEN_MAX = 29
-_SC_MQ_PRIO_MAX = 30
-_SC_PRIORITIZED_IO = 31
-_SC_PRIORITY_SCHEDULING = 32
-_SC_REALTIME_SIGNALS = 33
-_SC_RTSIG_MAX = 34
-_SC_SEMAPHORES = 35
-_SC_SEM_NSEMS_MAX = 36
-_SC_SEM_VALUE_MAX = 37
-_SC_SHARED_MEMORY_OBJECTS = 38
-_SC_SIGQUEUE_MAX = 39
-_SC_SIGRT_MIN = 40
-_SC_SIGRT_MAX = 41
-_SC_SYNCHRONIZED_IO = 42
-_SC_TIMERS = 43
-_SC_TIMER_MAX = 44
-_SC_2_C_BIND = 45
-_SC_2_C_DEV = 46
-_SC_2_C_VERSION = 47
-_SC_2_FORT_DEV = 48
-_SC_2_FORT_RUN = 49
-_SC_2_LOCALEDEF = 50
-_SC_2_SW_DEV = 51
-_SC_2_UPE = 52
-_SC_2_VERSION = 53
-_SC_BC_BASE_MAX = 54
-_SC_BC_DIM_MAX = 55
-_SC_BC_SCALE_MAX = 56
-_SC_BC_STRING_MAX = 57
-_SC_COLL_WEIGHTS_MAX = 58
-_SC_EXPR_NEST_MAX = 59
-_SC_LINE_MAX = 60
-_SC_RE_DUP_MAX = 61
-_SC_XOPEN_CRYPT = 62
-_SC_XOPEN_ENH_I18N = 63
-_SC_XOPEN_SHM = 64
-_CS_PATH = 65
-_SC_2_CHAR_TERM = 66
-_SC_XOPEN_XCU_VERSION = 67
-_SC_PHYS_PAGES = 500
-_SC_AVPHYS_PAGES = 501
-_SC_COHER_BLKSZ = 503
-_SC_SPLIT_CACHE = 504
-_SC_ICACHE_SZ = 505
-_SC_DCACHE_SZ = 506
-_SC_ICACHE_LINESZ = 507
-_SC_DCACHE_LINESZ = 508
-_SC_ICACHE_BLKSZ = 509
-_SC_DCACHE_BLKSZ = 510
-_SC_DCACHE_TBLKSZ = 511
-_SC_ICACHE_ASSOC = 512
-_SC_DCACHE_ASSOC = 513
-_SC_THREAD_DESTRUCTOR_ITERATIONS = 568
-_SC_GETGR_R_SIZE_MAX = 569
-_SC_GETPW_R_SIZE_MAX = 570
-_SC_LOGIN_NAME_MAX = 571
-_SC_THREAD_KEYS_MAX = 572
-_SC_THREAD_STACK_MIN = 573
-_SC_THREAD_THREADS_MAX = 574
-_SC_TTY_NAME_MAX = 575
-_SC_THREADS = 576
-_SC_THREAD_ATTR_STACKADDR = 577
-_SC_THREAD_ATTR_STACKSIZE = 578
-_SC_THREAD_PRIORITY_SCHEDULING = 579
-_SC_THREAD_PRIO_INHERIT = 580
-_SC_THREAD_PRIO_PROTECT = 581
-_SC_THREAD_PROCESS_SHARED = 582
-_SC_THREAD_SAFE_FUNCTIONS = 583
-_SC_PPC_GRANULE_SZ = 601
-_SC_PPC_TB_TICKSPSECH = 602
-_SC_PPC_TB_TICKSPSECL = 603
-_PC_LINK_MAX = 1
-_PC_MAX_CANON = 2
-_PC_MAX_INPUT = 3
-_PC_NAME_MAX = 4
-_PC_PATH_MAX = 5
-_PC_PIPE_BUF = 6
-_PC_NO_TRUNC = 7
-_PC_VDISABLE = 8
-_PC_CHOWN_RESTRICTED = 9
-_PC_ASYNC_IO = 10
-_PC_PRIO_IO = 11
-_PC_SYNC_IO = 12
-_PC_LAST = 12
-_POSIX_VERSION = 199506L
-_POSIX2_VERSION = 199209L
-_POSIX2_C_VERSION = 199209L
-_XOPEN_VERSION = 3
-_XOPEN_XCU_VERSION = 4
-_POSIX2_C_BIND = 1
-_POSIX2_CHAR_TERM = 1
-_POSIX2_LOCALEDEF = 1
-_POSIX2_C_DEV = 1
-_POSIX2_SW_DEV = 1
-_POSIX2_UPE = 1
-
-# Included from sys/pirec.h
-NTSTILE_SQ = 2
-TSTILE_FREE = 0
-TSTILE_ACTIVE = 1
-TS_ROWSZ = 512
-TS_COLSZ = 128
-TS_ROWBITS = 9
-TS_COLBITS = 7
-TS_ROWMASK = ((1 << TS_ROWBITS) - 1)
-def TS_COL(ts_id): return ((ts_id) >> TS_ROWBITS)
-
-def TS_ROW(ts_id): return ((ts_id) & TS_ROWMASK)
-
-def TSTILE_PRIO_INVERTED(ts): return \
-
-
-# Included from sys/rwlock.h
-def RW_READ_HELD(x): return (rw_read_held((x)))
-
-def RW_WRITE_HELD(x): return (rw_write_held((x)))
-
-def RW_LOCK_HELD(x): return (rw_lock_held((x)))
-
-def RW_ISWRITER(x): return (rw_iswriter(x))
-
-
-# Included from sys/semaphore.h
-
-# Included from sys/thread.h
-
-# Included from sys/class.h
-
-# Included from sys/klwp.h
-
-# Included from sys/condvar.h
-
-# Included from sys/signal.h
-SIGHUP = 1
-SIGINT = 2
-SIGQUIT = 3
-SIGILL = 4
-SIGTRAP = 5
-SIGIOT = 6
-SIGABRT = 6
-SIGEMT = 7
-SIGFPE = 8
-SIGKILL = 9
-SIGBUS = 10
-SIGSEGV = 11
-SIGSYS = 12
-SIGPIPE = 13
-SIGALRM = 14
-SIGTERM = 15
-SIGUSR1 = 16
-SIGUSR2 = 17
-SIGCLD = 18
-SIGCHLD = 18
-SIGPWR = 19
-SIGWINCH = 20
-SIGURG = 21
-SIGPOLL = 22
-SIGIO = SIGPOLL
-SIGSTOP = 23
-SIGTSTP = 24
-SIGCONT = 25
-SIGTTIN = 26
-SIGTTOU = 27
-SIGVTALRM = 28
-SIGPROF = 29
-SIGXCPU = 30
-SIGXFSZ = 31
-SIGWAITING = 32
-SIGLWP = 33
-SIGFREEZE = 34
-SIGTHAW = 35
-SIGCANCEL = 36
-_SIGRTMIN = 37
-_SIGRTMAX = 44
-SIG_BLOCK = 1
-SIG_UNBLOCK = 2
-SIG_SETMASK = 3
-SIGNO_MASK = 0xFF
-SIGDEFER = 0x100
-SIGHOLD = 0x200
-SIGRELSE = 0x400
-SIGIGNORE = 0x800
-SIGPAUSE = 0x1000
-SA_NOCLDSTOP = 0x00020000
-SA_ONSTACK = 0x00000001
-SA_RESETHAND = 0x00000002
-SA_RESTART = 0x00000004
-SA_SIGINFO = 0x00000008
-SA_NODEFER = 0x00000010
-SA_NOCLDWAIT = 0x00010000
-SA_WAITSIG = 0x00010000
-NSIG = 45
-MAXSIG = 44
-S_SIGNAL = 1
-S_SIGSET = 2
-S_SIGACTION = 3
-S_NONE = 4
-MINSIGSTKSZ = 2048
-SIGSTKSZ = 8192
-SS_ONSTACK = 0x00000001
-SS_DISABLE = 0x00000002
-_SIGQUEUE_MAX = 32
-
-# Included from sys/pcb.h
-
-# Included from sys/regset.h
-REG_PSR = (0)
-REG_PC = (1)
-REG_nPC = (2)
-REG_Y = (3)
-REG_G1 = (4)
-REG_G2 = (5)
-REG_G3 = (6)
-REG_G4 = (7)
-REG_G5 = (8)
-REG_G6 = (9)
-REG_G7 = (10)
-REG_O0 = (11)
-REG_O1 = (12)
-REG_O2 = (13)
-REG_O3 = (14)
-REG_O4 = (15)
-REG_O5 = (16)
-REG_O6 = (17)
-REG_O7 = (18)
-REG_PS = REG_PSR
-REG_SP = REG_O6
-REG_R0 = REG_O0
-REG_R1 = REG_O1
-NGREG = 19
-SPARC_MAXREGWINDOW = 31
-MAXFPQ = 16
-XRS_ID = 0x78727300
-
-# Included from v7/sys/privregs.h
-
-# Included from v7/sys/psr.h
-PSR_CWP = 0x0000001F
-PSR_ET = 0x00000020
-PSR_PS = 0x00000040
-PSR_S = 0x00000080
-PSR_PIL = 0x00000F00
-PSR_EF = 0x00001000
-PSR_EC = 0x00002000
-PSR_RSV = 0x000FC000
-PSR_ICC = 0x00F00000
-PSR_C = 0x00100000
-PSR_V = 0x00200000
-PSR_Z = 0x00400000
-PSR_N = 0x00800000
-PSR_VER = 0x0F000000
-PSR_IMPL = 0xF0000000
-PSL_ALLCC = PSR_ICC
-PSL_USER = (PSR_S)
-PSL_USERMASK = (PSR_ICC)
-PSL_UBITS = (PSR_ICC|PSR_EF)
-def USERMODE(ps): return (((ps) & PSR_PS) == 0)
-
-
-# Included from sys/fsr.h
-FSR_CEXC = 0x0000001f
-FSR_AEXC = 0x000003e0
-FSR_FCC = 0x00000c00
-FSR_PR = 0x00001000
-FSR_QNE = 0x00002000
-FSR_FTT = 0x0001c000
-FSR_VER = 0x000e0000
-FSR_TEM = 0x0f800000
-FSR_RP = 0x30000000
-FSR_RD = 0xc0000000
-FSR_VER_SHIFT = 17
-FSR_FCC1 = 0x00000003
-FSR_FCC2 = 0x0000000C
-FSR_FCC3 = 0x00000030
-FSR_CEXC_NX = 0x00000001
-FSR_CEXC_DZ = 0x00000002
-FSR_CEXC_UF = 0x00000004
-FSR_CEXC_OF = 0x00000008
-FSR_CEXC_NV = 0x00000010
-FSR_AEXC_NX = (0x1 << 5)
-FSR_AEXC_DZ = (0x2 << 5)
-FSR_AEXC_UF = (0x4 << 5)
-FSR_AEXC_OF = (0x8 << 5)
-FSR_AEXC_NV = (0x10 << 5)
-FTT_NONE = 0
-FTT_IEEE = 1
-FTT_UNFIN = 2
-FTT_UNIMP = 3
-FTT_SEQ = 4
-FTT_ALIGN = 5
-FTT_DFAULT = 6
-FSR_FTT_SHIFT = 14
-FSR_FTT_IEEE = (FTT_IEEE   << FSR_FTT_SHIFT)
-FSR_FTT_UNFIN = (FTT_UNFIN  << FSR_FTT_SHIFT)
-FSR_FTT_UNIMP = (FTT_UNIMP  << FSR_FTT_SHIFT)
-FSR_FTT_SEQ = (FTT_SEQ    << FSR_FTT_SHIFT)
-FSR_FTT_ALIGN = (FTT_ALIGN  << FSR_FTT_SHIFT)
-FSR_FTT_DFAULT = (FTT_DFAULT << FSR_FTT_SHIFT)
-FSR_TEM_NX = (0x1 << 23)
-FSR_TEM_DZ = (0x2 << 23)
-FSR_TEM_UF = (0x4 << 23)
-FSR_TEM_OF = (0x8 << 23)
-FSR_TEM_NV = (0x10 << 23)
-RP_DBLEXT = 0
-RP_SINGLE = 1
-RP_DOUBLE = 2
-RP_RESERVED = 3
-RD_NEAR = 0
-RD_ZER0 = 1
-RD_POSINF = 2
-RD_NEGINF = 3
-FPRS_DL = 0x1
-FPRS_DU = 0x2
-FPRS_FEF = 0x4
-def SAVE_GLOBALS(RP): return \
-
-def RESTORE_GLOBALS(RP): return \
-
-def SAVE_OUTS(RP): return \
-
-def RESTORE_OUTS(RP): return \
-
-def SAVE_WINDOW(SBP): return \
-
-def RESTORE_WINDOW(SBP): return \
-
-def STORE_FPREGS(FP): return \
-
-def LOAD_FPREGS(FP): return \
-
-FIX_ALIGNMENT = 0x01
-INSTR_VALID = 0x02
-
-# Included from sys/msacct.h
-LMS_USER = 0
-LMS_SYSTEM = 1
-LMS_TRAP = 2
-LMS_TFAULT = 3
-LMS_DFAULT = 4
-LMS_KFAULT = 5
-LMS_USER_LOCK = 6
-LMS_SLEEP = 7
-LMS_WAIT_CPU = 8
-LMS_STOPPED = 9
-NMSTATES = 10
-
-# Included from sys/ucontext.h
-GETCONTEXT = 0
-SETCONTEXT = 1
-UC_SIGMASK = 001
-UC_STACK = 002
-UC_CPU = 004
-UC_MAU = 010
-UC_FPU = UC_MAU
-UC_INTR = 020
-UC_MCONTEXT = (UC_CPU|UC_FPU)
-UC_ALL = (UC_SIGMASK|UC_STACK|UC_MCONTEXT)
-
-# Included from sys/lwp.h
-
-# Included from sys/synch.h
-USYNC_THREAD = 0
-USYNC_PROCESS = 1
-TRACE_TYPE = 2
-LWP_DETACHED = 0x00000040
-LWP_SUSPENDED = 0x00000080
-__LWP_ASLWP = 0x00000100
-MAXSYSARGS = 8
-NORMALRETURN = 0
-JUSTRETURN = 1
-RESTARTSYS = 2
-LWP_USER = 0x01
-LWP_SYS = 0x02
-TS_FREE = 0x00
-TS_SLEEP = 0x01
-TS_RUN = 0x02
-TS_ONPROC = 0x04
-TS_ZOMB = 0x08
-TS_STOPPED = 0x10
-T_INTR_THREAD = 0x0001
-T_WAKEABLE = 0x0002
-T_TOMASK = 0x0004
-T_TALLOCSTK = 0x0008
-T_LWPZOMB = 0x0010
-T_WOULDBLOCK = 0x0020
-T_DONTBLOCK = 0x0040
-T_DONTPEND = 0x0080
-T_SYS_PROF = 0x0100
-T_WAITCVSEM = 0x0200
-TP_WAITFOR = 0x01
-TP_HOLDLWP = 0x02
-TP_TWAIT = 0x04
-TP_LWPEXIT = 0x08
-TP_PRSTOP = 0x10
-TP_CHKPT = 0x20
-TP_EXITLWP = 0x40
-TP_PRVSTOP = 0x80
-TP_MSACCT = 0x100
-TP_STOPPING = 0x200
-TS_LOAD = 0x01
-TS_CSTART = 0x02
-TS_XSTART = 0x04
-TS_PSTART = 0x08
-TS_DONT_SWAP = 0x10
-TS_RESUME = 0x20
-TS_SWAPENQ = 0x40
-TS_ON_SWAPQ = 0x80
-TS_ALLSTART = (TS_CSTART | TS_XSTART | TS_PSTART | TS_RESUME)
-def CPR_VSTOPPED(t): return \
-
-def THREAD_TRANSITION(tp): return thread_transition(tp);
-
-def THREAD_STOP(tp): return \
-
-def THREAD_ZOMB(tp): return THREAD_SET_STATE(tp, TS_ZOMB, NULL)
-
-def SEMA_HELD(x): return (sema_held((x)))
-
-LOCK_NAME_LEN = 18
-NO_LOCKS_HELD = 1
-NO_COMPETING_THREADS = 1
-
-# Included from sys/cred.h
-
-# Included from sys/uio.h
-
-# Included from vm/seg_enum.h
-
-# Included from sys/buf.h
-
-# Included from sys/kstat.h
-KSTAT_IOC_BASE = (ord('K') << 8)
-KSTAT_IOC_CHAIN_ID = KSTAT_IOC_BASE | 0x01
-KSTAT_IOC_READ = KSTAT_IOC_BASE | 0x02
-KSTAT_IOC_WRITE = KSTAT_IOC_BASE | 0x03
-KSTAT_STRLEN = 31
-def KSTAT_ENTER(k): return \
-
-def KSTAT_EXIT(k): return \
-
-KSTAT_TYPE_RAW = 0
-KSTAT_TYPE_NAMED = 1
-KSTAT_TYPE_INTR = 2
-KSTAT_TYPE_IO = 3
-KSTAT_TYPE_TIMER = 4
-KSTAT_NUM_TYPES = 5
-KSTAT_FLAG_VIRTUAL = 0x01
-KSTAT_FLAG_VAR_SIZE = 0x02
-KSTAT_FLAG_WRITABLE = 0x04
-KSTAT_FLAG_PERSISTENT = 0x08
-KSTAT_FLAG_DORMANT = 0x10
-KSTAT_FLAG_INVALID = 0x20
-KSTAT_READ = 0
-KSTAT_WRITE = 1
-KSTAT_DATA_CHAR = 0
-KSTAT_DATA_LONG = 1
-KSTAT_DATA_ULONG = 2
-KSTAT_DATA_LONGLONG = 3
-KSTAT_DATA_ULONGLONG = 4
-KSTAT_DATA_FLOAT = 5
-KSTAT_DATA_DOUBLE = 6
-KSTAT_INTR_HARD = 0
-KSTAT_INTR_SOFT = 1
-KSTAT_INTR_WATCHDOG = 2
-KSTAT_INTR_SPURIOUS = 3
-KSTAT_INTR_MULTSVC = 4
-KSTAT_NUM_INTRS = 5
-B_BUSY = 0x0001
-B_DONE = 0x0002
-B_ERROR = 0x0004
-B_KERNBUF = 0x0008
-B_PAGEIO = 0x0010
-B_PHYS = 0x0020
-B_READ = 0x0040
-B_WANTED = 0x0080
-B_WRITE = 0x0100
-B_AGE = 0x000200
-B_ASYNC = 0x000400
-B_DELWRI = 0x000800
-B_STALE = 0x001000
-B_DONTNEED = 0x002000
-B_REMAPPED = 0x004000
-B_FREE = 0x008000
-B_INVAL = 0x010000
-B_FORCE = 0x020000
-B_HEAD = 0x040000
-B_NOCACHE = 0x080000
-B_TRUNC = 0x100000
-def notavail(bp): return \
-
-VROOT = 0x01
-VNOCACHE = 0x02
-VNOMAP = 0x04
-VDUP = 0x08
-VNOSWAP = 0x10
-VNOMOUNT = 0x20
-VISSWAP = 0x40
-VSWAPLIKE = 0x80
-VVFSLOCK = 0x100
-VVFSWAIT = 0x200
-VVMLOCK = 0x400
-AT_TYPE = 0x0001
-AT_MODE = 0x0002
-AT_UID = 0x0004
-AT_GID = 0x0008
-AT_FSID = 0x0010
-AT_NODEID = 0x0020
-AT_NLINK = 0x0040
-AT_SIZE = 0x0080
-AT_ATIME = 0x0100
-AT_MTIME = 0x0200
-AT_CTIME = 0x0400
-AT_RDEV = 0x0800
-AT_BLKSIZE = 0x1000
-AT_NBLOCKS = 0x2000
-AT_VCODE = 0x4000
-AT_ALL = (AT_TYPE|AT_MODE|AT_UID|AT_GID|AT_FSID|AT_NODEID|\
-			AT_NLINK|AT_SIZE|AT_ATIME|AT_MTIME|AT_CTIME|\
-			AT_RDEV|AT_BLKSIZE|AT_NBLOCKS|AT_VCODE)
-AT_STAT = (AT_MODE|AT_UID|AT_GID|AT_FSID|AT_NODEID|AT_NLINK|\
-			AT_SIZE|AT_ATIME|AT_MTIME|AT_CTIME|AT_RDEV)
-AT_TIMES = (AT_ATIME|AT_MTIME|AT_CTIME)
-AT_NOSET = (AT_NLINK|AT_RDEV|AT_FSID|AT_NODEID|AT_TYPE|\
-			AT_BLKSIZE|AT_NBLOCKS|AT_VCODE)
-VSUID = 04000
-VSGID = 02000
-VSVTX = 01000
-VREAD = 00400
-VWRITE = 00200
-VEXEC = 00100
-MODEMASK = 07777
-PERMMASK = 00777
-def MANDMODE(mode): return (((mode) & (VSGID|(VEXEC>>3))) == VSGID)
-
-VSA_ACL = 0x0001
-VSA_ACLCNT = 0x0002
-VSA_DFACL = 0x0004
-VSA_DFACLCNT = 0x0008
-LOOKUP_DIR = 0x01
-ATTR_UTIME = 0x01
-ATTR_EXEC = 0x02
-ATTR_COMM = 0x04
-ATTR_HINT = 0x08
-
-# Included from sys/poll.h
-POLLIN = 0x0001
-POLLPRI = 0x0002
-POLLOUT = 0x0004
-POLLRDNORM = 0x0040
-POLLWRNORM = POLLOUT
-POLLRDBAND = 0x0080
-POLLWRBAND = 0x0100
-POLLNORM = POLLRDNORM
-POLLERR = 0x0008
-POLLHUP = 0x0010
-POLLNVAL = 0x0020
-T_POLLTIME = 0x01
-T_POLLWAKE = 0x02
-
-# Included from sys/strmdep.h
-def str_aligned(X): return (((uint)(X) & (sizeof (int) - 1)) == 0)
-
-QENAB = 0x001
-QWANTR = 0x002
-QWANTW = 0x004
-QFULL = 0x008
-QREADR = 0x010
-QUSE = 0x020
-QNOENB = 0x040
-QOLD = 0x080
-QBACK = 0x100
-QHLIST = 0x200
-QUNSAFE = 0x400
-QPAIR = 0x800
-QPERQ = 0x1000
-QPERMOD = 0x2000
-QMTSAFE = 0x4000
-QMTOUTPERIM = 0x8000
-QMT_TYPEMASK = (QUNSAFE|QPAIR|QPERQ|QPERMOD|QMTSAFE|QMTOUTPERIM)
-QINSERVICE = 0x10000
-QWCLOSE = 0x20000
-QEND = 0x40000
-QWANTWSYNC = 0x80000
-QSYNCSTR = 0x100000
-QISDRV = 0x200000
-QB_FULL = 0x01
-QB_WANTW = 0x02
-QB_BACK = 0x04
-NBAND = 256
-STRUIOT_NONE = -1
-STRUIOT_DONTCARE = 0
-STRUIOT_STANDARD = 1
-STRUIOT_IP = 2
-STRUIO_SPEC = 0x01
-STRUIO_DONE = 0x02
-STRUIO_IP = 0x04
-MSGMARK = 0x01
-MSGNOLOOP = 0x02
-MSGDELIM = 0x04
-MSGNOGET = 0x08
-M_DATA = 0x00
-M_PROTO = 0x01
-M_BREAK = 0x08
-M_PASSFP = 0x09
-M_EVENT = 0x0a
-M_SIG = 0x0b
-M_DELAY = 0x0c
-M_CTL = 0x0d
-M_IOCTL = 0x0e
-M_SETOPTS = 0x10
-M_RSE = 0x11
-M_VPIXINT = 0x12
-M_IOCACK = 0x81
-M_IOCNAK = 0x82
-M_PCPROTO = 0x83
-M_PCSIG = 0x84
-M_READ = 0x85
-M_FLUSH = 0x86
-M_STOP = 0x87
-M_START = 0x88
-M_HANGUP = 0x89
-M_ERROR = 0x8a
-M_COPYIN = 0x8b
-M_COPYOUT = 0x8c
-M_IOCDATA = 0x8d
-M_PCRSE = 0x8e
-M_STOPI = 0x8f
-M_STARTI = 0x90
-M_PCEVENT = 0x91
-M_UNHANGUP = 0x92
-QNORM = 0x00
-QPCTL = 0x80
-STRCANON = 0x01
-RECOPY = 0x02
-SO_ALL = 0x003f
-SO_READOPT = 0x0001
-SO_WROFF = 0x0002
-SO_MINPSZ = 0x0004
-SO_MAXPSZ = 0x0008
-SO_HIWAT = 0x0010
-SO_LOWAT = 0x0020
-SO_MREADON = 0x0040
-SO_MREADOFF = 0x0080
-SO_NDELON = 0x0100
-SO_NDELOFF = 0x0200
-SO_ISTTY = 0x0400
-SO_ISNTTY = 0x0800
-SO_TOSTOP = 0x1000
-SO_TONSTOP = 0x2000
-SO_BAND = 0x4000
-SO_DELIM = 0x8000
-SO_NODELIM = 0x010000
-SO_STRHOLD = 0x020000
-SO_ERROPT = 0x040000
-DEF_IOV_MAX = 16
-INFOD_FIRSTBYTES = 0x02
-INFOD_BYTES = 0x04
-INFOD_COUNT = 0x08
-INFOD_COPYOUT = 0x10
-MODOPEN = 0x1
-CLONEOPEN = 0x2
-OPENFAIL = -1
-BPRI_LO = 1
-BPRI_MED = 2
-BPRI_HI = 3
-INFPSZ = -1
-FLUSHALL = 1
-FLUSHDATA = 0
-STIPRI = PZERO+3
-STOPRI = PZERO+3
-STRHIGH = 5120
-STRLOW = 1024
-MAXIOCBSZ = 1024
-PERIM_INNER = 1
-PERIM_OUTER = 2
-def datamsg(type): return \
-
-def straln(a): return (caddr_t)((long)(a) & ~(sizeof (int)-1))
-
-
-# Included from sys/byteorder.h
-def ntohl(x): return (x)
-
-def ntohs(x): return (x)
-
-def htonl(x): return (x)
-
-def htons(x): return (x)
-
-IPPROTO_IP = 0
-IPPROTO_ICMP = 1
-IPPROTO_IGMP = 2
-IPPROTO_GGP = 3
-IPPROTO_ENCAP = 4
-IPPROTO_TCP = 6
-IPPROTO_EGP = 8
-IPPROTO_PUP = 12
-IPPROTO_UDP = 17
-IPPROTO_IDP = 22
-IPPROTO_HELLO = 63
-IPPROTO_ND = 77
-IPPROTO_EON = 80
-IPPROTO_RAW = 255
-IPPROTO_MAX = 256
-IPPORT_ECHO = 7
-IPPORT_DISCARD = 9
-IPPORT_SYSTAT = 11
-IPPORT_DAYTIME = 13
-IPPORT_NETSTAT = 15
-IPPORT_FTP = 21
-IPPORT_TELNET = 23
-IPPORT_SMTP = 25
-IPPORT_TIMESERVER = 37
-IPPORT_NAMESERVER = 42
-IPPORT_WHOIS = 43
-IPPORT_MTP = 57
-IPPORT_TFTP = 69
-IPPORT_RJE = 77
-IPPORT_FINGER = 79
-IPPORT_TTYLINK = 87
-IPPORT_SUPDUP = 95
-IPPORT_EXECSERVER = 512
-IPPORT_LOGINSERVER = 513
-IPPORT_CMDSERVER = 514
-IPPORT_EFSSERVER = 520
-IPPORT_BIFFUDP = 512
-IPPORT_WHOSERVER = 513
-IPPORT_ROUTESERVER = 520
-IPPORT_RESERVED = 1024
-IPPORT_USERRESERVED = 5000
-IMPLINK_IP = 155
-IMPLINK_LOWEXPER = 156
-IMPLINK_HIGHEXPER = 158
-def IN_CLASSA(i): return (((long)(i) & 0x80000000) == 0)
-
-IN_CLASSA_NET = 0xff000000
-IN_CLASSA_NSHIFT = 24
-IN_CLASSA_HOST = 0x00ffffff
-IN_CLASSA_MAX = 128
-def IN_CLASSB(i): return (((long)(i) & 0xc0000000) == 0x80000000)
-
-IN_CLASSB_NET = 0xffff0000
-IN_CLASSB_NSHIFT = 16
-IN_CLASSB_HOST = 0x0000ffff
-IN_CLASSB_MAX = 65536
-def IN_CLASSC(i): return (((long)(i) & 0xe0000000) == 0xc0000000)
-
-IN_CLASSC_NET = 0xffffff00
-IN_CLASSC_NSHIFT = 8
-IN_CLASSC_HOST = 0x000000ff
-def IN_CLASSD(i): return (((long)(i) & 0xf0000000) == 0xe0000000)
-
-IN_CLASSD_NET = 0xf0000000
-IN_CLASSD_NSHIFT = 28
-IN_CLASSD_HOST = 0x0fffffff
-def IN_MULTICAST(i): return IN_CLASSD(i)
-
-def IN_EXPERIMENTAL(i): return (((long)(i) & 0xe0000000) == 0xe0000000)
-
-def IN_BADCLASS(i): return (((long)(i) & 0xf0000000) == 0xf0000000)
-
-INADDR_ANY = 0x00000000
-INADDR_LOOPBACK = 0x7F000001
-INADDR_BROADCAST = 0xffffffff
-INADDR_UNSPEC_GROUP = 0xe0000000
-INADDR_ALLHOSTS_GROUP = 0xe0000001
-INADDR_MAX_LOCAL_GROUP = 0xe00000ff
-IN_LOOPBACKNET = 127
-def IN_SET_LOOPBACK_ADDR(a): return \
-
-IP_OPTIONS = 1
-IP_HDRINCL = 2
-IP_TOS = 3
-IP_TTL = 4
-IP_RECVOPTS = 5
-IP_RECVRETOPTS = 6
-IP_RECVDSTADDR = 7
-IP_RETOPTS = 8
-IP_MULTICAST_IF = 0x10
-IP_MULTICAST_TTL = 0x11
-IP_MULTICAST_LOOP = 0x12
-IP_ADD_MEMBERSHIP = 0x13
-IP_DROP_MEMBERSHIP = 0x14
-IP_DEFAULT_MULTICAST_TTL = 1
-IP_DEFAULT_MULTICAST_LOOP = 1
diff --git a/Lib/sunos5/SOCKET.py b/Lib/sunos5/SOCKET.py
deleted file mode 100755
index 25c10f3..0000000
--- a/Lib/sunos5/SOCKET.py
+++ /dev/null
@@ -1,145 +0,0 @@
-# Generated by h2py from /usr/include/sys/socket.h
-
-# Included from sys/netconfig.h
-NETCONFIG = "/etc/netconfig"
-NETPATH = "NETPATH"
-NC_TPI_CLTS = 1
-NC_TPI_COTS = 2
-NC_TPI_COTS_ORD = 3
-NC_TPI_RAW = 4
-NC_NOFLAG = 00
-NC_VISIBLE = 01
-NC_BROADCAST = 02
-NC_NOPROTOFMLY = "-"
-NC_LOOPBACK = "loopback"
-NC_INET = "inet"
-NC_IMPLINK = "implink"
-NC_PUP = "pup"
-NC_CHAOS = "chaos"
-NC_NS = "ns"
-NC_NBS = "nbs"
-NC_ECMA = "ecma"
-NC_DATAKIT = "datakit"
-NC_CCITT = "ccitt"
-NC_SNA = "sna"
-NC_DECNET = "decnet"
-NC_DLI = "dli"
-NC_LAT = "lat"
-NC_HYLINK = "hylink"
-NC_APPLETALK = "appletalk"
-NC_NIT = "nit"
-NC_IEEE802 = "ieee802"
-NC_OSI = "osi"
-NC_X25 = "x25"
-NC_OSINET = "osinet"
-NC_GOSIP = "gosip"
-NC_NOPROTO = "-"
-NC_TCP = "tcp"
-NC_UDP = "udp"
-NC_ICMP = "icmp"
-NC_TPI_CLTS = 1
-NC_TPI_COTS = 2
-NC_TPI_COTS_ORD = 3
-NC_TPI_RAW = 4
-SOCK_STREAM = NC_TPI_COTS
-SOCK_DGRAM = NC_TPI_CLTS
-SOCK_RAW = NC_TPI_RAW
-SOCK_RDM = 5
-SOCK_SEQPACKET = 6
-SO_DEBUG = 0x0001
-SO_ACCEPTCONN = 0x0002
-SO_REUSEADDR = 0x0004
-SO_KEEPALIVE = 0x0008
-SO_DONTROUTE = 0x0010
-SO_BROADCAST = 0x0020
-SO_USELOOPBACK = 0x0040
-SO_LINGER = 0x0080
-SO_OOBINLINE = 0x0100
-SO_DONTLINGER = (~SO_LINGER)
-SO_SNDBUF = 0x1001
-SO_RCVBUF = 0x1002
-SO_SNDLOWAT = 0x1003
-SO_RCVLOWAT = 0x1004
-SO_SNDTIMEO = 0x1005
-SO_RCVTIMEO = 0x1006
-SO_ERROR = 0x1007
-SO_TYPE = 0x1008
-SO_PROTOTYPE = 0x1009
-SOL_SOCKET = 0xffff
-AF_UNSPEC = 0
-AF_UNIX = 1
-AF_INET = 2
-AF_IMPLINK = 3
-AF_PUP = 4
-AF_CHAOS = 5
-AF_NS = 6
-AF_NBS = 7
-AF_ECMA = 8
-AF_DATAKIT = 9
-AF_CCITT = 10
-AF_SNA = 11
-AF_DECnet = 12
-AF_DLI = 13
-AF_LAT = 14
-AF_HYLINK = 15
-AF_APPLETALK = 16
-AF_NIT = 17
-AF_802 = 18
-AF_OSI = 19
-AF_X25 = 20
-AF_OSINET = 21
-AF_GOSIP = 22
-AF_IPX = 23
-AF_MAX = 23
-PF_UNSPEC = AF_UNSPEC
-PF_UNIX = AF_UNIX
-PF_INET = AF_INET
-PF_IMPLINK = AF_IMPLINK
-PF_PUP = AF_PUP
-PF_CHAOS = AF_CHAOS
-PF_NS = AF_NS
-PF_NBS = AF_NBS
-PF_ECMA = AF_ECMA
-PF_DATAKIT = AF_DATAKIT
-PF_CCITT = AF_CCITT
-PF_SNA = AF_SNA
-PF_DECnet = AF_DECnet
-PF_DLI = AF_DLI
-PF_LAT = AF_LAT
-PF_HYLINK = AF_HYLINK
-PF_APPLETALK = AF_APPLETALK
-PF_NIT = AF_NIT
-PF_802 = AF_802
-PF_OSI = AF_OSI
-PF_X25 = AF_X25
-PF_OSINET = AF_OSINET
-PF_GOSIP = AF_GOSIP
-PF_IPX = AF_IPX
-PF_MAX = AF_MAX
-SOMAXCONN = 5
-MSG_OOB = 0x1
-MSG_PEEK = 0x2
-MSG_DONTROUTE = 0x4
-MSG_MAXIOVLEN = 16
-def OPTLEN(x): return ((((x) + sizeof (long) - 1) / sizeof (long)) * sizeof (long))
-
-SOCKETSYS = 88
-SOCKETSYS = 83
-SO_ACCEPT = 1
-SO_BIND = 2
-SO_CONNECT = 3
-SO_GETPEERNAME = 4
-SO_GETSOCKNAME = 5
-SO_GETSOCKOPT = 6
-SO_LISTEN = 7
-SO_RECV = 8
-SO_RECVFROM = 9
-SO_SEND = 10
-SO_SENDTO = 11
-SO_SETSOCKOPT = 12
-SO_SHUTDOWN = 13
-SO_SOCKET = 14
-SO_SOCKPOLL = 15
-SO_GETIPDOMAIN = 16
-SO_SETIPDOMAIN = 17
-SO_ADJTIME = 18
diff --git a/Lib/sunos5/SUNAUDIODEV.py b/Lib/sunos5/SUNAUDIODEV.py
deleted file mode 100755
index b66610d..0000000
--- a/Lib/sunos5/SUNAUDIODEV.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Symbolic constants for use with sunaudiodev module
-# The names are the same as in audioio.h with the leading AUDIO_
-# removed.
-
-# Not all values are supported on all releases of SunOS.
-
-# Encoding types, for fields i_encoding and o_encoding
-
-ENCODING_NONE = 0			# no encoding assigned
-ENCODING_ULAW = 1			# u-law encoding
-ENCODING_ALAW = 2			# A-law encoding
-ENCODING_LINEAR = 3			# Linear PCM encoding
-
-# Gain ranges for i_gain, o_gain and monitor_gain
-
-MIN_GAIN = 0				# minimum gain value
-MAX_GAIN = 255				# maximum gain value
-
-# Balance values for i_balance and o_balance
-
-LEFT_BALANCE = 0			# left channel only
-MID_BALANCE = 32			# equal left/right channel
-RIGHT_BALANCE = 64			# right channel only
-BALANCE_SHIFT = 3
-
-# Port names for i_port and o_port
-
-PORT_A = 1
-PORT_B = 2
-PORT_C = 3
-PORT_D = 4
-
-SPEAKER = 0x01				# output to built-in speaker
-HEADPHONE = 0x02			# output to headphone jack
-LINE_OUT = 0x04				# output to line out
-
-MICROPHONE = 0x01			# input from microphone
-LINE_IN = 0x02				# input from line in
diff --git a/Lib/sunos5/TERMIOS.py b/Lib/sunos5/TERMIOS.py
deleted file mode 100755
index 9a21f1b..0000000
--- a/Lib/sunos5/TERMIOS.py
+++ /dev/null
@@ -1,433 +0,0 @@
-# Generated by h2py from /usr/include/termios.h
-
-# Included from sys/termios.h
-
-# Included from sys/feature_tests.h
-_POSIX_C_SOURCE = 1
-
-# Included from sys/ttydev.h
-B0 = 0
-B50 = 1
-B75 = 2
-B110 = 3
-B134 = 4
-B150 = 5
-B200 = 6
-B300 = 7
-B600 = 8
-B1200 = 9
-B1800 = 10
-B2400 = 11
-B4800 = 12
-B9600 = 13
-B19200 = 14
-B38400 = 15
-EXTA = 14
-EXTB = 15
-
-# Included from sys/types.h
-
-# Included from sys/isa_defs.h
-_CHAR_ALIGNMENT = 1
-_SHORT_ALIGNMENT = 2
-_INT_ALIGNMENT = 4
-_LONG_ALIGNMENT = 4
-_LONG_LONG_ALIGNMENT = 4
-_DOUBLE_ALIGNMENT = 4
-_LONG_DOUBLE_ALIGNMENT = 4
-_POINTER_ALIGNMENT = 4
-_MAX_ALIGNMENT = 4
-_ALIGNMENT_REQUIRED = 0
-_CHAR_ALIGNMENT = 1
-_SHORT_ALIGNMENT = 2
-_INT_ALIGNMENT = 4
-_LONG_ALIGNMENT = 4
-_LONG_LONG_ALIGNMENT = 8
-_DOUBLE_ALIGNMENT = 8
-_LONG_DOUBLE_ALIGNMENT = 16
-_POINTER_ALIGNMENT = 4
-_MAX_ALIGNMENT = 16
-_ALIGNMENT_REQUIRED = 1
-_CHAR_ALIGNMENT = 1
-_SHORT_ALIGNMENT = 2
-_INT_ALIGNMENT = 4
-_LONG_ALIGNMENT = 4
-_LONG_LONG_ALIGNMENT = 8
-_DOUBLE_ALIGNMENT = 8
-_LONG_DOUBLE_ALIGNMENT = 8
-_POINTER_ALIGNMENT = 4
-_MAX_ALIGNMENT = 8
-_ALIGNMENT_REQUIRED = 1
-
-# Included from sys/machtypes.h
-SHRT_MIN = -32768
-SHRT_MAX = 32767
-INT_MIN = (-2147483647-1)
-INT_MAX = 2147483647
-LONG_MIN = (-2147483647-1)
-LONG_MAX = 2147483647
-P_MYID = (-1)
-
-# Included from sys/select.h
-
-# Included from sys/time.h
-DST_NONE = 0
-DST_USA = 1
-DST_AUST = 2
-DST_WET = 3
-DST_MET = 4
-DST_EET = 5
-DST_CAN = 6
-DST_GB = 7
-DST_RUM = 8
-DST_TUR = 9
-DST_AUSTALT = 10
-ITIMER_REAL = 0
-ITIMER_VIRTUAL = 1
-ITIMER_PROF = 2
-ITIMER_REALPROF = 3
-SEC = 1
-MILLISEC = 1000
-MICROSEC = 1000000
-NANOSEC = 1000000000
-__CLOCK_REALTIME0 = 0
-CLOCK_VIRTUAL = 1
-CLOCK_PROF = 2
-__CLOCK_REALTIME3 = 3
-CLOCK_REALTIME = __CLOCK_REALTIME3
-CLOCK_REALTIME = __CLOCK_REALTIME0
-TIMER_RELTIME = 0x0
-TIMER_ABSTIME = 0x1
-
-# Included from sys/mutex.h
-
-# Included from sys/dki_lkinfo.h
-
-# Included from sys/dl.h
-NOSTATS = 1
-LSB_NLKDS = 91
-def MUTEX_HELD(x): return (mutex_owned(x))
-
-
-# Included from time.h
-NULL = 0
-CLOCKS_PER_SEC = 1000000
-
-# Included from sys/siginfo.h
-SIGEV_NONE = 1
-SIGEV_SIGNAL = 2
-SIGEV_THREAD = 3
-SI_NOINFO = 32767
-SI_USER = 0
-SI_LWP = (-1)
-SI_QUEUE = (-2)
-SI_TIMER = (-3)
-SI_ASYNCIO = (-4)
-SI_MESGQ = (-5)
-
-# Included from sys/machsig.h
-ILL_ILLOPC = 1
-ILL_ILLOPN = 2
-ILL_ILLADR = 3
-ILL_ILLTRP = 4
-ILL_PRVOPC = 5
-ILL_PRVREG = 6
-ILL_COPROC = 7
-ILL_BADSTK = 8
-NSIGILL = 8
-EMT_TAGOVF = 1
-NSIGEMT = 1
-FPE_INTDIV = 1
-FPE_INTOVF = 2
-FPE_FLTDIV = 3
-FPE_FLTOVF = 4
-FPE_FLTUND = 5
-FPE_FLTRES = 6
-FPE_FLTINV = 7
-FPE_FLTSUB = 8
-NSIGFPE = 8
-SEGV_MAPERR = 1
-SEGV_ACCERR = 2
-NSIGSEGV = 2
-BUS_ADRALN = 1
-BUS_ADRERR = 2
-BUS_OBJERR = 3
-NSIGBUS = 3
-TRAP_BRKPT = 1
-TRAP_TRACE = 2
-NSIGTRAP = 2
-CLD_EXITED = 1
-CLD_KILLED = 2
-CLD_DUMPED = 3
-CLD_TRAPPED = 4
-CLD_STOPPED = 5
-CLD_CONTINUED = 6
-NSIGCLD = 6
-POLL_IN = 1
-POLL_OUT = 2
-POLL_MSG = 3
-POLL_ERR = 4
-POLL_PRI = 5
-POLL_HUP = 6
-NSIGPOLL = 6
-PROF_SIG = 1
-NSIGPROF = 1
-SI_MAXSZ = 128
-def SI_CANQUEUE(c): return ((c) <= SI_QUEUE)
-
-FD_SETSIZE = 1024
-NBBY = 8
-_POSIX_VDISABLE = 0
-def CTRL(c): return ((c)&037)
-
-IBSHIFT = 16
-NCC = 8
-NCCS = 19
-VINTR = 0
-VQUIT = 1
-VERASE = 2
-VKILL = 3
-VEOF = 4
-VEOL = 5
-VEOL2 = 6
-VMIN = 4
-VTIME = 5
-VSWTCH = 7
-VSTART = 8
-VSTOP = 9
-VSUSP = 10
-VDSUSP = 11
-VREPRINT = 12
-VDISCARD = 13
-VWERASE = 14
-VLNEXT = 15
-VCEOF = NCC
-VCEOL = (NCC + 1)
-CNUL = 0
-CDEL = 0177
-CESC = ord('\\')
-CINTR = CTRL(ord('c'))
-CQUIT = 034
-CERASE = 0177
-CKILL = CTRL(ord('u'))
-CEOT = 04
-CEOL = 0
-CEOL2 = 0
-CEOF = 04
-CSTART = 021
-CSTOP = 023
-CSWTCH = 032
-CNSWTCH = 0
-CSUSP = CTRL(ord('z'))
-CDSUSP = CTRL(ord('y'))
-CRPRNT = CTRL(ord('r'))
-CFLUSH = CTRL(ord('o'))
-CWERASE = CTRL(ord('w'))
-CLNEXT = CTRL(ord('v'))
-IGNBRK = 0000001
-BRKINT = 0000002
-IGNPAR = 0000004
-PARMRK = 0000010
-INPCK = 0000020
-ISTRIP = 0000040
-INLCR = 0000100
-IGNCR = 0000200
-ICRNL = 0000400
-IUCLC = 0001000
-IXON = 0002000
-IXANY = 0004000
-IXOFF = 0010000
-IMAXBEL = 0020000
-DOSMODE = 0100000
-OPOST = 0000001
-OLCUC = 0000002
-ONLCR = 0000004
-OCRNL = 0000010
-ONOCR = 0000020
-ONLRET = 0000040
-OFILL = 0000100
-OFDEL = 0000200
-NLDLY = 0000400
-NL0 = 0
-NL1 = 0000400
-CRDLY = 0003000
-CR0 = 0
-CR1 = 0001000
-CR2 = 0002000
-CR3 = 0003000
-TABDLY = 0014000
-TAB0 = 0
-TAB1 = 0004000
-TAB2 = 0010000
-TAB3 = 0014000
-XTABS = 0014000
-BSDLY = 0020000
-BS0 = 0
-BS1 = 0020000
-VTDLY = 0040000
-VT0 = 0
-VT1 = 0040000
-FFDLY = 0100000
-FF0 = 0
-FF1 = 0100000
-PAGEOUT = 0200000
-WRAP = 0400000
-CBAUD = 0000017
-CSIZE = 0000060
-CS5 = 0
-CS6 = 0000020
-CS7 = 0000040
-CS8 = 0000060
-CSTOPB = 0000100
-CREAD = 0000200
-PARENB = 0000400
-PARODD = 0001000
-HUPCL = 0002000
-CLOCAL = 0004000
-RCV1EN = 0010000
-XMT1EN = 0020000
-LOBLK = 0040000
-XCLUDE = 0100000
-CRTSXOFF = 010000000000
-CRTSCTS = 020000000000
-CIBAUD = 03600000
-PAREXT = 04000000
-CBAUDEXT = 010000000
-CIBAUDEXT = 020000000
-CRTS_IFLOW = 010000000000
-CCTS_OFLOW = 020000000000
-ISIG = 0000001
-ICANON = 0000002
-XCASE = 0000004
-ECHO = 0000010
-ECHOE = 0000020
-ECHOK = 0000040
-ECHONL = 0000100
-NOFLSH = 0000200
-TOSTOP = 0000400
-ECHOCTL = 0001000
-ECHOPRT = 0002000
-ECHOKE = 0004000
-DEFECHO = 0010000
-FLUSHO = 0020000
-PENDIN = 0040000
-IEXTEN = 0100000
-_TIOC = (ord('T')<<8)
-TIOC = _TIOC
-TCGETA = (_TIOC|1)
-TCSETA = (_TIOC|2)
-TCSETAW = (_TIOC|3)
-TCSETAF = (_TIOC|4)
-TCSBRK = (_TIOC|5)
-TCXONC = (_TIOC|6)
-TCFLSH = (_TIOC|7)
-TIOCKBON = (_TIOC|8)
-TIOCKBOF = (_TIOC|9)
-KBENABLED = (_TIOC|10)
-IOCTYPE = 0xff00
-TCDSET = (_TIOC|32)
-RTS_TOG = (_TIOC|33)
-TIOCGWINSZ = (_TIOC|104)
-TIOCSWINSZ = (_TIOC|103)
-TIOCGSOFTCAR = (_TIOC|105)
-TIOCSSOFTCAR = (_TIOC|106)
-TCGETS = (_TIOC|13)
-TCSETS = (_TIOC|14)
-TCSANOW = (_TIOC|14)
-TCSETSW = (_TIOC|15)
-TCSADRAIN = (_TIOC|15)
-TCSETSF = (_TIOC|16)
-TCSAFLUSH = (_TIOC|16)
-TCIFLUSH = 0
-TCOFLUSH = 1
-TCIOFLUSH = 2
-TCOOFF = 0
-TCOON = 1
-TCIOFF = 2
-TCION = 3
-tIOC = (ord('t')<<8)
-TIOCGETD = (tIOC|0)
-TIOCSETD = (tIOC|1)
-TIOCHPCL = (tIOC|2)
-TIOCGETP = (tIOC|8)
-TIOCSETP = (tIOC|9)
-TIOCSETN = (tIOC|10)
-TIOCEXCL = (tIOC|13)
-TIOCNXCL = (tIOC|14)
-TIOCFLUSH = (tIOC|16)
-TIOCSETC = (tIOC|17)
-TIOCGETC = (tIOC|18)
-TIOCLBIS = (tIOC|127)
-TIOCLBIC = (tIOC|126)
-TIOCLSET = (tIOC|125)
-TIOCLGET = (tIOC|124)
-TIOCSBRK = (tIOC|123)
-TIOCCBRK = (tIOC|122)
-TIOCSDTR = (tIOC|121)
-TIOCCDTR = (tIOC|120)
-TIOCSLTC = (tIOC|117)
-TIOCGLTC = (tIOC|116)
-TIOCOUTQ = (tIOC|115)
-TIOCNOTTY = (tIOC|113)
-TIOCSTOP = (tIOC|111)
-TIOCSTART = (tIOC|110)
-TIOCGPGRP = (tIOC|20)
-TIOCSPGRP = (tIOC|21)
-TIOCGSID = (tIOC|22)
-TIOCSSID = (tIOC|24)
-TIOCSTI = (tIOC|23)
-TIOCMSET = (tIOC|26)
-TIOCMBIS = (tIOC|27)
-TIOCMBIC = (tIOC|28)
-TIOCMGET = (tIOC|29)
-TIOCM_LE = 0001
-TIOCM_DTR = 0002
-TIOCM_RTS = 0004
-TIOCM_ST = 0010
-TIOCM_SR = 0020
-TIOCM_CTS = 0040
-TIOCM_CAR = 0100
-TIOCM_CD = TIOCM_CAR
-TIOCM_RNG = 0200
-TIOCM_RI = TIOCM_RNG
-TIOCM_DSR = 0400
-TIOCREMOTE = (tIOC|30)
-TIOCSIGNAL = (tIOC|31)
-LDIOC = (ord('D')<<8)
-LDOPEN = (LDIOC|0)
-LDCLOSE = (LDIOC|1)
-LDCHG = (LDIOC|2)
-LDGETT = (LDIOC|8)
-LDSETT = (LDIOC|9)
-LDSMAP = (LDIOC|110)
-LDGMAP = (LDIOC|111)
-LDNMAP = (LDIOC|112)
-LDEMAP = (LDIOC|113)
-LDDMAP = (LDIOC|114)
-DIOC = (ord('d')<<8)
-DIOCGETP = (DIOC|8)
-DIOCSETP = (DIOC|9)
-FIORDCHK = ((ord('f')<<8)|3)
-B0 = 0
-B50 = 1
-B75 = 2
-B110 = 3
-B134 = 4
-B150 = 5
-B200 = 6
-B300 = 7
-B600 = 8
-B1200 = 9
-B1800 = 10
-B2400 = 11
-B4800 = 12
-B9600 = 13
-B19200 = 14
-B38400 = 15
-B57600 = 16
-B76800 = 17
-B115200 = 18
-B153600 = 19
-B230400 = 20
-B307200 = 21
-B460800 = 22
diff --git a/Lib/sunos5/regen b/Lib/sunos5/regen
deleted file mode 100755
index 2f2cdef..0000000
--- a/Lib/sunos5/regen
+++ /dev/null
@@ -1,11 +0,0 @@
-#! /bin/sh
-case `uname -sr` in
-'SunOS 5.'*)	;;
-*)	echo Probably not on a Solaris 2 system 1>&2
-	exit 1;;
-esac
-set -v
-h2py /usr/include/sys/fcntl.h
-h2py /usr/include/sys/socket.h
-h2py -i '(u_long)' /usr/include/netinet/in.h
-h2py /usr/include/termios.h
diff --git a/Lib/win/socket.py b/Lib/win/socket.py
deleted file mode 100755
index 7e1b372..0000000
--- a/Lib/win/socket.py
+++ /dev/null
@@ -1,133 +0,0 @@
-"Socket wrapper for Windows, which does not support dup()."
-
-# (And hence, fromfd() and makefile() are unimplemented in C....)
-
-# XXX Living dangerously here -- close() is implemented by deleting a
-# reference.  Thus we rely on the real _socket module to close on
-# deallocation, and also hope that nobody keeps a reference to our _sock
-# member.
-
-
-
-try:
-    from _socket import *
-except ImportError:
-    from socket import *
-
-_realsocketcall = socket
-
-
-def socket(family, type, proto=0):
-    return _socketobject(_realsocketcall(family, type, proto))
-
-
-class _socketobject:
-
-    def __init__(self, sock):
-	self._sock = sock
-
-    def close(self):
-	self._sock = None
-
-    def __del__(self):
-	self.close()
-
-    def accept(self):
-	sock, addr = self._sock.accept()
-	return _socketobject(sock), addr
-
-    def dup(self):
-	return _socketobject(self._sock)
-
-    def makefile(self, mode='r', bufsize=-1):
-	return _fileobject(self._sock, mode, bufsize)
-
-    _s = "def %s(self, *args): return apply(self._sock.%s, args)\n\n"
-    for _m in ('bind', 'connect', 'fileno', 'listen',
-	       'getpeername', 'getsockname',
-	       'getsockopt', 'setsockopt',
-	       'recv', 'recvfrom', 'send', 'sendto',
-	       'setblocking',
-	       'shutdown'):
-	exec _s % (_m, _m)
-
-
-class _fileobject:
-
-    def __init__(self, sock, mode, bufsize):
-	self._sock = sock
-	self._mode = mode
-	if bufsize < 0:
-	    bufsize = 512
-	self._rbufsize = max(1, bufsize)
-	self._wbufsize = bufsize
-	self._wbuf = self._rbuf = ""
-
-    def close(self):
-	try:
-	    if self._sock:
-		self.flush()
-	finally:
-	    self._sock = None
-
-    def __del__(self):
-	self.close()
-
-    def flush(self):
-	if self._wbuf:
-	    self._sock.send(self._wbuf)
-	    self._wbuf = ""
-
-    def fileno(self):
-	return self._sock.fileno()
-
-    def write(self, data):
-	self._wbuf = self._wbuf + data
-	if self._wbufsize == 1:
-	    if '\n' in data:
-		self.flush()
-	else:
-	    if len(self._wbuf) >= self._wbufsize:
-		self.flush()
-
-    def writelines(self, list):
-	filter(self._sock.send, list)
-	self.flush()
-
-    def read(self, n=-1):
-	if n >= 0:
-	    while len(self._rbuf) < n:
-		new = self._sock.recv(self._rbufsize)
-		if not new: break
-		self._rbuf = self._rbuf + new
-	    data, self._rbuf = self._rbuf[:n], self._rbuf[n:]
-	    return data
-	while 1:
-	    new = self._sock.recv(self._rbufsize)
-	    if not new: break
-	    self._rbuf = self._rbuf + new
-	data, self._rbuf = self._rbuf, ""
-	return data
-
-    def readline(self):
-	import string
-	data = ""
-	i = string.find(self._rbuf, '\n')
-	while i < 0:
-	    new = self._sock.recv(self._rbufsize)
-	    if not new: break
-	    i = string.find(new, '\n')
-	    if i >= 0: i = i + len(self._rbuf)
-	    self._rbuf = self._rbuf + new
-	if i < 0: i = len(self._rbuf)
-	else: i = i+1
-	data, self._rbuf = self._rbuf[:i], self._rbuf[i:]
-	return data
-
-    def readlines(self):
-	list = []
-	while 1:
-	    line = self.readline()
-	    if not line: break
-	    list.append(line)
-	return list
