diff --git a/Lib/plat-irix6/AL.py b/Lib/plat-irix6/AL.py
deleted file mode 100644
index ec941a2..0000000
--- a/Lib/plat-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/plat-irix6/CD.py b/Lib/plat-irix6/CD.py
deleted file mode 100644
index 8c1e03b..0000000
--- a/Lib/plat-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/plat-irix6/CL.py b/Lib/plat-irix6/CL.py
deleted file mode 100644
index 23259c5..0000000
--- a/Lib/plat-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/plat-irix6/DEVICE.py b/Lib/plat-irix6/DEVICE.py
deleted file mode 100644
index 7ace8cb..0000000
--- a/Lib/plat-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/plat-irix6/ERRNO.py b/Lib/plat-irix6/ERRNO.py
deleted file mode 100644
index 1836fa0..0000000
--- a/Lib/plat-irix6/ERRNO.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# Generated by h2py from /usr/include/errno.h
-
-# Included from sys/errno.h
-
-# Included from standards.h
-__KBASE = 1000
-__IRIXBASE = 1000
-__FTNBASE = 4000
-__FTNLAST = 5999
-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
-ECKPT = 47
-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
-EFSCORRUPTED = 1010
-EDIRCORRUPTED = 1010
-EWRONGFS = 1011
-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
-EBDHDL = 1400
-EDELAY = 1401
-ENOBWD = 1402
-EBADRSPEC = 1403
-EBADTSPEC = 1404
-EBADFILT = 1405
-EMIGRATED = 1500
-EMIGRATING = 1501
-ECELLDOWN = 1502
-EMEMRETRY = 1600
diff --git a/Lib/plat-irix6/FILE.py b/Lib/plat-irix6/FILE.py
deleted file mode 100644
index 71b2202..0000000
--- a/Lib/plat-irix6/FILE.py
+++ /dev/null
@@ -1,674 +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
-
-# Included from sys/pthread.h
-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 IS_STRING_SPEC_DEV(x): return ((dev_t)(x)==__makedev(MKDEV_VER, 0, 0))
-
-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 = 0
-NBBY = 8
-
-# Included from sys/cpumask.h
-MAXCPU = 128
-def CPUMASK_INDEX(bit): return ((bit) >> 6)
-
-def CPUMASK_SHFT(bit): return ((bit) & 0x3f)
-
-def CPUMASK_IS_ZERO(p): return ((p) == 0)
-
-def CPUMASK_IS_NONZERO(p): return ((p) != 0)
-
-
-# Included from sys/nodemask.h
-def CNODEMASK_IS_ZERO(p): return ((p) == 0)
-
-def CNODEMASK_IS_NONZERO(p): return ((p) != 0)
-
-
-# Included from sys/sema.h
-
-# Included from sys/timespec.h
-
-# Included from sys/param.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 = 22
-SIGSTOP = 23
-SIGTSTP = 24
-SIGCONT = 25
-SIGTTIN = 26
-SIGTTOU = 27
-SIGVTALRM = 28
-SIGPROF = 29
-SIGXCPU = 30
-SIGXFSZ = 31
-SIGK32 = 32
-SIGCKPT = 33
-SIGRESTART = 34
-SIGUME = 35
-SIGPTINTR = 47
-SIGPTRESCHED = 48
-SIGRTMIN = 49
-SIGRTMAX = 64
-__sigargs = int
-
-# Included from sys/sigevent.h
-SIGEV_NONE = 128
-SIGEV_SIGNAL = 129
-SIGEV_CALLBACK = 130
-SIGEV_THREAD = 131
-
-# Included from sys/siginfo.h
-SI_MAXSZ = 128
-SI_USER = 0
-SI_KILL = SI_USER
-SI_QUEUE = -1
-SI_ASYNCIO = -2
-SI_TIMER = -3
-SI_MESGQ = -4
-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
-UME_ECCERR = 1
-NSIGUME = 1
-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
-CTX_FV0 = 0
-CTX_FV1 = 2
-CTX_FA0 = 12
-CTX_FA1 = 13
-CTX_FA2 = 14
-CTX_FA3 = 15
-CTX_FA4 = 16
-CTX_FA5 = 17
-CTX_FA6 = 18
-CTX_FA7 = 19
-CTX_FT0 = 4
-CTX_FT1 = 5
-CTX_FT2 = 6
-CTX_FT3 = 7
-CTX_FT4 = 8
-CTX_FT5 = 9
-CTX_FT6 = 10
-CTX_FT7 = 11
-CTX_FT8 = 20
-CTX_FT9 = 21
-CTX_FT10 = 22
-CTX_FT11 = 23
-CTX_FT12 = 1
-CTX_FT13 = 3
-CTX_FS0 = 24
-CTX_FS1 = 25
-CTX_FS2 = 26
-CTX_FS3 = 27
-CTX_FS4 = 28
-CTX_FS5 = 29
-CTX_FS6 = 30
-CTX_FS7 = 31
-CTX_FT8 = 21
-CTX_FT9 = 23
-CTX_FT10 = 25
-CTX_FT11 = 27
-CTX_FT12 = 29
-CTX_FT13 = 31
-CTX_FT14 = 1
-CTX_FT15 = 3
-CTX_FS0 = 20
-CTX_FS1 = 22
-CTX_FS2 = 24
-CTX_FS3 = 26
-CTX_FS4 = 28
-CTX_FS5 = 30
-SV_ONSTACK = 0x0001
-SV_INTERRUPT = 0x0002
-NUMBSDSIGS = (32)
-def sigmask(sig): return (1 << ((sig)-1))
-
-def sigmask(sig): return (1 << ((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_MULOVF = 1023
-_POSIX_VERSION = 199506
-_POSIX_VERSION = 199506
-_POSIX_VDISABLE = 0
-MAX_INPUT = 512
-MAX_CANON = 256
-UID_NOBODY = 60001
-GID_NOBODY = UID_NOBODY
-UID_NOACCESS = 60002
-MAXPID = 0x7ffffff0
-MAXUID = 0x7fffffff
-MAXLINK = 30000
-SSIZE = 1
-SINCR = 1
-KSTKSIZE = 1
-EXTKSTKSIZE = 1
-KSTKIDX = 0
-KSTEIDX = 1
-EXTKSTKSIZE = 0
-KSTKIDX = 0
-CANBSIZ = 256
-HZ = 100
-TICK = 10000000
-NOFILE = 20
-NGROUPS_UMIN = 0
-NGROUPS_UMAX = 32
-NGROUPS = 16
-PMASK = 0177
-PCATCH = 0400
-PLTWAIT = 01000
-PRECALC = 01000
-PSWP = 0
-PINOD = 10
-PSNDD = PINOD
-PRIBIO = 20
-PZERO = 25
-PMEM = 0
-NZERO = 20
-PPIPE = 26
-PVFS = 27
-PWAIT = 30
-PSLEP = 39
-PUSER = 60
-PBATCH_CRITICAL = -1
-PTIME_SHARE = -2
-PTIME_SHARE_OVER = -3
-PBATCH = -4
-PWEIGHTLESS = -5
-IO_NBPC = 4096
-IO_BPCSHIFT = 12
-MIN_NBPC = 4096
-MIN_BPCSHIFT = 12
-MIN_CPSSHIFT = 10
-BPCSHIFT = 12
-CPSSHIFT = 10
-BPCSHIFT = 14
-CPSSHIFT = 12
-CPSSHIFT = 11
-BPSSHIFT = (BPCSHIFT+CPSSHIFT)
-NULL = 0
-CMASK = 022
-NODEV = (-1)
-NOPAGE = (-1)
-NBPSCTR = 512
-SCTRSHFT = 9
-def BASEPRI(psw): return (((psw) & SR_IMASK) == SR_IMASK0)
-
-def BASEPRI(psw): return (((psw) & SR_IMASK) == SR_IMASK)
-
-def USERMODE(psw): return (((psw) & SR_KSU_MSK) == SR_KSU_USR)
-
-MAXPATHLEN = 1024
-MAXSYMLINKS = 30
-MAXNAMELEN = 256
-PIPE_BUF = 10240
-PIPE_MAX = 10240
-NBBY = 8
-BBSHIFT = 9
-BBSIZE = (1<<BBSHIFT)
-BBMASK = (BBSIZE-1)
-def BBTOB(bbs): return ((bbs) << BBSHIFT)
-
-def OFFTOBB(bytes): return (((__uint64_t)(bytes) + BBSIZE - 1) >> BBSHIFT)
-
-def OFFTOBBT(bytes): return ((off_t)(bytes) >> BBSHIFT)
-
-def BBTOOFF(bbs): return ((off_t)(bbs) << BBSHIFT)
-
-SEEKLIMIT32 = 0x7fffffff
-MAXBSIZE = 8192
-DEV_BSIZE = BBSIZE
-DEV_BSHIFT = BBSHIFT
-def btodb(bytes): return   \
-
-def dbtob(db): return   \
-
-BLKDEV_IOSHIFT = BPCSHIFT
-BLKDEV_IOSIZE = (1<<BLKDEV_IOSHIFT)
-def BLKDEV_OFF(off): return ((off) & (BLKDEV_IOSIZE - 1))
-
-def BLKDEV_LBN(off): return ((off) >> BLKDEV_IOSHIFT)
-
-def BLKDEV_LTOP(bn): return ((bn) * BLKDEV_BB)
-
-MAXHOSTNAMELEN = 256
-def DELAY(n): return us_delay(n)
-
-def DELAYBUS(n): return us_delaybus(n)
-
-TIMEPOKE_NOW = -100
-MUTEX_DEFAULT = 0x0
-METER_NAMSZ = 16
-METER_NO_SEQ = -1
-def mutex_spinlock(l): return splhi()
-
-def mutex_spintrylock(l): return splhi()
-
-def spinlock_initialized(l): return 1
-
-SV_FIFO = 0x0
-SV_LIFO = 0x2
-SV_PRIO = 0x4
-SV_KEYED = 0x6
-SV_DEFAULT = SV_FIFO
-SEMA_NOHIST = 0x0001
-SEMA_LOCK = 0x0004
-NSCHEDCLASS = (-(PWEIGHTLESS)+1)
-MR_ACCESS = 1
-MR_UPDATE = 2
-MRLOCK_BARRIER = 0x1
-MRLOCK_BEHAVIOR = 0x2
-MRLOCK_DBLTRIPPABLE = 0x4
-MRLOCK_ALLOW_EQUAL_PRI = 0x8
-MRLOCK_DEFAULT = MRLOCK_BARRIER
-def mraccess(mrp): return mraccessf(mrp, 0)
-
-def mrupdate(mrp): return mrupdatef(mrp, 0)
-
-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)
-
-
-# Included from sys/mon.h
-MON_LOCKED = 0x01
-MON_WAITING = 0x02
-MON_TIMEOUT = 0x04
-MON_DOSRV = 0x08
-MON_RUN = 0x10
-MR_READER_BUCKETS = 13
-def initlock(l): return spinlock_init(l,0)
-
-def ownlock(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 mrtrypromote(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)
-
-MS_FREE = 0
-MS_UPD = 1
-MS_ACC = 2
-MS_WAITERS = 4
-
-# 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
-FBULK = 0x10000
-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_BULK = 0x10000
-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_CHKFL = 8
-F_ALLOCSP = 10
-F_FREESP = 11
-F_SETBSDLK = 12
-F_SETBSDLKW = 13
-F_GETLK = 14
-F_CHKLK = 15
-F_CHKLKW = 16
-F_CLNLK = 17
-F_RSETLK = 20
-F_RGETLK = 21
-F_RSETLKW = 22
-F_GETOWN = 23
-F_SETOWN = 24
-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_SETBIOSIZE = 46
-F_GETBIOSIZE = 47
-F_GETOPS = 50
-F_DMAPI = 51
-F_FSYNC = 52
-F_FSYNC64 = 53
-F_GETBDSATTR = 54
-F_SETBDSATTR = 55
-F_GETBMAPX = 56
-F_SETPRIO = 57
-F_GETPRIO = 58
-F_RDLCK = 01
-F_WRLCK = 02
-F_UNLCK = 03
-O_ACCMODE = 3
-FD_CLOEXEC = 1
-FD_NODUP_FORK = 4
-BMV_IF_ATTRFORK = 0x1
-BMV_IF_NO_DMAPI_READ = 0x2
-BMV_IF_PREALLOC = 0x4
-BMV_IF_VALID = (BMV_IF_ATTRFORK|BMV_IF_NO_DMAPI_READ|BMV_IF_PREALLOC)
-BMV_OF_PREALLOC = 0x1
-BMV_IF_EXTENDED = 0x40000000
-FMASK = 0x190FF
-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
-FBULK = 0x10000
-FCREAT = 0x0100
-FTRUNC = 0x0200
-FEXCL = 0x0400
-FNOCTTY = 0x0800
-FINVIS = 0x0100
-FSOCKET = 0x0200
-FINPROGRESS = 0x0400
-FPRIORITY = 0x0800
-FPRIO = 0x4000
-FDIRENT64 = 0x8000
-FCLOSEXEC = 0x01
-LOCK_SH = 1
-LOCK_EX = 2
-LOCK_NB = 4
-LOCK_UN = 8
-L_SET = 0
-L_INCR = 1
-L_XTND = 2
-F_OK = 0
-X_OK = 1
-W_OK = 2
-R_OK = 4
diff --git a/Lib/plat-irix6/FL.py b/Lib/plat-irix6/FL.py
deleted file mode 100644
index 727da4c..0000000
--- a/Lib/plat-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 is not 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/plat-irix6/GET.py b/Lib/plat-irix6/GET.py
deleted file mode 100644
index 9c3d7d6..0000000
--- a/Lib/plat-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/plat-irix6/GL.py b/Lib/plat-irix6/GL.py
deleted file mode 100644
index 9f02f65..0000000
--- a/Lib/plat-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/plat-irix6/GLWS.py b/Lib/plat-irix6/GLWS.py
deleted file mode 100644
index 69dab71..0000000
--- a/Lib/plat-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/plat-irix6/IN.py b/Lib/plat-irix6/IN.py
deleted file mode 100644
index 5f91050..0000000
--- a/Lib/plat-irix6/IN.py
+++ /dev/null
@@ -1,385 +0,0 @@
-# Generated by h2py from /usr/include/netinet/in.h
-
-# Included from standards.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/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 IS_STRING_SPEC_DEV(x): return ((dev_t)(x)==__makedev(MKDEV_VER, 0, 0))
-
-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 = 0
-NBBY = 8
-
-# Included from sys/endian.h
-LITTLE_ENDIAN = 1234
-BIG_ENDIAN = 4321
-PDP_ENDIAN = 3412
-_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/types.h
-
-# Included from sys/pthread.h
-P_MYID = (-1)
-P_MYHOSTID = (-1)
-
-# Included from sys/cpumask.h
-MAXCPU = 128
-def CPUMASK_INDEX(bit): return ((bit) >> 6)
-
-def CPUMASK_SHFT(bit): return ((bit) & 0x3f)
-
-def CPUMASK_IS_ZERO(p): return ((p) == 0)
-
-def CPUMASK_IS_NONZERO(p): return ((p) != 0)
-
-
-# Included from sys/nodemask.h
-def CNODEMASK_IS_ZERO(p): return ((p) == 0)
-
-def CNODEMASK_IS_NONZERO(p): return ((p) != 0)
-
-IPPROTO_IP = 0
-IPPROTO_HOPOPTS = 0
-IPPROTO_ICMP = 1
-IPPROTO_IGMP = 2
-IPPROTO_GGP = 3
-IPPROTO_IPIP = 4
-IPPROTO_ENCAP = IPPROTO_IPIP
-IPPROTO_ST = 5
-IPPROTO_TCP = 6
-IPPROTO_UCL = 7
-IPPROTO_EGP = 8
-IPPROTO_IGP = 9
-IPPROTO_BBN_RCC_MON = 10
-IPPROTO_NVP_II = 11
-IPPROTO_PUP = 12
-IPPROTO_ARGUS = 13
-IPPROTO_EMCON = 14
-IPPROTO_XNET = 15
-IPPROTO_CHAOS = 16
-IPPROTO_UDP = 17
-IPPROTO_MUX = 18
-IPPROTO_DCN_MEAS = 19
-IPPROTO_HMP = 20
-IPPROTO_PRM = 21
-IPPROTO_IDP = 22
-IPPROTO_TRUNK_1 = 23
-IPPROTO_TRUNK_2 = 24
-IPPROTO_LEAF_1 = 25
-IPPROTO_LEAF_2 = 26
-IPPROTO_RDP = 27
-IPPROTO_IRTP = 28
-IPPROTO_TP = 29
-IPPROTO_NETBLT = 30
-IPPROTO_MFE_NSP = 31
-IPPROTO_MERIT_INP = 32
-IPPROTO_SEP = 33
-IPPROTO_3PC = 34
-IPPROTO_IDPR = 35
-IPPROTO_XTP = 36
-IPPROTO_DDP = 37
-IPPROTO_IDPR_CMTP = 38
-IPPROTO_TPPP = 39
-IPPROTO_IL = 40
-IPPROTO_IPV6 = 41
-IPPROTO_ROUTING = 43
-IPPROTO_FRAGMENT = 44
-IPPROTO_RSVP = 46
-IPPROTO_ESP = 50
-IPPROTO_AH = 51
-IPPROTO_ICMPV6 = 58
-IPPROTO_NONE = 59
-IPPROTO_DSTOPTS = 60
-IPPROTO_CFTP = 62
-IPPROTO_HELLO = 63
-IPPROTO_SAT_EXPAK = 64
-IPPROTO_KRYPTOLAN = 65
-IPPROTO_RVD = 66
-IPPROTO_IPPC = 67
-IPPROTO_SAT_MON = 69
-IPPROTO_VISA = 70
-IPPROTO_IPCV = 71
-IPPROTO_CPNX = 72
-IPPROTO_CPHB = 73
-IPPROTO_WSN = 74
-IPPROTO_PVP = 75
-IPPROTO_BR_SAT_MON = 76
-IPPROTO_ND = 77
-IPPROTO_WB_MON = 78
-IPPROTO_WB_EXPAK = 79
-IPPROTO_EON = 80
-IPPROTO_VMTP = 81
-IPPROTO_SECURE_VMTP = 82
-IPPROTO_VINES = 83
-IPPROTO_TTP = 84
-IPPROTO_NSFNET_IGP = 85
-IPPROTO_DGP = 86
-IPPROTO_TCF = 87
-IPPROTO_IGRP = 88
-IPPROTO_OSPF = 89
-IPPROTO_SPRITE_RPC = 90
-IPPROTO_LARP = 91
-IPPROTO_MTP = 92
-IPPROTO_AX25 = 93
-IPPROTO_SWIPE = 94
-IPPROTO_MICP = 95
-IPPROTO_AES_SP3_D = 96
-IPPROTO_ETHERIP = 97
-IPPROTO_ENCAPHDR = 98
-IPPROTO_RAW = 255
-IPPROTO_MAX = 256
-IPPROTO_STP = 257
-IPPORT_RESERVED = 1024
-IPPORT_MAXPORT = 65535
-INET_ADDRSTRLEN = 16
-INET6_ADDRSTRLEN = 46
-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
-IPNGVERSION = 6
-IPV6_FLOWINFO_FLOWLABEL = 0x00ffffff
-IPV6_FLOWINFO_PRIORITY = 0x0f000000
-IPV6_FLOWINFO_PRIFLOW = 0x0fffffff
-IPV6_FLOWINFO_SRFLAG = 0x10000000
-IPV6_FLOWINFO_VERSION = 0xf0000000
-IPV6_PRIORITY_UNCHARACTERIZED = 0x00000000
-IPV6_PRIORITY_FILLER = 0x01000000
-IPV6_PRIORITY_UNATTENDED = 0x02000000
-IPV6_PRIORITY_RESERVED1 = 0x03000000
-IPV6_PRIORITY_BULK = 0x04000000
-IPV6_PRIORITY_RESERVED2 = 0x05000000
-IPV6_PRIORITY_INTERACTIVE = 0x06000000
-IPV6_PRIORITY_CONTROL = 0x07000000
-IPV6_PRIORITY_8 = 0x08000000
-IPV6_PRIORITY_9 = 0x09000000
-IPV6_PRIORITY_10 = 0x0a000000
-IPV6_PRIORITY_11 = 0x0b000000
-IPV6_PRIORITY_12 = 0x0c000000
-IPV6_PRIORITY_13 = 0x0d000000
-IPV6_PRIORITY_14 = 0x0e000000
-IPV6_PRIORITY_15 = 0x0f000000
-IPV6_SRFLAG_STRICT = 0x10000000
-IPV6_SRFLAG_LOOSE = 0x00000000
-IPV6_VERSION = 0x60000000
-IPV6_FLOWINFO_FLOWLABEL = 0xffffff00
-IPV6_FLOWINFO_PRIORITY = 0x0000000f
-IPV6_FLOWINFO_PRIFLOW = 0xffffff0f
-IPV6_FLOWINFO_SRFLAG = 0x00000010
-IPV6_FLOWINFO_VERSION = 0x000000f0
-IPV6_PRIORITY_UNCHARACTERIZED = 0x00000000
-IPV6_PRIORITY_FILLER = 0x00000001
-IPV6_PRIORITY_UNATTENDED = 0x00000002
-IPV6_PRIORITY_RESERVED1 = 0x00000003
-IPV6_PRIORITY_BULK = 0x00000004
-IPV6_PRIORITY_RESERVED2 = 0x00000005
-IPV6_PRIORITY_INTERACTIVE = 0x00000006
-IPV6_PRIORITY_CONTROL = 0x00000007
-IPV6_PRIORITY_8 = 0x00000008
-IPV6_PRIORITY_9 = 0x00000009
-IPV6_PRIORITY_10 = 0x0000000a
-IPV6_PRIORITY_11 = 0x0000000b
-IPV6_PRIORITY_12 = 0x0000000c
-IPV6_PRIORITY_13 = 0x0000000d
-IPV6_PRIORITY_14 = 0x0000000e
-IPV6_PRIORITY_15 = 0x0000000f
-IPV6_SRFLAG_STRICT = 0x00000010
-IPV6_SRFLAG_LOOSE = 0x00000000
-IPV6_VERSION = 0x00000060
-def IPV6_GET_FLOWLABEL(x): return (ntohl(x) & 0x00ffffff)
-
-def IPV6_GET_PRIORITY(x): return ((ntohl(x) >> 24) & 0xf)
-
-def IPV6_GET_VERSION(x): return ((ntohl(x) >> 28) & 0xf)
-
-def IPV6_SET_FLOWLABEL(x): return (htonl(x) & IPV6_FLOWINFO_FLOWLABEL)
-
-def IPV6_SET_PRIORITY(x): return (htonl((x & 0xf) << 24))
-
-def CLR_ADDR6(a): return \
-
-def IS_ANYSOCKADDR(a): return \
-
-def IS_ANYADDR6(a): return \
-
-def IS_COMPATSOCKADDR(a): return \
-
-def IS_COMPATADDR6(a): return \
-
-def IS_LOOPSOCKADDR(a): return \
-
-def IS_LOOPADDR6(a): return \
-
-def IS_IPV4SOCKADDR(a): return \
-
-def IS_IPV4ADDR6(a): return \
-
-def IS_LOOPSOCKADDR(a): return \
-
-def IS_LOOPADDR6(a): return \
-
-def IS_IPV4SOCKADDR(a): return \
-
-def IS_IPV4ADDR6(a): return \
-
-def IS_LOCALADDR6(a): return ((a).s6_addr8[0] == 0xfe)
-
-def IS_LINKLADDR6(a): return \
-
-def IS_SITELADDR6(a): return \
-
-def IS_MULTIADDR6(a): return ((a).s6_addr8[0] == 0xff)
-
-def MADDR6_FLAGS(a): return ((a).s6_addr8[1] >> 4)
-
-MADDR6_FLG_WK = 0
-MADDR6_FLG_TS = 1
-def MADDR6_SCOPE(a): return ((a).s6_addr8[1] & 0x0f)
-
-MADDR6_SCP_NODE = 0x1
-MADDR6_SCP_LINK = 0x2
-MADDR6_SCP_SITE = 0x5
-MADDR6_SCP_ORG = 0x8
-MADDR6_SCP_GLO = 0xe
-MADDR6_ALLNODES = 1
-MADDR6_ALLROUTERS = 2
-MADDR6_ALLHOSTS = 3
-def IN6_IS_ADDR_UNSPECIFIED(p): return IS_ANYADDR6(*p)
-
-def IN6_IS_ADDR_LOOPBACK(p): return IS_LOOPADDR6(*p)
-
-def IN6_IS_ADDR_MULTICAST(p): return IS_MULTIADDR6(*p)
-
-def IN6_IS_ADDR_LINKLOCAL(p): return IS_LINKLADDR6(*p)
-
-def IN6_IS_ADDR_SITELOCAL(p): return IS_SITELADDR6(*p)
-
-def IN6_IS_ADDR_V4MAPPED(p): return IS_IPV4ADDR6(*p)
-
-def IN6_IS_ADDR_V4COMPAT(p): return IS_COMPATADDR6(*p)
-
-def IN6_IS_ADDR_MC_NODELOCAL(p): return \
-
-def IN6_IS_ADDR_MC_LINKLOCAL(p): return \
-
-def IN6_IS_ADDR_MC_SITELOCAL(p): return \
-
-def IN6_IS_ADDR_MC_ORGLOCAL(p): return \
-
-def IN6_IS_ADDR_MC_GLOBAL(p): 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 = 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
-IPV6_UNICAST_HOPS = IP_TTL
-IPV6_MULTICAST_IF = IP_MULTICAST_IF
-IPV6_MULTICAST_HOPS = IP_MULTICAST_TTL
-IPV6_MULTICAST_LOOP = IP_MULTICAST_LOOP
-IPV6_ADD_MEMBERSHIP = IP_ADD_MEMBERSHIP
-IPV6_DROP_MEMBERSHIP = IP_DROP_MEMBERSHIP
-IPV6_SENDIF = 40
-IPV6_NOPROBE = 42
-IPV6_RECVPKTINFO = 43
-IPV6_PKTINFO = 44
-IP_RECVTTL = 45
-IPV6_RECVHOPS = IP_RECVTTL
-IPV6_CHECKSUM = 46
-ICMP6_FILTER = 47
-IPV6_HOPLIMIT = 48
-IPV6_HOPOPTS = 49
-IPV6_DSTOPTS = 50
-IPV6_RTHDR = 51
-IPV6_PKTOPTIONS = 52
-IPV6_NEXTHOP = 53
-IP_DEFAULT_MULTICAST_TTL = 1
-IP_DEFAULT_MULTICAST_LOOP = 1
-IPV6_RTHDR_LOOSE = 0
-IPV6_RTHDR_STRICT = 1
-IPV6_RTHDR_TYPE_0 = 0
diff --git a/Lib/plat-irix6/IOCTL.py b/Lib/plat-irix6/IOCTL.py
deleted file mode 100644
index cec3c3f..0000000
--- a/Lib/plat-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/plat-irix6/SV.py b/Lib/plat-irix6/SV.py
deleted file mode 100644
index db8efe5..0000000
--- a/Lib/plat-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/plat-irix6/WAIT.py b/Lib/plat-irix6/WAIT.py
deleted file mode 100644
index 13a87e4..0000000
--- a/Lib/plat-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 = 0
-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 (1 << ((sig)-1))
-
-def sigmask(sig): return (1 << ((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/plat-irix6/cddb.py b/Lib/plat-irix6/cddb.py
deleted file mode 100644
index bdd2ec3..0000000
--- a/Lib/plat-irix6/cddb.py
+++ /dev/null
@@ -1,203 +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 posix, os
-
-_cddbrc = '.cddb'
-_DB_ID_NTRACKS = 5
-_dbid_map = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@_=+abcdefghijklmnopqrstuvwxyz'
-def _dbid(v):
-    if v >= len(_dbid_map):
-        return v.zfill(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,
-                      (int(toc[i:i+2]),
-                       int(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 = path.split(',')
-        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 = int(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 re
-        reg = re.compile(r'^([^.]*)\.([^:]*):[\t ]+(.*)')
-        while 1:
-            line = f.readline()
-            if not line:
-                break
-            match = reg.match(line)
-            if not match:
-                print('syntax error in ' + file)
-                continue
-            name1, name2, value = match.group(1, 2, 3)
-            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 = int(name1[5:])
-                except ValueError:
-                    print('syntax error in ' + file)
-                    continue
-                if trackno > ntracks:
-                    print('track number %r in file %s out of range' % (trackno, file))
-                    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 = self.track[i - 1].index(',')
-                except ValueError:
-                    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, \
-                          (int(tracklist[i:i+2]), \
-                           int(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 = ntracks.zfill(2)
-        for track in tracklist:
-            start, length = track
-            self.toc = self.toc + length[0].zfill(2) + length[1].zfill(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%r.artist:\t%s\n' % (i, self.trackartist[i]))
-            track = self.track[i]
-            try:
-                off = track.index(',')
-            except ValueError:
-                prevpref = None
-            else:
-                if prevpref and track[:off] == prevpref:
-                    track = track[off:]
-                else:
-                    prevpref = track[:off]
-            f.write('track%r.title:\t%s\n' % (i, track))
-        f.close()
diff --git a/Lib/plat-irix6/cdplayer.py b/Lib/plat-irix6/cdplayer.py
deleted file mode 100644
index 493527f..0000000
--- a/Lib/plat-irix6/cdplayer.py
+++ /dev/null
@@ -1,87 +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):
-        self.artist = ''
-        self.title = ''
-        if type(tracklist) == type(''):
-            t = []
-            for i in range(2, len(tracklist), 4):
-                t.append((None, \
-                          (int(tracklist[i:i+2]), \
-                           int(tracklist[i+2:i+4]))))
-            tracklist = t
-        self.track = [None] + [''] * len(tracklist)
-        self.id = 'd' + repr(len(tracklist)).zfill(2)
-        for track in tracklist:
-            start, length = track
-            self.id = self.id + repr(length[0]).zfill(2) + \
-                      repr(length[1]).zfill(2)
-        try:
-            import posix
-            f = open(posix.environ['HOME'] + '/' + cdplayerrc, 'r')
-        except IOError:
-            return
-        import re
-        reg = re.compile(r'^([^:]*):\t(.*)')
-        s = self.id + '.'
-        l = len(s)
-        while 1:
-            line = f.readline()
-            if line == '':
-                break
-            if line[:l] == s:
-                line = line[l:]
-                match = reg.match(line)
-                if not match:
-                    print('syntax error in ~/' + cdplayerrc)
-                    continue
-                name, value = match.group(1, 2)
-                if name == 'title':
-                    self.title = value
-                elif name == 'artist':
-                    self.artist = value
-                elif name[:5] == 'track':
-                    trackno = int(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('%s.track.%r:\t%s\n' % (i, track))
-        old.close()
-        new.close()
-        posix.rename(filename + '.new', filename)
diff --git a/Lib/plat-irix6/flp.doc b/Lib/plat-irix6/flp.doc
deleted file mode 100644
index 1a2f374..0000000
--- a/Lib/plat-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/plat-irix6/flp.py b/Lib/plat-irix6/flp.py
deleted file mode 100644
index fee0894..0000000
--- a/Lib/plat-irix6/flp.py
+++ /dev/null
@@ -1,452 +0,0 @@
-#
-# flp - Module to load fl forms from fd files
-#
-# Jack Jansen, December 1991
-#
-import os
-import sys
-import FL
-
-SPLITLINE = '--------------------'
-FORMLINE = '=============== FORM ==============='
-ENDLINE = '=============================='
-
-class error(Exception):
-    pass
-
-##################################################################
-#    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 is not 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[', repr(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 is 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 'always 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 is 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 convenient 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 = str.split()
-    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 re
-prog = re.compile('^([^:]*): *(.*)')
-
-def _parse_line(line):
-    match = prog.match(line)
-    if not match:
-        return line
-    name, value = match.group(1, 2)
-    if name[0] == 'N':
-        name = ''.join(name.split())
-        name = name.lower()
-    name = name.capitalize()
-    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) is not 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, formdata):
-    fdata, odatalist = formdata
-    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, formdata):
-    fdata, odatalist = formdata
-    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: %r' % (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)
diff --git a/Lib/plat-irix6/readcd.doc b/Lib/plat-irix6/readcd.doc
deleted file mode 100644
index 1be549c..0000000
--- a/Lib/plat-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/plat-irix6/readcd.py b/Lib/plat-irix6/readcd.py
deleted file mode 100644
index 5453ce4..0000000
--- a/Lib/plat-irix6/readcd.py
+++ /dev/null
@@ -1,244 +0,0 @@
-# Class interface to the CD module.
-
-import cd, CD
-
-class Error(Exception):
-    pass
-class _Stop(Exception):
-    pass
-
-def _doatime(self, cb_type, data):
-    if ((data[0] * 60) + data[1]) * 75 + data[2] > self.end:
-##              print 'done with list entry', repr(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', repr(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/plat-irix6/regen b/Lib/plat-irix6/regen
deleted file mode 100755
index 6a2cb40..0000000
--- a/Lib/plat-irix6/regen
+++ /dev/null
@@ -1,11 +0,0 @@
-#! /bin/sh
-case `uname -sr` in
-'IRIX '[456].*)	;;
-'IRIX64 '[456].*)	;;
-*)	echo Probably not on an IRIX system 1>&2
-	exit 1;;
-esac
-set -v
-h2py /usr/include/sys/file.h
-h2py -i '(u_long)' /usr/include/netinet/in.h
-h2py /usr/include/errno.h
diff --git a/Lib/plat-irix6/torgb.py b/Lib/plat-irix6/torgb.py
deleted file mode 100644
index 02bcb53..0000000
--- a/Lib/plat-irix6/torgb.py
+++ /dev/null
@@ -1,99 +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', '--')
-
-
-class error(Exception):
-    pass
-
-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':
-        (fd, fname) = tempfile.mkstemp()
-        os.close(fd)
-        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 as 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) is not type(''):
-            msg = repr(msg)
-        raise error, filename + ': ' + msg
-    if ftype == 'rgb':
-        return fname
-    if ftype is None or not table.has_key(ftype):
-        raise error, '%s: unsupported image file type %r' % (filename, ftype)
-    (fd, temp) = tempfile.mkstemp()
-    os.close(fd)
-    sts = table[ftype].copy(fname, temp)
-    if sts:
-        raise error, filename + ': conversion to rgb failed'
-    return temp
diff --git a/Lib/string.py b/Lib/string.py
index 2bf4995..fd8e91b 100644
--- a/Lib/string.py
+++ b/Lib/string.py
@@ -195,14 +195,3 @@
             raise ValueError('Unrecognized named group in pattern',
                              self.pattern)
         return self.pattern.sub(convert, self.template)
-
-
-# Try importing optional built-in module "strop" -- if it exists,
-# it redefines some string operations that are 100-1000 times faster.
-# It also defines values for whitespace, lowercase and uppercase
-# that match <ctype.h>'s definitions.
-
-try:
-    from strop import maketrans
-except ImportError:
-    pass                                          # Use the original versions
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 6e52021..1cd553c 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -107,11 +107,8 @@
     decimal -   Test the decimal module against a large suite that
                 verifies compliance with standards.
 
-    compiler -  Test the compiler package by compiling all the source
-                in the standard library and test suite.  This takes
-                a long time.  Enabling this resource also allows
-                test_tokenize to verify round-trip lexing on every
-                file in the test library.
+    compiler -  Allow test_tokenize to verify round-trip lexing on
+                every file in the test library.
 
     subprocess  Run all tests for the subprocess module.
 
@@ -987,7 +984,6 @@
         test_poll
         test_pty
         test_pwd
-        test_strop
         test_sqlite
         test_startfile
         test_sunaudiodev
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index b1d6790..64b13b7 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -11,7 +11,6 @@
 
 from test.test_support import (TESTFN, unlink, run_unittest,
                                 guard_warnings_filter)
-from test.test_pep352 import ignore_message_warning
 
 # XXX This is not really enough, each *operation* should be tested!
 
@@ -205,115 +204,113 @@
         # test that exception attributes are happy
 
         exceptionList = [
-            (BaseException, (), {'message' : '', 'args' : ()}),
-            (BaseException, (1, ), {'message' : 1, 'args' : (1,)}),
+            (BaseException, (), {'args' : ()}),
+            (BaseException, (1, ), {'args' : (1,)}),
             (BaseException, ('foo',),
-                {'message' : 'foo', 'args' : ('foo',)}),
+                {'args' : ('foo',)}),
             (BaseException, ('foo', 1),
-                {'message' : '', 'args' : ('foo', 1)}),
+                {'args' : ('foo', 1)}),
             (SystemExit, ('foo',),
-                {'message' : 'foo', 'args' : ('foo',), 'code' : 'foo'}),
+                {'args' : ('foo',), 'code' : 'foo'}),
             (IOError, ('foo',),
-                {'message' : 'foo', 'args' : ('foo',), 'filename' : None,
+                {'args' : ('foo',), 'filename' : None,
                  'errno' : None, 'strerror' : None}),
             (IOError, ('foo', 'bar'),
-                {'message' : '', 'args' : ('foo', 'bar'), 'filename' : None,
+                {'args' : ('foo', 'bar'), 'filename' : None,
                  'errno' : 'foo', 'strerror' : 'bar'}),
             (IOError, ('foo', 'bar', 'baz'),
-                {'message' : '', 'args' : ('foo', 'bar'), 'filename' : 'baz',
+                {'args' : ('foo', 'bar'), 'filename' : 'baz',
                  'errno' : 'foo', 'strerror' : 'bar'}),
             (IOError, ('foo', 'bar', 'baz', 'quux'),
-                {'message' : '', 'args' : ('foo', 'bar', 'baz', 'quux')}),
+                {'args' : ('foo', 'bar', 'baz', 'quux')}),
             (EnvironmentError, ('errnoStr', 'strErrorStr', 'filenameStr'),
-                {'message' : '', 'args' : ('errnoStr', 'strErrorStr'),
+                {'args' : ('errnoStr', 'strErrorStr'),
                  'strerror' : 'strErrorStr', 'errno' : 'errnoStr',
                  'filename' : 'filenameStr'}),
             (EnvironmentError, (1, 'strErrorStr', 'filenameStr'),
-                {'message' : '', 'args' : (1, 'strErrorStr'), 'errno' : 1,
+                {'args' : (1, 'strErrorStr'), 'errno' : 1,
                  'strerror' : 'strErrorStr', 'filename' : 'filenameStr'}),
-            (SyntaxError, (), {'message' : '', 'msg' : None, 'text' : None,
+            (SyntaxError, (), {'msg' : None, 'text' : None,
                 'filename' : None, 'lineno' : None, 'offset' : None,
                 'print_file_and_line' : None}),
             (SyntaxError, ('msgStr',),
-                {'message' : 'msgStr', 'args' : ('msgStr',), 'text' : None,
+                {'args' : ('msgStr',), 'text' : None,
                  'print_file_and_line' : None, 'msg' : 'msgStr',
                  'filename' : None, 'lineno' : None, 'offset' : None}),
             (SyntaxError, ('msgStr', ('filenameStr', 'linenoStr', 'offsetStr',
                            'textStr')),
-                {'message' : '', 'offset' : 'offsetStr', 'text' : 'textStr',
+                {'offset' : 'offsetStr', 'text' : 'textStr',
                  'args' : ('msgStr', ('filenameStr', 'linenoStr',
                                       'offsetStr', 'textStr')),
                  'print_file_and_line' : None, 'msg' : 'msgStr',
                  'filename' : 'filenameStr', 'lineno' : 'linenoStr'}),
             (SyntaxError, ('msgStr', 'filenameStr', 'linenoStr', 'offsetStr',
                            'textStr', 'print_file_and_lineStr'),
-                {'message' : '', 'text' : None,
+                {'text' : None,
                  'args' : ('msgStr', 'filenameStr', 'linenoStr', 'offsetStr',
                            'textStr', 'print_file_and_lineStr'),
                  'print_file_and_line' : None, 'msg' : 'msgStr',
                  'filename' : None, 'lineno' : None, 'offset' : None}),
-            (UnicodeError, (), {'message' : '', 'args' : (),}),
+            (UnicodeError, (), {'args' : (),}),
             (UnicodeEncodeError, (str8('ascii'), 'a', 0, 1,
                                   str8('ordinal not in range')),
-                {'message' : '', 'args' : ('ascii', 'a', 0, 1,
+                {'args' : ('ascii', 'a', 0, 1,
                                            'ordinal not in range'),
                  'encoding' : 'ascii', 'object' : 'a',
                  'start' : 0, 'reason' : 'ordinal not in range'}),
             (UnicodeDecodeError, (str8('ascii'), b'\xff', 0, 1,
                                   str8('ordinal not in range')),
-                {'message' : '', 'args' : ('ascii', b'\xff', 0, 1,
+                {'args' : ('ascii', b'\xff', 0, 1,
                                            'ordinal not in range'),
                  'encoding' : 'ascii', 'object' : b'\xff',
                  'start' : 0, 'reason' : 'ordinal not in range'}),
             (UnicodeTranslateError, ("\u3042", 0, 1, str8("ouch")),
-                {'message' : '', 'args' : ('\u3042', 0, 1, 'ouch'),
+                {'args' : ('\u3042', 0, 1, 'ouch'),
                  'object' : '\u3042', 'reason' : 'ouch',
                  'start' : 0, 'end' : 1}),
         ]
         try:
             exceptionList.append(
                 (WindowsError, (1, 'strErrorStr', 'filenameStr'),
-                    {'message' : '', 'args' : (1, 'strErrorStr'),
+                    {'args' : (1, 'strErrorStr'),
                      'strerror' : 'strErrorStr', 'winerror' : 1,
                      'errno' : 22, 'filename' : 'filenameStr'})
             )
         except NameError:
             pass
 
-        with guard_warnings_filter():
-            ignore_message_warning()
-            for exc, args, expected in exceptionList:
-                try:
-                    e = exc(*args)
-                except:
-                    print("\nexc=%r, args=%r" % (exc, args))
-                    raise
-                else:
-                    # Verify module name
-                    self.assertEquals(type(e).__module__, '__builtin__')
-                    # Verify no ref leaks in Exc_str()
-                    s = str(e)
-                    for checkArgName in expected:
-                        value = getattr(e, checkArgName)
-                        self.assertEquals(repr(value),
-                                          repr(expected[checkArgName]),
-                                          '%r.%s == %r, expected %r' % (
-                                          e, checkArgName,
-                                          value, expected[checkArgName]))
+        for exc, args, expected in exceptionList:
+            try:
+                e = exc(*args)
+            except:
+                print("\nexc=%r, args=%r" % (exc, args))
+                raise
+            else:
+                # Verify module name
+                self.assertEquals(type(e).__module__, '__builtin__')
+                # Verify no ref leaks in Exc_str()
+                s = str(e)
+                for checkArgName in expected:
+                    value = getattr(e, checkArgName)
+                    self.assertEquals(repr(value),
+                                      repr(expected[checkArgName]),
+                                      '%r.%s == %r, expected %r' % (
+                                      e, checkArgName,
+                                      value, expected[checkArgName]))
 
-                    # test for pickling support
-                    for p in pickle, cPickle:
-                        if p is None:
-                            continue # cPickle not found -- skip it
-                        for protocol in range(p.HIGHEST_PROTOCOL + 1):
-                            s = p.dumps(e, protocol)
-                            new = p.loads(s)
-                            for checkArgName in expected:
-                                got = repr(getattr(new, checkArgName))
-                                want = repr(expected[checkArgName])
-                                self.assertEquals(got, want,
-                                                  'pickled "%r", attribute "%s' %
-                                                  (e, checkArgName))
+                # test for pickling support
+                for p in pickle, cPickle:
+                    if p is None:
+                        continue # cPickle not found -- skip it
+                    for protocol in range(p.HIGHEST_PROTOCOL + 1):
+                        s = p.dumps(e, protocol)
+                        new = p.loads(s)
+                        for checkArgName in expected:
+                            got = repr(getattr(new, checkArgName))
+                            want = repr(expected[checkArgName])
+                            self.assertEquals(got, want,
+                                              'pickled "%r", attribute "%s' %
+                                              (e, checkArgName))
 
     def testKeywordArgs(self):
         # test that builtin exception don't take keyword args,
diff --git a/Lib/test/test_pep352.py b/Lib/test/test_pep352.py
index b372ce9..90766ba 100644
--- a/Lib/test/test_pep352.py
+++ b/Lib/test/test_pep352.py
@@ -5,12 +5,6 @@
 import os
 from platform import system as platform_system
 
-def ignore_message_warning():
-    """Ignore the DeprecationWarning for BaseException.message."""
-    warnings.resetwarnings()
-    warnings.filterwarnings("ignore", "BaseException.message",
-                            DeprecationWarning)
-
 
 class ExceptionClassTests(unittest.TestCase):
 
@@ -21,12 +15,10 @@
         self.failUnless(issubclass(Exception, object))
 
     def verify_instance_interface(self, ins):
-        with guard_warnings_filter():
-            ignore_message_warning()
-            for attr in ("args", "message", "__str__", "__repr__"):
-                self.failUnless(hasattr(ins, attr),
-                        "%s missing %s attribute" %
-                            (ins.__class__.__name__, attr))
+        for attr in ("args", "__str__", "__repr__"):
+            self.failUnless(hasattr(ins, attr),
+                    "%s missing %s attribute" %
+                        (ins.__class__.__name__, attr))
 
     def test_inheritance(self):
         # Make sure the inheritance hierarchy matches the documentation
@@ -89,7 +81,7 @@
             inheritance_tree.close()
         self.failUnlessEqual(len(exc_set), 0, "%s not accounted for" % exc_set)
 
-    interface_tests = ("length", "args", "message", "str", "repr")
+    interface_tests = ("length", "args", "str", "repr")
 
     def interface_test_driver(self, results):
         for test_name, (given, expected) in zip(self.interface_tests, results):
@@ -100,57 +92,28 @@
         # Make sure interface works properly when given a single argument
         arg = "spam"
         exc = Exception(arg)
-        with guard_warnings_filter():
-            ignore_message_warning()
-            results = ([len(exc.args), 1], [exc.args[0], arg],
-                       [exc.message, arg],
-                       [str(exc), str(arg)],
-                [repr(exc), exc.__class__.__name__ + repr(exc.args)])
-            self.interface_test_driver(results)
+        results = ([len(exc.args), 1], [exc.args[0], arg],
+                   [str(exc), str(arg)],
+            [repr(exc), exc.__class__.__name__ + repr(exc.args)])
+        self.interface_test_driver(results)
 
     def test_interface_multi_arg(self):
         # Make sure interface correct when multiple arguments given
         arg_count = 3
         args = tuple(range(arg_count))
         exc = Exception(*args)
-        with guard_warnings_filter():
-            ignore_message_warning()
-            results = ([len(exc.args), arg_count], [exc.args, args],
-                    [exc.message, ''], [str(exc), str(args)],
-                    [repr(exc), exc.__class__.__name__ + repr(exc.args)])
-            self.interface_test_driver(results)
+        results = ([len(exc.args), arg_count], [exc.args, args],
+                [str(exc), str(args)],
+                [repr(exc), exc.__class__.__name__ + repr(exc.args)])
+        self.interface_test_driver(results)
 
     def test_interface_no_arg(self):
         # Make sure that with no args that interface is correct
         exc = Exception()
-        with guard_warnings_filter():
-            ignore_message_warning()
-            results = ([len(exc.args), 0], [exc.args, tuple()],
-                    [exc.message, ''],
-                    [str(exc), ''],
-                    [repr(exc), exc.__class__.__name__ + '()'])
-            self.interface_test_driver(results)
-
-    def test_message_deprecation(self):
-        # As of Python 2.6, BaseException.message is deprecated.
-        with guard_warnings_filter():
-            warnings.resetwarnings()
-            warnings.filterwarnings('error')
-
-            try:
-                BaseException().message
-            except DeprecationWarning:
-                pass
-            else:
-                self.fail("BaseException.message not deprecated")
-
-            exc = BaseException()
-            try:
-                exc.message = ''
-            except DeprecationWarning:
-                pass
-            else:
-                self.fail("BaseException.message assignment not deprecated")
+        results = ([len(exc.args), 0], [exc.args, tuple()],
+                [str(exc), ''],
+                [repr(exc), exc.__class__.__name__ + '()'])
+        self.interface_test_driver(results)
 
 class UsageTests(unittest.TestCase):
 
diff --git a/Lib/test/test_strop.py b/Lib/test/test_strop.py
deleted file mode 100644
index 491d223..0000000
--- a/Lib/test/test_strop.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import warnings
-warnings.filterwarnings("ignore", "strop functions are obsolete;",
-                        DeprecationWarning,
-                        r'test.test_strop|unittest')
-import strop
-import unittest
-from test import test_support
-
-
-class StropFunctionTestCase(unittest.TestCase):
-
-    def test_maketrans(self):
-        self.assert_(strop.maketrans("abc", "xyz") == transtable)
-        self.assertRaises(ValueError, strop.maketrans, "abc", "xyzq")
-
-
-transtable = b'\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
-
-
-def test_main():
-    test_support.run_unittest(StropFunctionTestCase)
-
-if __name__ == "__main__":
-    test_main()
