diff --git a/Lib/plat-irix6/AL.py b/Lib/plat-irix6/AL.py
new file mode 100644
index 0000000..ed17cde
--- /dev/null
+++ b/Lib/plat-irix6/AL.py
@@ -0,0 +1,61 @@
+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/AWARE.py b/Lib/plat-irix6/AWARE.py
new file mode 100644
index 0000000..30be50b
--- /dev/null
+++ b/Lib/plat-irix6/AWARE.py
@@ -0,0 +1,54 @@
+# 
+# Copyright (c) 1992 Aware, Inc. All rights reserved.
+# 
+# Copyright Unpublished, Aware Inc.  All Rights Reserved.
+# This software contains proprietary and confidential
+# information of Aware, Inc.  Use, disclosure or
+# reproduction is prohibited without the prior express
+# written consent of Aware, Inc.
+# 
+#
+
+#
+# awareAudio.h - Aware Compression Library Parameter Header
+#
+#   01/21/92	Original Version by Brian Knittel and Jonathon Devine
+#
+
+import CL
+
+# Aware Audio Specific Parameters - For both MPEG Audio and Multirate
+CL.CHANNEL_POLICY = CL.NUMBER_OF_PARAMS + 0
+CL.NOISE_MARGIN = CL.NUMBER_OF_PARAMS + 1
+CL.BITRATE_POLICY = CL.NUMBER_OF_PARAMS + 2
+
+# Additional parameters for MPEG Audio
+CL.BITRATE_TARGET = CL.NUMBER_OF_PARAMS + 3
+CL.LAYER = CL.NUMBER_OF_PARAMS + 4
+
+# read/write for compression configuration
+# read for state during compression/decompression 
+
+#
+# Channel Policy
+#
+AWCMP_STEREO = 1
+AWCMP_JOINT_STEREO = 2
+AWCMP_INDEPENDENT = 3
+
+# 
+# read/write for compression configuration,
+# read for state during compression
+#
+#
+# Bit-rate Policy
+#
+AWCMP_FIXED_RATE = 1
+AWCMP_CONST_QUAL = 2
+AWCMP_LOSSLESS = 4
+
+#
+# Layer values
+#
+AWCMP_MPEG_LAYER_I = 1
+AWCMP_MPEG_LAYER_II = 2
diff --git a/Lib/plat-irix6/CD.py b/Lib/plat-irix6/CD.py
new file mode 100644
index 0000000..ad56561
--- /dev/null
+++ b/Lib/plat-irix6/CD.py
@@ -0,0 +1,34 @@
+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
new file mode 100644
index 0000000..468ecaa
--- /dev/null
+++ b/Lib/plat-irix6/CL.py
@@ -0,0 +1,24 @@
+# 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
new file mode 100644
index 0000000..7ace8cb
--- /dev/null
+++ b/Lib/plat-irix6/DEVICE.py
@@ -0,0 +1,400 @@
+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
new file mode 100644
index 0000000..d975ce6
--- /dev/null
+++ b/Lib/plat-irix6/ERRNO.py
@@ -0,0 +1,163 @@
+# Generated by h2py from /usr/include/sys/errno.h
+
+# Included from standards.h
+__KBASE = 1000
+__IRIXBASE = 1000
+EPERM = 1
+ENOENT = 2
+ESRCH = 3
+EINTR = 4
+EIO = 5
+ENXIO = 6
+E2BIG = 7
+ENOEXEC = 8
+EBADF = 9
+ECHILD = 10
+EAGAIN = 11
+ENOMEM = 12
+EACCES = 13
+EFAULT = 14
+ENOTBLK = 15
+EBUSY = 16
+EEXIST = 17
+EXDEV = 18
+ENODEV = 19
+ENOTDIR = 20
+EISDIR = 21
+EINVAL = 22
+ENFILE = 23
+EMFILE = 24
+ENOTTY = 25
+ETXTBSY = 26
+EFBIG = 27
+ENOSPC = 28
+ESPIPE = 29
+EROFS = 30
+EMLINK = 31
+EPIPE = 32
+EDOM = 33
+ERANGE = 34
+ENOMSG = 35
+EIDRM = 36
+ECHRNG = 37
+EL2NSYNC = 38
+EL3HLT = 39
+EL3RST = 40
+ELNRNG = 41
+EUNATCH = 42
+ENOCSI = 43
+EL2HLT = 44
+EDEADLK = 45
+ENOLCK = 46
+EBADE = 50
+EBADR = 51
+EXFULL = 52
+ENOANO = 53
+EBADRQC = 54
+EBADSLT = 55
+EDEADLOCK = 56
+EBFONT = 57
+ENOSTR = 60
+ENODATA = 61
+ETIME = 62
+ENOSR = 63
+ENONET = 64
+ENOPKG = 65
+EREMOTE = 66
+ENOLINK = 67
+EADV = 68
+ESRMNT = 69
+ECOMM = 70
+EPROTO = 71
+EMULTIHOP = 74
+EBADMSG = 77
+ENAMETOOLONG = 78
+EOVERFLOW = 79
+ENOTUNIQ = 80
+EBADFD = 81
+EREMCHG = 82
+ELIBACC = 83
+ELIBBAD = 84
+ELIBSCN = 85
+ELIBMAX = 86
+ELIBEXEC = 87
+EILSEQ = 88
+ENOSYS = 89
+ELOOP = 90
+ERESTART = 91
+ESTRPIPE = 92
+ENOTEMPTY = 93
+EUSERS = 94
+ENOTSOCK = 95
+EDESTADDRREQ = 96
+EMSGSIZE = 97
+EPROTOTYPE = 98
+ENOPROTOOPT = 99
+EPROTONOSUPPORT = 120
+ESOCKTNOSUPPORT = 121
+EOPNOTSUPP = 122
+EPFNOSUPPORT = 123
+EAFNOSUPPORT = 124
+EADDRINUSE = 125
+EADDRNOTAVAIL = 126
+ENETDOWN = 127
+ENETUNREACH = 128
+ENETRESET = 129
+ECONNABORTED = 130
+ECONNRESET = 131
+ENOBUFS = 132
+EISCONN = 133
+ENOTCONN = 134
+ESHUTDOWN = 143
+ETOOMANYREFS = 144
+ETIMEDOUT = 145
+ECONNREFUSED = 146
+EHOSTDOWN = 147
+EHOSTUNREACH = 148
+LASTERRNO = ENOTCONN
+EWOULDBLOCK = __KBASE+101
+EWOULDBLOCK = EAGAIN
+EALREADY = 149
+EINPROGRESS = 150
+ESTALE = 151
+EIORESID = 500
+EUCLEAN = 135
+ENOTNAM = 137
+ENAVAIL = 138
+EISNAM = 139
+EREMOTEIO = 140
+EINIT = 141
+EREMDEV = 142
+ECANCELED = 158
+ENOLIMFILE = 1001
+EPROCLIM = 1002
+EDISJOINT = 1003
+ENOLOGIN = 1004
+ELOGINLIM = 1005
+EGROUPLOOP = 1006
+ENOATTACH = 1007
+ENOTSUP = 1008
+ENOATTR = 1009
+EDIRCORRUPTED = 1010
+EDQUOT = 1133
+ENFSREMOTE = 1135
+ECONTROLLER = 1300
+ENOTCONTROLLER = 1301
+EENQUEUED = 1302
+ENOTENQUEUED = 1303
+EJOINED = 1304
+ENOTJOINED = 1305
+ENOPROC = 1306
+EMUSTRUN = 1307
+ENOTSTOPPED = 1308
+ECLOCKCPU = 1309
+EINVALSTATE = 1310
+ENOEXIST = 1311
+EENDOFMINOR = 1312
+EBUFSIZE = 1313
+EEMPTY = 1314
+ENOINTRGROUP = 1315
+EINVALMODE = 1316
+ECANTEXTENT = 1317
+EINVALTIME = 1318
+EDESTROYED = 1319
diff --git a/Lib/plat-irix6/FCNTL.py b/Lib/plat-irix6/FCNTL.py
new file mode 100644
index 0000000..ceb1071
--- /dev/null
+++ b/Lib/plat-irix6/FCNTL.py
@@ -0,0 +1,114 @@
+# Generated by h2py from /usr/include/sys/fcntl.h
+
+# Included from standards.h
+
+# Included from sys/types.h
+
+# Included from sgidefs.h
+_MIPS_ISA_MIPS1 = 1
+_MIPS_ISA_MIPS2 = 2
+_MIPS_ISA_MIPS3 = 3
+_MIPS_ISA_MIPS4 = 4
+_MIPS_SIM_ABI32 = 1
+_MIPS_SIM_NABI32 = 2
+_MIPS_SIM_ABI64 = 3
+P_MYID = (-1)
+P_MYHOSTID = (-1)
+
+# Included from sys/bsd_types.h
+
+# Included from sys/mkdev.h
+ONBITSMAJOR = 7
+ONBITSMINOR = 8
+OMAXMAJ = 0x7f
+OMAXMIN = 0xff
+NBITSMAJOR = 14
+NBITSMINOR = 18
+MAXMAJ = 0x1ff
+MAXMIN = 0x3ffff
+OLDDEV = 0
+NEWDEV = 1
+MKDEV_VER = NEWDEV
+def major(dev): return __major(MKDEV_VER, dev)
+
+def minor(dev): return __minor(MKDEV_VER, dev)
+
+
+# Included from sys/select.h
+FD_SETSIZE = 1024
+__NBBY = 8
+
+# Included from string.h
+NULL = 0L
+NBBY = 8
+FNDELAY = 0x04
+FAPPEND = 0x08
+FSYNC = 0x10
+FDSYNC = 0x20
+FRSYNC = 0x40
+FNONBLOCK = 0x80
+FASYNC = 0x1000
+FLARGEFILE = 0x2000
+FNONBLK = FNONBLOCK
+FDIRECT = 0x8000
+FDIRENT64 = 0x8000
+FCREAT = 0x0100
+FTRUNC = 0x0200
+FEXCL = 0x0400
+FNOCTTY = 0x0800
+O_RDONLY = 0
+O_WRONLY = 1
+O_RDWR = 2
+O_NDELAY = 0x04
+O_APPEND = 0x08
+O_SYNC = 0x10
+O_DSYNC = 0x20
+O_RSYNC = 0x40
+O_NONBLOCK = 0x80
+O_LARGEFILE = 0x2000
+O_DIRECT = 0x8000
+O_CREAT = 0x100
+O_TRUNC = 0x200
+O_EXCL = 0x400
+O_NOCTTY = 0x800
+F_DUPFD = 0
+F_GETFD = 1
+F_SETFD = 2
+F_GETFL = 3
+F_SETFL = 4
+F_GETLK = 14
+F_SETLK = 6
+F_SETLKW = 7
+F_CHKFL = 8
+F_ALLOCSP = 10
+F_FREESP = 11
+F_SETBSDLK = 12
+F_SETBSDLKW = 13
+F_DIOINFO = 30
+F_FSGETXATTR = 31
+F_FSSETXATTR = 32
+F_GETLK64 = 33
+F_SETLK64 = 34
+F_SETLKW64 = 35
+F_ALLOCSP64 = 36
+F_FREESP64 = 37
+F_GETBMAP = 38
+F_FSSETDM = 39
+F_RESVSP = 40
+F_UNRESVSP = 41
+F_RESVSP64 = 42
+F_UNRESVSP64 = 43
+F_GETBMAPA = 44
+F_FSGETXATTRA = 45
+F_GETALLLK = 46
+F_RSETLK = 20
+F_RGETLK = 21
+F_RSETLKW = 22
+F_GETOWN = 23
+F_SETOWN = 24
+F_RDLCK = 01
+F_WRLCK = 02
+F_UNLCK = 03
+O_ACCMODE = 3
+FD_CLOEXEC = 1
+FD_NODUP_FORK = 4
diff --git a/Lib/plat-irix6/FILE.py b/Lib/plat-irix6/FILE.py
new file mode 100644
index 0000000..e3393b6
--- /dev/null
+++ b/Lib/plat-irix6/FILE.py
@@ -0,0 +1,236 @@
+# Generated by h2py from /usr/include/sys/file.h
+
+# Included from standards.h
+
+# Included from sys/types.h
+
+# Included from sgidefs.h
+_MIPS_ISA_MIPS1 = 1
+_MIPS_ISA_MIPS2 = 2
+_MIPS_ISA_MIPS3 = 3
+_MIPS_ISA_MIPS4 = 4
+_MIPS_SIM_ABI32 = 1
+_MIPS_SIM_NABI32 = 2
+_MIPS_SIM_ABI64 = 3
+P_MYID = (-1)
+P_MYHOSTID = (-1)
+
+# Included from sys/bsd_types.h
+
+# Included from sys/mkdev.h
+ONBITSMAJOR = 7
+ONBITSMINOR = 8
+OMAXMAJ = 0x7f
+OMAXMIN = 0xff
+NBITSMAJOR = 14
+NBITSMINOR = 18
+MAXMAJ = 0x1ff
+MAXMIN = 0x3ffff
+OLDDEV = 0
+NEWDEV = 1
+MKDEV_VER = NEWDEV
+def major(dev): return __major(MKDEV_VER, dev)
+
+def minor(dev): return __minor(MKDEV_VER, dev)
+
+
+# Included from sys/select.h
+FD_SETSIZE = 1024
+__NBBY = 8
+
+# Included from string.h
+NULL = 0L
+NBBY = 8
+
+# Included from sys/sema.h
+MUTEX_DEFAULT = 0x0
+METER_NAMSZ = 8
+def mutex_spinlock(l): return splhi()
+
+def mutex_spintrylock(l): return splhi()
+
+def spinlock_islocked(l): return issplhi(getsr())
+
+def spinlock_initialized(l): return 1
+
+SV_FIFO = 0x0
+SV_LIFO = 0x2
+SV_PRIO = 0x4
+SV_DEFAULT = SV_FIFO
+SEMA_NOHIST = 0x0001
+SEMA_LOCK = 0x0004
+SEMA_METER = 0x0008
+SEMA_NAMSZ = METER_NAMSZ
+MR_ACCESS = 0x1
+MR_UPDATE = 0x2
+def mp_mutex_unlock(m): return mutex_unlock(m)
+
+def mp_mutex_trylock(m): return mutex_trylock(m)
+
+def mp_mutex_spinlock(m): return mutex_spinlock(m)
+
+def mp_mutex_trylock(m): return 1
+
+def mp_mutex_spinlock(m): return 1
+
+def nested_spintrylock(m): return 1
+
+def mp_mrunlock(a): return mrunlock(a)
+
+def mp_cpsema(x): return cpsema(x)
+
+def mp_cvsema(x): return cvsema(x)
+
+def mp_cpsema(x): return 1
+
+def mp_cvsema(x): return 0
+
+MON_LOCKED = 0x01
+MON_WAITING = 0x02
+MON_TIMEOUT = 0x04
+def initlock(l): return spinlock_init(l,0)
+
+def ownlock(x): return 1
+
+def splock(x): return 1
+
+def io_splock(x): return 1
+
+def mutex_enter(m): return mutex_lock(m, PZERO)
+
+def mutex_tryenter(m): return mutex_trylock(m)
+
+def mutex_exit(m): return mutex_unlock(m)
+
+def cv_signal(cv): return sv_signal(cv)
+
+def cv_broadcast(cv): return sv_broadcast(cv)
+
+def cv_destroy(cv): return sv_destroy(cv)
+
+RW_READER = MR_ACCESS
+RW_WRITER = MR_UPDATE
+def rw_exit(r): return mrunlock(r)
+
+def rw_tryupgrade(r): return cmrpromote(r)
+
+def rw_downgrade(r): return mrdemote(r)
+
+def rw_destroy(r): return mrfree(r)
+
+def RW_WRITE_HELD(r): return ismrlocked(r, MR_UPDATE)
+
+def RW_READ_HELD(r): return ismrlocked(r, MR_ACCESS)
+
+
+# Included from sys/fcntl.h
+FNDELAY = 0x04
+FAPPEND = 0x08
+FSYNC = 0x10
+FDSYNC = 0x20
+FRSYNC = 0x40
+FNONBLOCK = 0x80
+FASYNC = 0x1000
+FLARGEFILE = 0x2000
+FNONBLK = FNONBLOCK
+FDIRECT = 0x8000
+FDIRENT64 = 0x8000
+FCREAT = 0x0100
+FTRUNC = 0x0200
+FEXCL = 0x0400
+FNOCTTY = 0x0800
+O_RDONLY = 0
+O_WRONLY = 1
+O_RDWR = 2
+O_NDELAY = 0x04
+O_APPEND = 0x08
+O_SYNC = 0x10
+O_DSYNC = 0x20
+O_RSYNC = 0x40
+O_NONBLOCK = 0x80
+O_LARGEFILE = 0x2000
+O_DIRECT = 0x8000
+O_CREAT = 0x100
+O_TRUNC = 0x200
+O_EXCL = 0x400
+O_NOCTTY = 0x800
+F_DUPFD = 0
+F_GETFD = 1
+F_SETFD = 2
+F_GETFL = 3
+F_SETFL = 4
+F_GETLK = 14
+F_SETLK = 6
+F_SETLKW = 7
+F_CHKFL = 8
+F_ALLOCSP = 10
+F_FREESP = 11
+F_SETBSDLK = 12
+F_SETBSDLKW = 13
+F_DIOINFO = 30
+F_FSGETXATTR = 31
+F_FSSETXATTR = 32
+F_GETLK64 = 33
+F_SETLK64 = 34
+F_SETLKW64 = 35
+F_ALLOCSP64 = 36
+F_FREESP64 = 37
+F_GETBMAP = 38
+F_FSSETDM = 39
+F_RESVSP = 40
+F_UNRESVSP = 41
+F_RESVSP64 = 42
+F_UNRESVSP64 = 43
+F_GETBMAPA = 44
+F_FSGETXATTRA = 45
+F_GETALLLK = 46
+F_RSETLK = 20
+F_RGETLK = 21
+F_RSETLKW = 22
+F_GETOWN = 23
+F_SETOWN = 24
+F_RDLCK = 01
+F_WRLCK = 02
+F_UNLCK = 03
+O_ACCMODE = 3
+FD_CLOEXEC = 1
+FD_NODUP_FORK = 4
+FMASK = 0x90FF
+FOPEN = 0xFFFFFFFF
+FREAD = 0x01
+FWRITE = 0x02
+FNDELAY = 0x04
+FAPPEND = 0x08
+FSYNC = 0x10
+FDSYNC = 0x20
+FRSYNC = 0x40
+FNONBLOCK = 0x80
+FASYNC = 0x1000
+FNONBLK = FNONBLOCK
+FLARGEFILE = 0x2000
+FDIRECT = 0x8000
+FCREAT = 0x0100
+FTRUNC = 0x0200
+FEXCL = 0x0400
+FNOCTTY = 0x0800
+FMARK = 0x4000
+FDEFER = 0x2000
+FINPROGRESS = 0x0400
+FINVIS = 0x0100
+FNMFS = 0x2000
+FDIRENT64 = 0x8000
+FCLOSEXEC = 001
+FDSHD = 0x0001
+FDNOMARK = 0x0002
+FDIGNPROGRESS = 0x0004
+LOCK_SH = 1
+LOCK_EX = 2
+LOCK_NB = 4
+LOCK_UN = 8
+F_OK = 0
+X_OK = 1
+W_OK = 2
+R_OK = 4
+L_SET = 0
+L_INCR = 1
+L_XTND = 2
diff --git a/Lib/plat-irix6/FL.py b/Lib/plat-irix6/FL.py
new file mode 100644
index 0000000..f85237b
--- /dev/null
+++ b/Lib/plat-irix6/FL.py
@@ -0,0 +1,289 @@
+# Constants used by the FORMS library (module fl).
+# This corresponds to "forms.h".
+# Recommended use: import FL; ... FL.NORMAL_BOX ... etc.
+# Alternate use: from FL import *; ... NORMAL_BOX ... etc.
+
+_v20 = 1
+_v21 = 1
+##import fl
+##try:
+##	_v20 = (fl.get_rgbmode <> None)
+##except:
+##	_v20 = 0
+##del fl
+
+NULL = 0
+FALSE = 0
+TRUE = 1
+
+EVENT = -1
+
+LABEL_SIZE = 64
+if _v20:
+	SHORTCUT_SIZE = 32
+PLACE_FREE = 0
+PLACE_SIZE = 1
+PLACE_ASPECT = 2
+PLACE_MOUSE = 3
+PLACE_CENTER = 4
+PLACE_POSITION = 5
+FL_PLACE_FULLSCREEN = 6
+FIND_INPUT = 0
+FIND_AUTOMATIC = 1
+FIND_MOUSE = 2
+BEGIN_GROUP = 10000
+END_GROUP = 20000
+ALIGN_TOP = 0
+ALIGN_BOTTOM = 1
+ALIGN_LEFT = 2
+ALIGN_RIGHT = 3
+ALIGN_CENTER = 4
+NO_BOX = 0
+UP_BOX = 1
+DOWN_BOX = 2
+FLAT_BOX = 3
+BORDER_BOX = 4
+SHADOW_BOX = 5
+FRAME_BOX = 6
+ROUNDED_BOX = 7
+RFLAT_BOX = 8
+RSHADOW_BOX = 9
+TOP_BOUND_COL = 51
+LEFT_BOUND_COL = 55
+BOT_BOUND_COL = 40
+RIGHT_BOUND_COL = 35
+COL1 = 47
+MCOL = 49
+LCOL = 0
+BOUND_WIDTH = 3.0
+DRAW = 0
+PUSH = 1
+RELEASE = 2
+ENTER = 3
+LEAVE = 4
+MOUSE = 5
+FOCUS = 6
+UNFOCUS = 7
+KEYBOARD = 8
+STEP = 9
+MOVE = 10
+FONT_NAME = 'Helvetica'
+FONT_BOLDNAME = 'Helvetica-Bold'
+FONT_ITALICNAME = 'Helvetica-Oblique'
+FONT_FIXEDNAME = 'Courier'
+FONT_ICONNAME = 'Icon'
+SMALL_FONT = 8.0
+NORMAL_FONT = 11.0
+LARGE_FONT = 20.0
+NORMAL_STYLE = 0
+BOLD_STYLE = 1
+ITALIC_STYLE = 2
+FIXED_STYLE = 3
+ENGRAVED_STYLE = 4
+ICON_STYLE = 5
+BITMAP = 3
+NORMAL_BITMAP = 0
+BITMAP_BOXTYPE = NO_BOX
+BITMAP_COL1 = 0
+BITMAP_COL2 = COL1
+BITMAP_LCOL = LCOL
+BITMAP_ALIGN = ALIGN_BOTTOM
+BITMAP_MAXSIZE = 128*128
+BITMAP_BW = BOUND_WIDTH
+BOX = 1
+BOX_BOXTYPE = UP_BOX
+BOX_COL1 = COL1
+BOX_LCOL = LCOL
+BOX_ALIGN = ALIGN_CENTER
+BOX_BW = BOUND_WIDTH
+BROWSER = 71
+NORMAL_BROWSER = 0
+SELECT_BROWSER = 1
+HOLD_BROWSER = 2
+MULTI_BROWSER = 3
+BROWSER_BOXTYPE = DOWN_BOX
+BROWSER_COL1 = COL1
+BROWSER_COL2 = 3
+BROWSER_LCOL = LCOL
+BROWSER_ALIGN = ALIGN_BOTTOM
+BROWSER_SLCOL = COL1
+BROWSER_BW = BOUND_WIDTH
+BROWSER_LINELENGTH = 128
+BROWSER_MAXLINE = 512
+BUTTON = 11
+NORMAL_BUTTON = 0
+PUSH_BUTTON = 1
+RADIO_BUTTON = 2
+HIDDEN_BUTTON = 3
+TOUCH_BUTTON = 4
+INOUT_BUTTON = 5
+RETURN_BUTTON = 6
+if _v20:
+	HIDDEN_RET_BUTTON = 7
+BUTTON_BOXTYPE = UP_BOX
+BUTTON_COL1 = COL1
+BUTTON_COL2 = COL1
+BUTTON_LCOL = LCOL
+BUTTON_ALIGN = ALIGN_CENTER
+BUTTON_MCOL1 = MCOL
+BUTTON_MCOL2 = MCOL
+BUTTON_BW = BOUND_WIDTH
+if _v20:
+	CHART = 4
+	BAR_CHART = 0
+	HORBAR_CHART = 1
+	LINE_CHART = 2
+	FILLED_CHART = 3
+	SPIKE_CHART = 4
+	PIE_CHART = 5
+	SPECIALPIE_CHART = 6
+	CHART_BOXTYPE = BORDER_BOX
+	CHART_COL1 = COL1
+	CHART_LCOL = LCOL
+	CHART_ALIGN = ALIGN_BOTTOM
+	CHART_BW = BOUND_WIDTH
+	CHART_MAX = 128
+CHOICE = 42
+NORMAL_CHOICE = 0
+CHOICE_BOXTYPE = DOWN_BOX
+CHOICE_COL1 = COL1
+CHOICE_COL2 = LCOL
+CHOICE_LCOL = LCOL
+CHOICE_ALIGN = ALIGN_LEFT
+CHOICE_BW = BOUND_WIDTH
+CHOICE_MCOL = MCOL
+CHOICE_MAXITEMS = 128
+CHOICE_MAXSTR = 64
+CLOCK = 61
+SQUARE_CLOCK = 0
+ROUND_CLOCK = 1
+CLOCK_BOXTYPE = UP_BOX
+CLOCK_COL1 = 37
+CLOCK_COL2 = 42
+CLOCK_LCOL = LCOL
+CLOCK_ALIGN = ALIGN_BOTTOM
+CLOCK_TOPCOL = COL1
+CLOCK_BW = BOUND_WIDTH
+COUNTER = 25
+NORMAL_COUNTER = 0
+SIMPLE_COUNTER = 1
+COUNTER_BOXTYPE = UP_BOX
+COUNTER_COL1 = COL1
+COUNTER_COL2 = 4
+COUNTER_LCOL = LCOL
+COUNTER_ALIGN = ALIGN_BOTTOM
+if _v20:
+	COUNTER_BW = BOUND_WIDTH
+else:
+	DEFAULT = 51
+	RETURN_DEFAULT = 0
+	ALWAYS_DEFAULT = 1
+DIAL = 22
+NORMAL_DIAL = 0
+LINE_DIAL = 1
+DIAL_BOXTYPE = NO_BOX
+DIAL_COL1 = COL1
+DIAL_COL2 = 37
+DIAL_LCOL = LCOL
+DIAL_ALIGN = ALIGN_BOTTOM
+DIAL_TOPCOL = COL1
+DIAL_BW = BOUND_WIDTH
+FREE = 101
+NORMAL_FREE = 1
+SLEEPING_FREE = 2
+INPUT_FREE = 3
+CONTINUOUS_FREE = 4
+ALL_FREE = 5
+INPUT = 31
+NORMAL_INPUT = 0
+if _v20:
+	FLOAT_INPUT = 1
+	INT_INPUT = 2
+	HIDDEN_INPUT = 3
+	if _v21:
+		MULTILINE_INPUT = 4
+		SECRET_INPUT = 5
+else:
+	ALWAYS_INPUT = 1
+INPUT_BOXTYPE = DOWN_BOX
+INPUT_COL1 = 13
+INPUT_COL2 = 5
+INPUT_LCOL = LCOL
+INPUT_ALIGN = ALIGN_LEFT
+INPUT_TCOL = LCOL
+INPUT_CCOL = 4
+INPUT_BW = BOUND_WIDTH
+INPUT_MAX = 128
+LIGHTBUTTON = 12
+LIGHTBUTTON_BOXTYPE = UP_BOX
+LIGHTBUTTON_COL1 = 39
+LIGHTBUTTON_COL2 = 3
+LIGHTBUTTON_LCOL = LCOL
+LIGHTBUTTON_ALIGN = ALIGN_CENTER
+LIGHTBUTTON_TOPCOL = COL1
+LIGHTBUTTON_MCOL = MCOL
+LIGHTBUTTON_BW1 = BOUND_WIDTH
+LIGHTBUTTON_BW2 = BOUND_WIDTH/2.0
+LIGHTBUTTON_MINSIZE = 12.0
+MENU = 41
+TOUCH_MENU = 0
+PUSH_MENU = 1
+MENU_BOXTYPE = BORDER_BOX
+MENU_COL1 = 55
+MENU_COL2 = 37
+MENU_LCOL = LCOL
+MENU_ALIGN = ALIGN_CENTER
+MENU_BW = BOUND_WIDTH
+MENU_MAX = 300
+POSITIONER = 23
+NORMAL_POSITIONER = 0
+POSITIONER_BOXTYPE = DOWN_BOX
+POSITIONER_COL1 = COL1
+POSITIONER_COL2 = 1
+POSITIONER_LCOL = LCOL
+POSITIONER_ALIGN = ALIGN_BOTTOM
+POSITIONER_BW = BOUND_WIDTH
+ROUNDBUTTON = 13
+ROUNDBUTTON_BOXTYPE = NO_BOX
+ROUNDBUTTON_COL1 = 7
+ROUNDBUTTON_COL2 = 3
+ROUNDBUTTON_LCOL = LCOL
+ROUNDBUTTON_ALIGN = ALIGN_CENTER
+ROUNDBUTTON_TOPCOL = COL1
+ROUNDBUTTON_MCOL = MCOL
+ROUNDBUTTON_BW = BOUND_WIDTH
+SLIDER = 21
+VALSLIDER = 24
+VERT_SLIDER = 0
+HOR_SLIDER = 1
+VERT_FILL_SLIDER = 2
+HOR_FILL_SLIDER = 3
+VERT_NICE_SLIDER = 4
+HOR_NICE_SLIDER = 5
+SLIDER_BOXTYPE = DOWN_BOX
+SLIDER_COL1 = COL1
+SLIDER_COL2 = COL1
+SLIDER_LCOL = LCOL
+SLIDER_ALIGN = ALIGN_BOTTOM
+SLIDER_BW1 = BOUND_WIDTH
+SLIDER_BW2 = BOUND_WIDTH*0.75
+SLIDER_FINE = 0.05
+SLIDER_WIDTH = 0.08
+TEXT = 2
+NORMAL_TEXT = 0
+TEXT_BOXTYPE = NO_BOX
+TEXT_COL1 = COL1
+TEXT_LCOL = LCOL
+TEXT_ALIGN = ALIGN_LEFT
+TEXT_BW = BOUND_WIDTH
+TIMER = 62
+NORMAL_TIMER = 0
+VALUE_TIMER = 1
+HIDDEN_TIMER = 2
+TIMER_BOXTYPE = DOWN_BOX
+TIMER_COL1 = COL1
+TIMER_COL2 = 1
+TIMER_LCOL = LCOL
+TIMER_ALIGN = ALIGN_CENTER
+TIMER_BW = BOUND_WIDTH
+TIMER_BLINKRATE = 0.2
diff --git a/Lib/plat-irix6/GET.py b/Lib/plat-irix6/GET.py
new file mode 100644
index 0000000..9c3d7d6
--- /dev/null
+++ b/Lib/plat-irix6/GET.py
@@ -0,0 +1,59 @@
+# 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
new file mode 100644
index 0000000..9f02f65
--- /dev/null
+++ b/Lib/plat-irix6/GL.py
@@ -0,0 +1,393 @@
+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
new file mode 100644
index 0000000..69dab71
--- /dev/null
+++ b/Lib/plat-irix6/GLWS.py
@@ -0,0 +1,12 @@
+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
new file mode 100644
index 0000000..7340878
--- /dev/null
+++ b/Lib/plat-irix6/IN.py
@@ -0,0 +1,133 @@
+# Generated by h2py from /usr/include/netinet/in.h
+
+# Included from sgidefs.h
+_MIPS_ISA_MIPS1 = 1
+_MIPS_ISA_MIPS2 = 2
+_MIPS_ISA_MIPS3 = 3
+_MIPS_ISA_MIPS4 = 4
+_MIPS_SIM_ABI32 = 1
+_MIPS_SIM_NABI32 = 2
+_MIPS_SIM_ABI64 = 3
+
+# Included from sys/endian.h
+LITTLE_ENDIAN = 1234
+BIG_ENDIAN = 4321
+PDP_ENDIAN = 3412
+BYTE_ORDER = BIG_ENDIAN
+BYTE_ORDER = LITTLE_ENDIAN
+def ntohl(x): return (x)
+
+def ntohs(x): return (x)
+
+def htonl(x): return (x)
+
+def htons(x): return (x)
+
+def htonl(x): return ntohl(x)
+
+def htons(x): return ntohs(x)
+
+
+# Included from sys/bsd_types.h
+
+# Included from sys/mkdev.h
+ONBITSMAJOR = 7
+ONBITSMINOR = 8
+OMAXMAJ = 0x7f
+OMAXMIN = 0xff
+NBITSMAJOR = 14
+NBITSMINOR = 18
+MAXMAJ = 0x1ff
+MAXMIN = 0x3ffff
+OLDDEV = 0
+NEWDEV = 1
+MKDEV_VER = NEWDEV
+def major(dev): return __major(MKDEV_VER, dev)
+
+def minor(dev): return __minor(MKDEV_VER, dev)
+
+
+# Included from sys/select.h
+
+# Included from standards.h
+FD_SETSIZE = 1024
+__NBBY = 8
+
+# Included from string.h
+NULL = 0L
+NBBY = 8
+IPPROTO_IP = 0
+IPPROTO_ICMP = 1
+IPPROTO_IGMP = 2
+IPPROTO_GGP = 3
+IPPROTO_IPIP = 4
+IPPROTO_ENCAP = IPPROTO_IPIP
+IPPROTO_ST = 5
+IPPROTO_TCP = 6
+IPPROTO_EGP = 8
+IPPROTO_PUP = 12
+IPPROTO_UDP = 17
+IPPROTO_IDP = 22
+IPPROTO_TP = 29
+IPPROTO_XTP = 36
+IPPROTO_RSVP = 46
+IPPROTO_HELLO = 63
+IPPROTO_ND = 77
+IPPROTO_EON = 80
+IPPROTO_OSPF = 89
+IPPROTO_SWIPE = 94
+IPPROTO_RAW = 255
+IPPROTO_MAX = 256
+IPPORT_RESERVED = 1024
+IPPORT_MAXPORT = 65535
+def IN_CLASSA(i): return (((__int32_t)(i) & 0x80000000) == 0)
+
+IN_CLASSA_NET = 0xff000000
+IN_CLASSA_NSHIFT = 24
+IN_CLASSA_HOST = 0x00ffffff
+IN_CLASSA_MAX = 128
+def IN_CLASSB(i): return (((__int32_t)(i) & 0xc0000000) == 0x80000000)
+
+IN_CLASSB_NET = 0xffff0000
+IN_CLASSB_NSHIFT = 16
+IN_CLASSB_HOST = 0x0000ffff
+IN_CLASSB_MAX = 65536
+def IN_CLASSC(i): return (((__int32_t)(i) & 0xe0000000) == 0xc0000000)
+
+IN_CLASSC_NET = 0xffffff00
+IN_CLASSC_NSHIFT = 8
+IN_CLASSC_HOST = 0x000000ff
+def IN_CLASSD(i): return (((__int32_t)(i) & 0xf0000000) == 0xe0000000)
+
+IN_CLASSD_NET = 0xf0000000
+IN_CLASSD_NSHIFT = 28
+IN_CLASSD_HOST = 0x0fffffff
+def IN_MULTICAST(i): return IN_CLASSD(i)
+
+def IN_EXPERIMENTAL(i): return (((__int32_t)(i) & 0xf0000000) == 0xf0000000)
+
+def IN_BADCLASS(i): return (((__int32_t)(i) & 0xf0000000) == 0xf0000000)
+
+INADDR_NONE = 0xffffffff
+IN_LOOPBACKNET = 127
+IP_OPTIONS = 1
+IP_HDRINCL = 2
+IP_TOS = 3
+IP_TTL = 4
+IP_RECVOPTS = 5
+IP_RECVRETOPTS = 6
+IP_RECVDSTADDR = 7
+IP_RETOPTS = 8
+IP_MULTICAST_IF = 20
+IP_MULTICAST_TTL = 21
+IP_MULTICAST_LOOP = 22
+IP_ADD_MEMBERSHIP = 23
+IP_DROP_MEMBERSHIP = 24
+IP_MULTICAST_VIF = 25
+IP_RSVP_VIF_ON = 26
+IP_RSVP_VIF_OFF = 27
+IP_RSVP_ON = 28
+IP_SENDSRCADDR = 36
+IP_DEFAULT_MULTICAST_TTL = 1
+IP_DEFAULT_MULTICAST_LOOP = 1
+IP_MAX_MEMBERSHIPS = 20
diff --git a/Lib/plat-irix6/IOCTL.py b/Lib/plat-irix6/IOCTL.py
new file mode 100644
index 0000000..cec3c3f
--- /dev/null
+++ b/Lib/plat-irix6/IOCTL.py
@@ -0,0 +1,233 @@
+# 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/SOCKET.py b/Lib/plat-irix6/SOCKET.py
new file mode 100644
index 0000000..39a8b63
--- /dev/null
+++ b/Lib/plat-irix6/SOCKET.py
@@ -0,0 +1,152 @@
+# Generated by h2py from /usr/include/sys/socket.h
+
+# Included from sys/bsd_types.h
+
+# Included from sys/mkdev.h
+ONBITSMAJOR = 7
+ONBITSMINOR = 8
+OMAXMAJ = 0x7f
+OMAXMIN = 0xff
+NBITSMAJOR = 14
+NBITSMINOR = 18
+MAXMAJ = 0x1ff
+MAXMIN = 0x3ffff
+OLDDEV = 0
+NEWDEV = 1
+MKDEV_VER = NEWDEV
+def major(dev): return __major(MKDEV_VER, dev)
+
+def minor(dev): return __minor(MKDEV_VER, dev)
+
+
+# Included from sys/select.h
+
+# Included from standards.h
+FD_SETSIZE = 1024
+__NBBY = 8
+
+# Included from string.h
+NULL = 0L
+NBBY = 8
+NC_TPI_CLTS = 1
+NC_TPI_COTS = 2
+NC_TPI_COTS_ORD = 3
+NC_TPI_RAW = 4
+SOCK_DGRAM = NC_TPI_CLTS
+SOCK_STREAM = NC_TPI_COTS
+SOCK_RAW = NC_TPI_RAW
+SOCK_RDM = 5
+SOCK_SEQPACKET = 6
+SO_DEBUG = 0x0001
+SO_ACCEPTCONN = 0x0002
+SO_REUSEADDR = 0x0004
+SO_KEEPALIVE = 0x0008
+SO_DONTROUTE = 0x0010
+SO_BROADCAST = 0x0020
+SO_USELOOPBACK = 0x0040
+SO_LINGER = 0x0080
+SO_OOBINLINE = 0x0100
+SO_REUSEPORT = 0x0200
+SO_ORDREL = 0x0200
+SO_IMASOCKET = 0x0400
+SO_CHAMELEON = 0x1000
+SO_PASSIFNAME = 0x2000
+SO_SNDBUF = 0x1001
+SO_RCVBUF = 0x1002
+SO_SNDLOWAT = 0x1003
+SO_RCVLOWAT = 0x1004
+SO_SNDTIMEO = 0x1005
+SO_RCVTIMEO = 0x1006
+SO_ERROR = 0x1007
+SO_TYPE = 0x1008
+SO_PROTOTYPE = 0x1009
+SOL_SOCKET = 0xffff
+AF_UNSPEC = 0
+AF_LOCAL = 1
+AF_UNIX = AF_LOCAL
+AF_INET = 2
+AF_IMPLINK = 3
+AF_PUP = 4
+AF_CHAOS = 5
+AF_NS = 6
+AF_ISO = 7
+AF_ECMA = 8
+AF_DATAKIT = 9
+AF_CCITT = 10
+AF_SNA = 11
+AF_DECnet = 12
+AF_DLI = 13
+AF_LAT = 14
+AF_HYLINK = 15
+AF_APPLETALK = 16
+AF_ROUTE = 17
+AF_RAW = 18
+AF_LINK = 18
+pseudo_AF_XTP = 19
+AF_NIT = 17
+AF_802 = 18
+AF_OSI = 19
+AF_X25 = 20
+AF_OSINET = 21
+AF_GOSIP = 22
+AF_SDL = 23
+AF_INET6 = 24
+AF_LINK = 25
+AF_MAX = (AF_LINK+1)
+_SIN_ADDR_SIZE = 8
+_SIN_SA_DATA_SIZE = 14
+_MAX_SA_LEN = 20
+def OPTLEN(x): return ((((x) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
+
+PF_UNSPEC = AF_UNSPEC
+PF_LOCAL = AF_LOCAL
+PF_UNIX = PF_LOCAL
+PF_INET = AF_INET
+PF_IMPLINK = AF_IMPLINK
+PF_PUP = AF_PUP
+PF_CHAOS = AF_CHAOS
+PF_NS = AF_NS
+PF_ISO = AF_ISO
+PF_OSI = AF_ISO
+PF_ECMA = AF_ECMA
+PF_DATAKIT = AF_DATAKIT
+PF_CCITT = AF_CCITT
+PF_SNA = AF_SNA
+PF_DECnet = AF_DECnet
+PF_DLI = AF_DLI
+PF_LAT = AF_LAT
+PF_HYLINK = AF_HYLINK
+PF_APPLETALK = AF_APPLETALK
+PF_ROUTE = AF_ROUTE
+PF_LINK = AF_LINK
+PF_XTP = pseudo_AF_XTP
+PF_RAW = AF_RAW
+PF_NIT = AF_NIT
+PF_802 = AF_802
+PF_X25 = AF_X25
+PF_OSINET = AF_OSINET
+PF_GOSIP = AF_GOSIP
+PF_INET6 = AF_INET6
+PF_MAX = AF_MAX
+NET_RT_DUMP = 1
+NET_RT_FLAGS = 2
+NET_RT_IFLIST = 3
+IPCTL_FORWARDING = 1
+IPCTL_SENDREDIRECTS = 2
+UDPCTL_CHECKSUM = 1
+SOMAXCONN = 1000
+MSG_OOB = 0x1
+MSG_PEEK = 0x2
+MSG_DONTROUTE = 0x4
+MSG_EOR = 0x8
+MSG_TRUNC = 0x10
+MSG_CTRUNC = 0x20
+MSG_WAITALL = 0x40
+MSG_DONTWAIT = 0x80
+MSG_BTAG = 0x40
+MSG_ETAG = 0x80
+MSG_MAXIOVLEN = 16
+_ALIGNBYTES = 7
+def _ALIGN(p): return (((u_int)(p) + _ALIGNBYTES) & ~_ALIGNBYTES)
+
+SCM_RIGHTS = 0x01
diff --git a/Lib/plat-irix6/SV.py b/Lib/plat-irix6/SV.py
new file mode 100644
index 0000000..08fb917
--- /dev/null
+++ b/Lib/plat-irix6/SV.py
@@ -0,0 +1,120 @@
+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/TERMIOS.py b/Lib/plat-irix6/TERMIOS.py
new file mode 100644
index 0000000..fa4a475
--- /dev/null
+++ b/Lib/plat-irix6/TERMIOS.py
@@ -0,0 +1,676 @@
+# Generated by h2py from /usr/include/sys/termios.h
+
+# Included from standards.h
+
+# Included from sys/ttydev.h
+__NEW_INVALID_BAUD = 1800
+__OLD_B0 = 0
+__OLD_B50 = 0000001
+__OLD_B75 = 0000002
+__OLD_B110 = 0000003
+__OLD_B134 = 0000004
+__OLD_B150 = 0000005
+__OLD_B200 = 0000006
+__OLD_B300 = 0000007
+__OLD_B600 = 0000010
+__OLD_B1200 = 0000011
+__OLD_B1800 = 0000012
+__OLD_B2400 = 0000013
+__OLD_B4800 = 0000014
+__OLD_B9600 = 0000015
+__OLD_B19200 = 0000016
+__OLD_EXTA = 0000016
+__OLD_B38400 = 0000017
+__OLD_EXTB = 0000017
+__OLD_INVALID_BAUD = __OLD_B1800
+B0 = 0
+B50 = 50
+B75 = 75
+B110 = 110
+B134 = 134
+B150 = 150
+B200 = 200
+B300 = 300
+B600 = 600
+B1200 = 1200
+B1800 = 1800
+B2400 = 2400
+B4800 = 4800
+B9600 = 9600
+B19200 = 19200
+EXTA = 19200
+B38400 = 38400
+EXTB = 38400
+B57600 = 57600
+B76800 = 76800
+B115200 = 115200
+__INVALID_BAUD = 1800
+B0 = __OLD_B0
+B50 = __OLD_B50
+B75 = __OLD_B75
+B110 = __OLD_B110
+B134 = __OLD_B134
+B150 = __OLD_B150
+B200 = __OLD_B200
+B300 = __OLD_B300
+B600 = __OLD_B600
+B1200 = __OLD_B1200
+B1800 = __OLD_B1800
+B2400 = __OLD_B2400
+B4800 = __OLD_B4800
+B9600 = __OLD_B9600
+B19200 = __OLD_B19200
+EXTA = __OLD_B19200
+B38400 = __OLD_B38400
+EXTB = __OLD_B38400
+__INVALID_BAUD = __OLD_INVALID_BAUD
+
+# Included from sys/types.h
+
+# Included from sgidefs.h
+_MIPS_ISA_MIPS1 = 1
+_MIPS_ISA_MIPS2 = 2
+_MIPS_ISA_MIPS3 = 3
+_MIPS_ISA_MIPS4 = 4
+_MIPS_SIM_ABI32 = 1
+_MIPS_SIM_NABI32 = 2
+_MIPS_SIM_ABI64 = 3
+P_MYID = (-1)
+P_MYHOSTID = (-1)
+
+# Included from sys/bsd_types.h
+
+# Included from sys/mkdev.h
+ONBITSMAJOR = 7
+ONBITSMINOR = 8
+OMAXMAJ = 0x7f
+OMAXMIN = 0xff
+NBITSMAJOR = 14
+NBITSMINOR = 18
+MAXMAJ = 0x1ff
+MAXMIN = 0x3ffff
+OLDDEV = 0
+NEWDEV = 1
+MKDEV_VER = NEWDEV
+def major(dev): return __major(MKDEV_VER, dev)
+
+def minor(dev): return __minor(MKDEV_VER, dev)
+
+
+# Included from sys/select.h
+FD_SETSIZE = 1024
+__NBBY = 8
+
+# Included from string.h
+NULL = 0L
+NBBY = 8
+_POSIX_VDISABLE = 0
+def CTRL(c): return ((c)&037)
+
+IBSHIFT = 16
+NCC = 8
+NCCS = 23
+__NEW_MAX_BAUD = 500000
+VINTR = 0
+VQUIT = 1
+VERASE = 2
+VKILL = 3
+VEOF = 4
+VEOL = 5
+VEOL2 = 6
+VMIN = 4
+VTIME = 5
+VSWTCH = 7
+VSTART = 8
+VSTOP = 9
+VSUSP = 10
+VDSUSP = 11
+VREPRINT = 12
+VDISCARD = 13
+VWERASE = 14
+VLNEXT = 15
+VRPRNT = VREPRINT
+VFLUSHO = VDISCARD
+VCEOF = NCC
+VCEOL = (NCC + 1)
+CNUL = 0
+CDEL = 0377
+CESC = ord('\\')
+CINTR = 0177
+CQUIT = 034
+CERASE = CTRL(ord('H'))
+CKILL = CTRL(ord('U'))
+CEOL = 0
+CEOL2 = 0
+CEOF = CTRL(ord('d'))
+CEOT = CEOF
+CSTART = CTRL(ord('q'))
+CSTOP = CTRL(ord('s'))
+CSWTCH = CTRL(ord('z'))
+CNSWTCH = 0
+CSUSP = CSWTCH
+CLNEXT = CTRL(ord('v'))
+CWERASE = CTRL(ord('w'))
+CFLUSHO = CTRL(ord('o'))
+CFLUSH = CFLUSHO
+CRPRNT = CTRL(ord('r'))
+CDSUSP = CTRL(ord('y'))
+CBRK = 0377
+IGNBRK = 0000001
+BRKINT = 0000002
+IGNPAR = 0000004
+PARMRK = 0000010
+INPCK = 0000020
+ISTRIP = 0000040
+INLCR = 0000100
+IGNCR = 0000200
+ICRNL = 0000400
+IUCLC = 0001000
+IXON = 0002000
+IXANY = 0004000
+IXOFF = 0010000
+IMAXBEL = 0020000
+IBLKMD = 0040000
+OPOST = 0000001
+OLCUC = 0000002
+ONLCR = 0000004
+OCRNL = 0000010
+ONOCR = 0000020
+ONLRET = 0000040
+OFILL = 0000100
+OFDEL = 0000200
+NLDLY = 0000400
+NL0 = 0
+NL1 = 0000400
+CRDLY = 0003000
+CR0 = 0
+CR1 = 0001000
+CR2 = 0002000
+CR3 = 0003000
+TABDLY = 0014000
+TAB0 = 0
+TAB1 = 0004000
+TAB2 = 0010000
+TAB3 = 0014000
+XTABS = 0014000
+BSDLY = 0020000
+BS0 = 0
+BS1 = 0020000
+VTDLY = 0040000
+VT0 = 0
+VT1 = 0040000
+FFDLY = 0100000
+FF0 = 0
+FF1 = 0100000
+PAGEOUT = 0200000
+WRAP = 0400000
+CBAUD = 000000017
+CSIZE = 000000060
+CS5 = 0
+CS6 = 000000020
+CS7 = 000000040
+CS8 = 000000060
+CSTOPB = 000000100
+CREAD = 000000200
+PARENB = 000000400
+PARODD = 000001000
+HUPCL = 000002000
+CLOCAL = 000004000
+RCV1EN = 000010000
+XMT1EN = 000020000
+LOBLK = 000040000
+XCLUDE = 000100000
+CIBAUD = 003600000
+PAREXT = 004000000
+CNEW_RTSCTS = 010000000
+ISIG = 0000001
+ICANON = 0000002
+XCASE = 0000004
+ECHO = 0000010
+ECHOE = 0000020
+ECHOK = 0000040
+ECHONL = 0000100
+NOFLSH = 0000200
+IEXTEN = 0000400
+ITOSTOP = 0100000
+TOSTOP = ITOSTOP
+ECHOCTL = 0001000
+ECHOPRT = 0002000
+ECHOKE = 0004000
+DEFECHO = 0010000
+FLUSHO = 0020000
+PENDIN = 0040000
+TIOC = (ord('T')<<8)
+__NEW_TCGETA = (TIOC|201)
+__NEW_TCSETA = (TIOC|202)
+__NEW_TCSETAW = (TIOC|203)
+__NEW_TCSETAF = (TIOC|204)
+__OLD_TCGETA = (TIOC|1)
+__OLD_TCSETA = (TIOC|2)
+__OLD_TCSETAW = (TIOC|3)
+__OLD_TCSETAF = (TIOC|4)
+TCGETA = __NEW_TCGETA
+TCSETA = __NEW_TCSETA
+TCSETAW = __NEW_TCSETAW
+TCSETAF = __NEW_TCSETAF
+TCGETA = __OLD_TCGETA
+TCSETA = __OLD_TCSETA
+TCSETAW = __OLD_TCSETAW
+TCSETAF = __OLD_TCSETAF
+TCSBRK = (TIOC|5)
+TCXONC = (TIOC|6)
+TCFLSH = (TIOC|7)
+
+# Included from sys/ioctl.h
+IOCTYPE = 0xff00
+LIOC = (ord('l')<<8)
+LIOCGETP = (LIOC|1)
+LIOCSETP = (LIOC|2)
+LIOCGETS = (LIOC|5)
+LIOCSETS = (LIOC|6)
+DIOC = (ord('d')<<8)
+DIOCGETC = (DIOC|1)
+DIOCGETB = (DIOC|2)
+DIOCSETE = (DIOC|3)
+
+# Included from sys/ioccom.h
+IOCPARM_MASK = 0xff
+IOC_VOID = 0x20000000
+IOC_OUT = 0x40000000
+IOC_IN = 0x80000000
+IOC_INOUT = (IOC_IN|IOC_OUT)
+
+# Included from net/soioctl.h
+
+# Included from sys/termio.h
+
+# Included from sys/termios.h
+_POSIX_VDISABLE = 0
+def CTRL(c): return ((c)&037)
+
+IBSHIFT = 16
+NCC = 8
+NCCS = 23
+__NEW_MAX_BAUD = 500000
+VINTR = 0
+VQUIT = 1
+VERASE = 2
+VKILL = 3
+VEOF = 4
+VEOL = 5
+VEOL2 = 6
+VMIN = 4
+VTIME = 5
+VSWTCH = 7
+VSTART = 8
+VSTOP = 9
+VSUSP = 10
+VDSUSP = 11
+VREPRINT = 12
+VDISCARD = 13
+VWERASE = 14
+VLNEXT = 15
+VRPRNT = VREPRINT
+VFLUSHO = VDISCARD
+VCEOF = NCC
+VCEOL = (NCC + 1)
+CNUL = 0
+CDEL = 0377
+CESC = ord('\\')
+CINTR = 0177
+CQUIT = 034
+CERASE = CTRL(ord('H'))
+CKILL = CTRL(ord('U'))
+CEOL = 0
+CEOL2 = 0
+CEOF = CTRL(ord('d'))
+CEOT = CEOF
+CSTART = CTRL(ord('q'))
+CSTOP = CTRL(ord('s'))
+CSWTCH = CTRL(ord('z'))
+CNSWTCH = 0
+CSUSP = CSWTCH
+CLNEXT = CTRL(ord('v'))
+CWERASE = CTRL(ord('w'))
+CFLUSHO = CTRL(ord('o'))
+CFLUSH = CFLUSHO
+CRPRNT = CTRL(ord('r'))
+CDSUSP = CTRL(ord('y'))
+CBRK = 0377
+IGNBRK = 0000001
+BRKINT = 0000002
+IGNPAR = 0000004
+PARMRK = 0000010
+INPCK = 0000020
+ISTRIP = 0000040
+INLCR = 0000100
+IGNCR = 0000200
+ICRNL = 0000400
+IUCLC = 0001000
+IXON = 0002000
+IXANY = 0004000
+IXOFF = 0010000
+IMAXBEL = 0020000
+IBLKMD = 0040000
+OPOST = 0000001
+OLCUC = 0000002
+ONLCR = 0000004
+OCRNL = 0000010
+ONOCR = 0000020
+ONLRET = 0000040
+OFILL = 0000100
+OFDEL = 0000200
+NLDLY = 0000400
+NL0 = 0
+NL1 = 0000400
+CRDLY = 0003000
+CR0 = 0
+CR1 = 0001000
+CR2 = 0002000
+CR3 = 0003000
+TABDLY = 0014000
+TAB0 = 0
+TAB1 = 0004000
+TAB2 = 0010000
+TAB3 = 0014000
+XTABS = 0014000
+BSDLY = 0020000
+BS0 = 0
+BS1 = 0020000
+VTDLY = 0040000
+VT0 = 0
+VT1 = 0040000
+FFDLY = 0100000
+FF0 = 0
+FF1 = 0100000
+PAGEOUT = 0200000
+WRAP = 0400000
+CBAUD = 000000017
+CSIZE = 000000060
+CS5 = 0
+CS6 = 000000020
+CS7 = 000000040
+CS8 = 000000060
+CSTOPB = 000000100
+CREAD = 000000200
+PARENB = 000000400
+PARODD = 000001000
+HUPCL = 000002000
+CLOCAL = 000004000
+RCV1EN = 000010000
+XMT1EN = 000020000
+LOBLK = 000040000
+XCLUDE = 000100000
+CIBAUD = 003600000
+PAREXT = 004000000
+CNEW_RTSCTS = 010000000
+ISIG = 0000001
+ICANON = 0000002
+XCASE = 0000004
+ECHO = 0000010
+ECHOE = 0000020
+ECHOK = 0000040
+ECHONL = 0000100
+NOFLSH = 0000200
+IEXTEN = 0000400
+ITOSTOP = 0100000
+TOSTOP = ITOSTOP
+ECHOCTL = 0001000
+ECHOPRT = 0002000
+ECHOKE = 0004000
+DEFECHO = 0010000
+FLUSHO = 0020000
+PENDIN = 0040000
+TIOC = (ord('T')<<8)
+__NEW_TCGETA = (TIOC|201)
+__NEW_TCSETA = (TIOC|202)
+__NEW_TCSETAW = (TIOC|203)
+__NEW_TCSETAF = (TIOC|204)
+__OLD_TCGETA = (TIOC|1)
+__OLD_TCSETA = (TIOC|2)
+__OLD_TCSETAW = (TIOC|3)
+__OLD_TCSETAF = (TIOC|4)
+TCGETA = __NEW_TCGETA
+TCSETA = __NEW_TCSETA
+TCSETAW = __NEW_TCSETAW
+TCSETAF = __NEW_TCSETAF
+TCGETA = __OLD_TCGETA
+TCSETA = __OLD_TCSETA
+TCSETAW = __OLD_TCSETAW
+TCSETAF = __OLD_TCSETAF
+TCSBRK = (TIOC|5)
+TCXONC = (TIOC|6)
+TCFLSH = (TIOC|7)
+LDISC0 = 0
+LDISC1 = 1
+NTTYDISC = LDISC1
+TIOCFLUSH = (TIOC|12)
+TCSETLABEL = (TIOC|31)
+TCDSET = (TIOC|32)
+TCBLKMD = (TIOC|33)
+TIOCPKT = (TIOC|112)
+TIOCPKT_DATA = 0x00
+TIOCPKT_FLUSHREAD = 0x01
+TIOCPKT_FLUSHWRITE = 0x02
+TIOCPKT_NOSTOP = 0x10
+TIOCPKT_DOSTOP = 0x20
+TIOCPKT_IOCTL = 0x40
+TIOCNOTTY = (TIOC|113)
+TIOCSTI = (TIOC|114)
+TFIOC = (ord('F')<<8)
+oFIONREAD = (TFIOC|127)
+TO_STOP = LOBLK
+IOCTYPE = 0xff00
+__NEW_TCGETS = (TIOC|213)
+__NEW_TCSETS = (TIOC|214)
+__NEW_TCSETSW = (TIOC|215)
+__NEW_TCSETSF = (TIOC|216)
+__OLD_TCGETS = (TIOC|13)
+__OLD_TCSETS = (TIOC|14)
+__OLD_TCSETSW = (TIOC|15)
+__OLD_TCSETSF = (TIOC|16)
+TCGETS = __NEW_TCGETS
+TCSETS = __NEW_TCSETS
+TCSETSW = __NEW_TCSETSW
+TCSETSF = __NEW_TCSETSF
+TCGETS = __OLD_TCGETS
+TCSETS = __OLD_TCSETS
+TCSETSW = __OLD_TCSETSW
+TCSETSF = __OLD_TCSETSF
+TCSANOW = ((ord('T')<<8)|14)
+TCSADRAIN = ((ord('T')<<8)|15)
+TCSAFLUSH = ((ord('T')<<8)|16)
+TCIFLUSH = 0
+TCOFLUSH = 1
+TCIOFLUSH = 2
+TCOOFF = 0
+TCOON = 1
+TCIOFF = 2
+TCION = 3
+tIOC = (ord('t')<<8)
+TIOCGETD = (tIOC|0)
+TIOCSETD = (tIOC|1)
+TIOCHPCL = (tIOC|2)
+TIOCGETP = (tIOC|8)
+TIOCSETP = (tIOC|9)
+TIOCSETN = (tIOC|10)
+TIOCEXCL = (tIOC|13)
+TIOCNXCL = (tIOC|14)
+TIOCSETC = (tIOC|17)
+TIOCGETC = (tIOC|18)
+TIOCLBIS = (tIOC|127)
+TIOCLBIC = (tIOC|126)
+TIOCLSET = (tIOC|125)
+TIOCLGET = (tIOC|124)
+TIOCSBRK = (tIOC|123)
+TIOCCBRK = (tIOC|122)
+TIOCSDTR = (tIOC|121)
+TIOCCDTR = (tIOC|120)
+TIOCSLTC = (tIOC|117)
+TIOCGLTC = (tIOC|116)
+TIOCOUTQ = (tIOC|115)
+TIOCSTOP = (tIOC|111)
+TIOCSTART = (tIOC|110)
+TIOCGSID = (tIOC|22)
+TIOCSSID = (tIOC|24)
+TIOCMSET = (tIOC|26)
+TIOCMBIS = (tIOC|27)
+TIOCMBIC = (tIOC|28)
+TIOCMGET = (tIOC|29)
+TIOCM_LE = 0001
+TIOCM_DTR = 0002
+TIOCM_RTS = 0004
+TIOCM_ST = 0010
+TIOCM_SR = 0020
+TIOCM_CTS = 0040
+TIOCM_CAR = 0100
+TIOCM_CD = TIOCM_CAR
+TIOCM_RNG = 0200
+TIOCM_RI = TIOCM_RNG
+TIOCM_DSR = 0400
+TIOCREMOTE = (tIOC|30)
+TIOCSIGNAL = (tIOC|31)
+ISPTM = ((ord('P')<<8)|1)
+UNLKPT = ((ord('P')<<8)|2)
+SVR4SOPEN = ((ord('P')<<8)|100)
+LDIOC = (ord('D')<<8)
+LDOPEN = (LDIOC|0)
+LDCLOSE = (LDIOC|1)
+LDCHG = (LDIOC|2)
+LDGETT = (LDIOC|8)
+LDSETT = (LDIOC|9)
+LDSMAP = (LDIOC|10)
+LDGMAP = (LDIOC|11)
+LDNMAP = (LDIOC|12)
+DIOC = (ord('d')<<8)
+DIOCGETP = (DIOC|8)
+DIOCSETP = (DIOC|9)
+FIORDCHK = ((ord('f')<<8)|3)
+CLNEXT = CTRL(ord('v'))
+CWERASE = CTRL(ord('w'))
+CFLUSHO = CTRL(ord('o'))
+CFLUSH = CFLUSHO
+CRPRNT = CTRL(ord('r'))
+CDSUSP = CTRL(ord('y'))
+__OLD_SSPEED = __OLD_B9600
+SSPEED = B9600
+TERM_NONE = 0
+TERM_TEC = 1
+TERM_V61 = 2
+TERM_V10 = 3
+TERM_TEX = 4
+TERM_D40 = 5
+TERM_H45 = 6
+TERM_D42 = 7
+TM_NONE = 0000
+TM_SNL = 0001
+TM_ANL = 0002
+TM_LCF = 0004
+TM_CECHO = 0010
+TM_CINVIS = 0020
+TM_SET = 0200
+LDISC0 = 0
+LDISC1 = 1
+NTTYDISC = LDISC1
+TIOCFLUSH = (TIOC|12)
+TCSETLABEL = (TIOC|31)
+TCDSET = (TIOC|32)
+TCBLKMD = (TIOC|33)
+TIOCPKT = (TIOC|112)
+TIOCPKT_DATA = 0x00
+TIOCPKT_FLUSHREAD = 0x01
+TIOCPKT_FLUSHWRITE = 0x02
+TIOCPKT_NOSTOP = 0x10
+TIOCPKT_DOSTOP = 0x20
+TIOCPKT_IOCTL = 0x40
+TIOCNOTTY = (TIOC|113)
+TIOCSTI = (TIOC|114)
+TFIOC = (ord('F')<<8)
+oFIONREAD = (TFIOC|127)
+TO_STOP = LOBLK
+IOCTYPE = 0xff00
+__NEW_TCGETS = (TIOC|213)
+__NEW_TCSETS = (TIOC|214)
+__NEW_TCSETSW = (TIOC|215)
+__NEW_TCSETSF = (TIOC|216)
+__OLD_TCGETS = (TIOC|13)
+__OLD_TCSETS = (TIOC|14)
+__OLD_TCSETSW = (TIOC|15)
+__OLD_TCSETSF = (TIOC|16)
+TCGETS = __NEW_TCGETS
+TCSETS = __NEW_TCSETS
+TCSETSW = __NEW_TCSETSW
+TCSETSF = __NEW_TCSETSF
+TCGETS = __OLD_TCGETS
+TCSETS = __OLD_TCSETS
+TCSETSW = __OLD_TCSETSW
+TCSETSF = __OLD_TCSETSF
+TCSANOW = ((ord('T')<<8)|14)
+TCSADRAIN = ((ord('T')<<8)|15)
+TCSAFLUSH = ((ord('T')<<8)|16)
+TCIFLUSH = 0
+TCOFLUSH = 1
+TCIOFLUSH = 2
+TCOOFF = 0
+TCOON = 1
+TCIOFF = 2
+TCION = 3
+tIOC = (ord('t')<<8)
+TIOCGETD = (tIOC|0)
+TIOCSETD = (tIOC|1)
+TIOCHPCL = (tIOC|2)
+TIOCGETP = (tIOC|8)
+TIOCSETP = (tIOC|9)
+TIOCSETN = (tIOC|10)
+TIOCEXCL = (tIOC|13)
+TIOCNXCL = (tIOC|14)
+TIOCSETC = (tIOC|17)
+TIOCGETC = (tIOC|18)
+TIOCLBIS = (tIOC|127)
+TIOCLBIC = (tIOC|126)
+TIOCLSET = (tIOC|125)
+TIOCLGET = (tIOC|124)
+TIOCSBRK = (tIOC|123)
+TIOCCBRK = (tIOC|122)
+TIOCSDTR = (tIOC|121)
+TIOCCDTR = (tIOC|120)
+TIOCSLTC = (tIOC|117)
+TIOCGLTC = (tIOC|116)
+TIOCOUTQ = (tIOC|115)
+TIOCSTOP = (tIOC|111)
+TIOCSTART = (tIOC|110)
+TIOCGSID = (tIOC|22)
+TIOCSSID = (tIOC|24)
+TIOCMSET = (tIOC|26)
+TIOCMBIS = (tIOC|27)
+TIOCMBIC = (tIOC|28)
+TIOCMGET = (tIOC|29)
+TIOCM_LE = 0001
+TIOCM_DTR = 0002
+TIOCM_RTS = 0004
+TIOCM_ST = 0010
+TIOCM_SR = 0020
+TIOCM_CTS = 0040
+TIOCM_CAR = 0100
+TIOCM_CD = TIOCM_CAR
+TIOCM_RNG = 0200
+TIOCM_RI = TIOCM_RNG
+TIOCM_DSR = 0400
+TIOCREMOTE = (tIOC|30)
+TIOCSIGNAL = (tIOC|31)
+ISPTM = ((ord('P')<<8)|1)
+UNLKPT = ((ord('P')<<8)|2)
+SVR4SOPEN = ((ord('P')<<8)|100)
+LDIOC = (ord('D')<<8)
+LDOPEN = (LDIOC|0)
+LDCLOSE = (LDIOC|1)
+LDCHG = (LDIOC|2)
+LDGETT = (LDIOC|8)
+LDSETT = (LDIOC|9)
+LDSMAP = (LDIOC|10)
+LDGMAP = (LDIOC|11)
+LDNMAP = (LDIOC|12)
+DIOC = (ord('d')<<8)
+DIOCGETP = (DIOC|8)
+DIOCSETP = (DIOC|9)
+FIORDCHK = ((ord('f')<<8)|3)
diff --git a/Lib/plat-irix6/WAIT.py b/Lib/plat-irix6/WAIT.py
new file mode 100644
index 0000000..741af3b
--- /dev/null
+++ b/Lib/plat-irix6/WAIT.py
@@ -0,0 +1,335 @@
+# Generated by h2py from /usr/include/sys/wait.h
+
+# Included from standards.h
+def _W_INT(i): return (i)
+
+WUNTRACED = 0004
+WNOHANG = 0100
+_WSTOPPED = 0177
+def WIFEXITED(stat): return ((_W_INT(stat)&0377)==0)
+
+def WEXITSTATUS(stat): return ((_W_INT(stat)>>8)&0377)
+
+def WTERMSIG(stat): return (_W_INT(stat)&0177)
+
+def WSTOPSIG(stat): return ((_W_INT(stat)>>8)&0377)
+
+WEXITED = 0001
+WTRAPPED = 0002
+WSTOPPED = 0004
+WCONTINUED = 0010
+WNOWAIT = 0200
+WOPTMASK = (WEXITED|WTRAPPED|WSTOPPED|WCONTINUED|WNOHANG|WNOWAIT)
+WSTOPFLG = 0177
+WCONTFLG = 0177777
+WCOREFLAG = 0200
+WSIGMASK = 0177
+def WWORD(stat): return (_W_INT(stat)&0177777)
+
+def WIFCONTINUED(stat): return (WWORD(stat)==WCONTFLG)
+
+def WCOREDUMP(stat): return (_W_INT(stat) & WCOREFLAG)
+
+
+# Included from sys/types.h
+
+# Included from sgidefs.h
+_MIPS_ISA_MIPS1 = 1
+_MIPS_ISA_MIPS2 = 2
+_MIPS_ISA_MIPS3 = 3
+_MIPS_ISA_MIPS4 = 4
+_MIPS_SIM_ABI32 = 1
+_MIPS_SIM_NABI32 = 2
+_MIPS_SIM_ABI64 = 3
+P_MYID = (-1)
+P_MYHOSTID = (-1)
+
+# Included from sys/bsd_types.h
+
+# Included from sys/mkdev.h
+ONBITSMAJOR = 7
+ONBITSMINOR = 8
+OMAXMAJ = 0x7f
+OMAXMIN = 0xff
+NBITSMAJOR = 14
+NBITSMINOR = 18
+MAXMAJ = 0x1ff
+MAXMIN = 0x3ffff
+OLDDEV = 0
+NEWDEV = 1
+MKDEV_VER = NEWDEV
+def major(dev): return __major(MKDEV_VER, dev)
+
+def minor(dev): return __minor(MKDEV_VER, dev)
+
+
+# Included from sys/select.h
+FD_SETSIZE = 1024
+__NBBY = 8
+
+# Included from string.h
+NULL = 0L
+NBBY = 8
+
+# Included from sys/procset.h
+P_INITPID = 1
+P_INITUID = 0
+P_INITPGID = 0
+
+# Included from sys/signal.h
+SIGHUP = 1
+SIGINT = 2
+SIGQUIT = 3
+SIGILL = 4
+SIGTRAP = 5
+SIGIOT = 6
+SIGABRT = 6
+SIGEMT = 7
+SIGFPE = 8
+SIGKILL = 9
+SIGBUS = 10
+SIGSEGV = 11
+SIGSYS = 12
+SIGPIPE = 13
+SIGALRM = 14
+SIGTERM = 15
+SIGUSR1 = 16
+SIGUSR2 = 17
+SIGCLD = 18
+SIGCHLD = 18
+SIGPWR = 19
+SIGWINCH = 20
+SIGURG = 21
+SIGPOLL = 22
+SIGIO = 22
+SIGSTOP = 23
+SIGTSTP = 24
+SIGCONT = 25
+SIGTTIN = 26
+SIGTTOU = 27
+SIGVTALRM = 28
+SIGPROF = 29
+SIGXCPU = 30
+SIGXFSZ = 31
+SIG32 = 32
+SIGCKPT = 33
+SIGRTMIN = 49
+SIGRTMAX = 64
+SIGPTINTR = 47
+SIGPTRESCHED = 48
+__sigargs = int
+SIGEV_NONE = 128
+SIGEV_SIGNAL = 129
+SIGEV_CALLBACK = 130
+
+# Included from sys/siginfo.h
+ILL_ILLOPC = 1
+ILL_ILLOPN = 2
+ILL_ILLADR = 3
+ILL_ILLTRP = 4
+ILL_PRVOPC = 5
+ILL_PRVREG = 6
+ILL_COPROC = 7
+ILL_BADSTK = 8
+NSIGILL = 8
+FPE_INTDIV = 1
+FPE_INTOVF = 2
+FPE_FLTDIV = 3
+FPE_FLTOVF = 4
+FPE_FLTUND = 5
+FPE_FLTRES = 6
+FPE_FLTINV = 7
+FPE_FLTSUB = 8
+NSIGFPE = 8
+SEGV_MAPERR = 1
+SEGV_ACCERR = 2
+NSIGSEGV = 2
+BUS_ADRALN = 1
+BUS_ADRERR = 2
+BUS_OBJERR = 3
+NSIGBUS = 3
+TRAP_BRKPT = 1
+TRAP_TRACE = 2
+NSIGTRAP = 2
+CLD_EXITED = 1
+CLD_KILLED = 2
+CLD_DUMPED = 3
+CLD_TRAPPED = 4
+CLD_STOPPED = 5
+CLD_CONTINUED = 6
+NSIGCLD = 6
+POLL_IN = 1
+POLL_OUT = 2
+POLL_MSG = 3
+POLL_ERR = 4
+POLL_PRI = 5
+POLL_HUP = 6
+NSIGPOLL = 6
+SI_MAXSZ = 128
+SI_USER = 0
+SI_KILL = SI_USER
+SI_QUEUE = -1
+SI_ASYNCIO = -2
+SI_TIMER = -3
+SI_MESGQ = -4
+SIG_NOP = 0
+SIG_BLOCK = 1
+SIG_UNBLOCK = 2
+SIG_SETMASK = 3
+SIG_SETMASK32 = 256
+SA_ONSTACK = 0x00000001
+SA_RESETHAND = 0x00000002
+SA_RESTART = 0x00000004
+SA_SIGINFO = 0x00000008
+SA_NODEFER = 0x00000010
+SA_NOCLDWAIT = 0x00010000
+SA_NOCLDSTOP = 0x00020000
+_SA_BSDCALL = 0x10000000
+MINSIGSTKSZ = 512
+SIGSTKSZ = 8192
+SS_ONSTACK = 0x00000001
+SS_DISABLE = 0x00000002
+
+# Included from sys/ucontext.h
+NGREG = 36
+NGREG = 37
+GETCONTEXT = 0
+SETCONTEXT = 1
+UC_SIGMASK = 001
+UC_STACK = 002
+UC_CPU = 004
+UC_MAU = 010
+UC_MCONTEXT = (UC_CPU|UC_MAU)
+UC_ALL = (UC_SIGMASK|UC_STACK|UC_MCONTEXT)
+CTX_R0 = 0
+CTX_AT = 1
+CTX_V0 = 2
+CTX_V1 = 3
+CTX_A0 = 4
+CTX_A1 = 5
+CTX_A2 = 6
+CTX_A3 = 7
+CTX_T0 = 8
+CTX_T1 = 9
+CTX_T2 = 10
+CTX_T3 = 11
+CTX_T4 = 12
+CTX_T5 = 13
+CTX_T6 = 14
+CTX_T7 = 15
+CTX_A4 = 8
+CTX_A5 = 9
+CTX_A6 = 10
+CTX_A7 = 11
+CTX_T0 = 12
+CTX_T1 = 13
+CTX_T2 = 14
+CTX_T3 = 15
+CTX_S0 = 16
+CTX_S1 = 17
+CTX_S2 = 18
+CTX_S3 = 19
+CTX_S4 = 20
+CTX_S5 = 21
+CTX_S6 = 22
+CTX_S7 = 23
+CTX_T8 = 24
+CTX_T9 = 25
+CTX_K0 = 26
+CTX_K1 = 27
+CTX_GP = 28
+CTX_SP = 29
+CTX_S8 = 30
+CTX_RA = 31
+CTX_MDLO = 32
+CTX_MDHI = 33
+CTX_CAUSE = 34
+CTX_EPC = 35
+CTX_SR = 36
+CXT_R0 = CTX_R0
+CXT_AT = CTX_AT
+CXT_V0 = CTX_V0
+CXT_V1 = CTX_V1
+CXT_A0 = CTX_A0
+CXT_A1 = CTX_A1
+CXT_A2 = CTX_A2
+CXT_A3 = CTX_A3
+CXT_T0 = CTX_T0
+CXT_T1 = CTX_T1
+CXT_T2 = CTX_T2
+CXT_T3 = CTX_T3
+CXT_T4 = CTX_T4
+CXT_T5 = CTX_T5
+CXT_T6 = CTX_T6
+CXT_T7 = CTX_T7
+CXT_S0 = CTX_S0
+CXT_S1 = CTX_S1
+CXT_S2 = CTX_S2
+CXT_S3 = CTX_S3
+CXT_S4 = CTX_S4
+CXT_S5 = CTX_S5
+CXT_S6 = CTX_S6
+CXT_S7 = CTX_S7
+CXT_T8 = CTX_T8
+CXT_T9 = CTX_T9
+CXT_K0 = CTX_K0
+CXT_K1 = CTX_K1
+CXT_GP = CTX_GP
+CXT_SP = CTX_SP
+CXT_S8 = CTX_S8
+CXT_RA = CTX_RA
+CXT_MDLO = CTX_MDLO
+CXT_MDHI = CTX_MDHI
+CXT_CAUSE = CTX_CAUSE
+CXT_EPC = CTX_EPC
+CXT_SR = CTX_SR
+SV_ONSTACK = 0x0001
+SV_INTERRUPT = 0x0002
+NUMBSDSIGS = (32)
+def sigmask(sig): return (1L << ((sig)-1))
+
+def sigmask(sig): return (1L << ((sig)-1))
+
+SIG_ERR = (-1)
+SIG_IGN = (1)
+SIG_HOLD = (2)
+SIG_DFL = (0)
+NSIG = 65
+MAXSIG = (NSIG-1)
+NUMSIGS = (NSIG-1)
+BRK_USERBP = 0
+BRK_KERNELBP = 1
+BRK_ABORT = 2
+BRK_BD_TAKEN = 3
+BRK_BD_NOTTAKEN = 4
+BRK_SSTEPBP = 5
+BRK_OVERFLOW = 6
+BRK_DIVZERO = 7
+BRK_RANGE = 8
+BRK_PSEUDO_OP_BIT = 0x80
+BRK_PSEUDO_OP_MAX = 0x3
+BRK_CACHE_SYNC = 0x80
+BRK_SWASH_FLUSH = 0x81
+BRK_SWASH_SWTCH = 0x82
+BRK_MULOVF = 1023
+
+# Included from sys/resource.h
+PRIO_MIN = -20
+PRIO_MAX = 20
+PRIO_PROCESS = 0
+PRIO_PGRP = 1
+PRIO_USER = 2
+RUSAGE_SELF = 0
+RUSAGE_CHILDREN = -1
+RLIMIT_CPU = 0
+RLIMIT_FSIZE = 1
+RLIMIT_DATA = 2
+RLIMIT_STACK = 3
+RLIMIT_CORE = 4
+RLIMIT_NOFILE = 5
+RLIMIT_VMEM = 6
+RLIMIT_RSS = 7
+RLIMIT_AS = RLIMIT_VMEM
+RLIM_NLIMITS = 8
+RLIM32_INFINITY = 0x7fffffff
+RLIM_INFINITY = 0x7fffffff
diff --git a/Lib/plat-irix6/cddb.py b/Lib/plat-irix6/cddb.py
new file mode 100644
index 0000000..57cf3c6
--- /dev/null
+++ b/Lib/plat-irix6/cddb.py
@@ -0,0 +1,208 @@
+# This file implements a class which forms an interface to the .cddb
+# directory that is maintained by SGI's cdman program.
+#
+# Usage is as follows:
+#
+# import readcd
+# r = readcd.Readcd()
+# c = Cddb(r.gettrackinfo())
+#
+# Now you can use c.artist, c.title and c.track[trackno] (where trackno
+# starts at 1).  When the CD is not recognized, all values will be the empty
+# string.
+# It is also possible to set the above mentioned variables to new values.
+# You can then use c.write() to write out the changed values to the
+# .cdplayerrc file.
+
+import string, posix, os
+
+_cddbrc = '.cddb'
+_DB_ID_NTRACKS = 5
+_dbid_map = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@_=+abcdefghijklmnopqrstuvwxyz'
+def _dbid(v):
+	if v >= len(_dbid_map):
+		return string.zfill(v, 2)
+	else:
+		return _dbid_map[v]
+
+def tochash(toc):
+	if type(toc) == type(''):
+		tracklist = []
+		for i in range(2, len(toc), 4):
+			tracklist.append((None,
+				  (string.atoi(toc[i:i+2]),
+				   string.atoi(toc[i+2:i+4]))))
+	else:
+		tracklist = toc
+	ntracks = len(tracklist)
+	hash = _dbid((ntracks >> 4) & 0xF) + _dbid(ntracks & 0xF)
+	if ntracks <= _DB_ID_NTRACKS:
+		nidtracks = ntracks
+	else:
+		nidtracks = _DB_ID_NTRACKS - 1
+		min = 0
+		sec = 0
+		for track in tracklist:
+			start, length = track
+			min = min + length[0]
+			sec = sec + length[1]
+		min = min + sec / 60
+		sec = sec % 60
+		hash = hash + _dbid(min) + _dbid(sec)
+	for i in range(nidtracks):
+		start, length = tracklist[i]
+		hash = hash + _dbid(length[0]) + _dbid(length[1])
+	return hash
+	
+class Cddb:
+	def __init__(self, tracklist):
+		if os.environ.has_key('CDDB_PATH'):
+			path = os.environ['CDDB_PATH']
+			cddb_path = string.splitfields(path, ',')
+		else:
+			home = os.environ['HOME']
+			cddb_path = [home + '/' + _cddbrc]
+
+		self._get_id(tracklist)
+
+		for dir in cddb_path:
+			file = dir + '/' + self.id + '.rdb'
+			try:
+				f = open(file, 'r')
+				self.file = file
+				break
+			except IOError:
+				pass
+		ntracks = string.atoi(self.id[:2], 16)
+		self.artist = ''
+		self.title = ''
+		self.track = [None] + [''] * ntracks
+		self.trackartist = [None] + [''] * ntracks
+		self.notes = []
+		if not hasattr(self, 'file'):
+			return
+		import regex
+		reg = regex.compile('^\\([^.]*\\)\\.\\([^:]*\\):[\t ]+\\(.*\\)')
+		while 1:
+			line = f.readline()
+			if not line:
+				break
+			if reg.match(line) == -1:
+				print 'syntax error in ' + file
+				continue
+			name1 = line[reg.regs[1][0]:reg.regs[1][1]]
+			name2 = line[reg.regs[2][0]:reg.regs[2][1]]
+			value = line[reg.regs[3][0]:reg.regs[3][1]]
+			if name1 == 'album':
+				if name2 == 'artist':
+					self.artist = value
+				elif name2 == 'title':
+					self.title = value
+				elif name2 == 'toc':
+					if not self.toc:
+						self.toc = value
+					if self.toc != value:
+						print 'toc\'s don\'t match'
+				elif name2 == 'notes':
+					self.notes.append(value)
+			elif name1[:5] == 'track':
+				try:
+					trackno = string.atoi(name1[5:])
+				except strings.atoi_error:
+					print 'syntax error in ' + file
+					continue
+				if trackno > ntracks:
+					print 'track number ' + `trackno` + \
+						  ' in file ' + file + \
+						  ' out of range'
+					continue
+				if name2 == 'title':
+					self.track[trackno] = value
+				elif name2 == 'artist':
+					self.trackartist[trackno] = value
+		f.close()
+		for i in range(2, len(self.track)):
+			track = self.track[i]
+			# if track title starts with `,', use initial part
+			# of previous track's title
+			if track and track[0] == ',':
+				try:
+					off = string.index(self.track[i - 1],
+							   ',')
+				except string.index_error:
+					pass
+				else:
+					self.track[i] = self.track[i-1][:off] \
+							+ track
+
+	def _get_id(self, tracklist):
+		# fill in self.id and self.toc.
+		# if the argument is a string ending in .rdb, the part
+		# upto the suffix is taken as the id.
+		if type(tracklist) == type(''):
+			if tracklist[-4:] == '.rdb':
+				self.id = tracklist[:-4]
+				self.toc = ''
+				return
+			t = []
+			for i in range(2, len(tracklist), 4):
+				t.append((None, \
+					  (string.atoi(tracklist[i:i+2]), \
+					   string.atoi(tracklist[i+2:i+4]))))
+			tracklist = t
+		ntracks = len(tracklist)
+		self.id = _dbid((ntracks >> 4) & 0xF) + _dbid(ntracks & 0xF)
+		if ntracks <= _DB_ID_NTRACKS:
+			nidtracks = ntracks
+		else:
+			nidtracks = _DB_ID_NTRACKS - 1
+			min = 0
+			sec = 0
+			for track in tracklist:
+				start, length = track
+				min = min + length[0]
+				sec = sec + length[1]
+			min = min + sec / 60
+			sec = sec % 60
+			self.id = self.id + _dbid(min) + _dbid(sec)
+		for i in range(nidtracks):
+			start, length = tracklist[i]
+			self.id = self.id + _dbid(length[0]) + _dbid(length[1])
+		self.toc = string.zfill(ntracks, 2)
+		for track in tracklist:
+			start, length = track
+			self.toc = self.toc + string.zfill(length[0], 2) + \
+				  string.zfill(length[1], 2)
+
+	def write(self):
+		import posixpath
+		if os.environ.has_key('CDDB_WRITE_DIR'):
+			dir = os.environ['CDDB_WRITE_DIR']
+		else:
+			dir = os.environ['HOME'] + '/' + _cddbrc
+		file = dir + '/' + self.id + '.rdb'
+		if posixpath.exists(file):
+			# make backup copy
+			posix.rename(file, file + '~')
+		f = open(file, 'w')
+		f.write('album.title:\t' + self.title + '\n')
+		f.write('album.artist:\t' + self.artist + '\n')
+		f.write('album.toc:\t' + self.toc + '\n')
+		for note in self.notes:
+			f.write('album.notes:\t' + note + '\n')
+		prevpref = None
+		for i in range(1, len(self.track)):
+			if self.trackartist[i]:
+				f.write('track'+`i`+'.artist:\t'+self.trackartist[i]+'\n')
+			track = self.track[i]
+			try:
+				off = string.index(track, ',')
+			except string.index_error:
+				prevpref = None
+			else:
+				if prevpref and track[:off] == prevpref:
+					track = track[off:]
+				else:
+					prevpref = track[:off]
+			f.write('track' + `i` + '.title:\t' + track + '\n')
+		f.close()
diff --git a/Lib/plat-irix6/cdplayer.py b/Lib/plat-irix6/cdplayer.py
new file mode 100644
index 0000000..5c2c95a
--- /dev/null
+++ b/Lib/plat-irix6/cdplayer.py
@@ -0,0 +1,89 @@
+# This file implements a class which forms an interface to the .cdplayerrc
+# file that is maintained by SGI's cdplayer program.
+#
+# Usage is as follows:
+#
+# import readcd
+# r = readcd.Readcd()
+# c = Cdplayer(r.gettrackinfo())
+#
+# Now you can use c.artist, c.title and c.track[trackno] (where trackno
+# starts at 1).  When the CD is not recognized, all values will be the empty
+# string.
+# It is also possible to set the above mentioned variables to new values.
+# You can then use c.write() to write out the changed values to the
+# .cdplayerrc file.
+
+cdplayerrc = '.cdplayerrc'
+
+class Cdplayer:
+	def __init__(self, tracklist):
+		import string
+		self.artist = ''
+		self.title = ''
+		if type(tracklist) == type(''):
+			t = []
+			for i in range(2, len(tracklist), 4):
+				t.append((None, \
+					  (string.atoi(tracklist[i:i+2]), \
+					   string.atoi(tracklist[i+2:i+4]))))
+			tracklist = t
+		self.track = [None] + [''] * len(tracklist)
+		self.id = 'd' + string.zfill(len(tracklist), 2)
+		for track in tracklist:
+			start, length = track
+			self.id = self.id + string.zfill(length[0], 2) + \
+				  string.zfill(length[1], 2)
+		try:
+			import posix
+			f = open(posix.environ['HOME'] + '/' + cdplayerrc, 'r')
+		except IOError:
+			return
+		import regex
+		reg = regex.compile('^\\([^:]*\\):\t\\(.*\\)')
+		s = self.id + '.'
+		l = len(s)
+		while 1:
+			line = f.readline()
+			if line == '':
+				break
+			if line[:l] == s:
+				line = line[l:]
+				if reg.match(line) == -1:
+					print 'syntax error in ~/' + cdplayerrc
+					continue
+				name = line[reg.regs[1][0]:reg.regs[1][1]]
+				value = line[reg.regs[2][0]:reg.regs[2][1]]
+				if name == 'title':
+					self.title = value
+				elif name == 'artist':
+					self.artist = value
+				elif name[:5] == 'track':
+					trackno = string.atoi(name[6:])
+					self.track[trackno] = value
+		f.close()
+
+	def write(self):
+		import posix
+		filename = posix.environ['HOME'] + '/' + cdplayerrc
+		try:
+			old = open(filename, 'r')
+		except IOError:
+			old = open('/dev/null', 'r')
+		new = open(filename + '.new', 'w')
+		s = self.id + '.'
+		l = len(s)
+		while 1:
+			line = old.readline()
+			if line == '':
+				break
+			if line[:l] <> s:
+				new.write(line)
+		new.write(self.id + '.title:\t' + self.title + '\n')
+		new.write(self.id + '.artist:\t' + self.artist + '\n')
+		for i in range(1, len(self.track)):
+			new.write(self.id + '.track.' + `i` + ':\t' + \
+				  self.track[i] + '\n')
+		old.close()
+		new.close()
+		posix.rename(filename + '.new', filename)
diff --git a/Lib/plat-irix6/flp.doc b/Lib/plat-irix6/flp.doc
new file mode 100644
index 0000000..1a2f374
--- /dev/null
+++ b/Lib/plat-irix6/flp.doc
@@ -0,0 +1,117 @@
+.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
new file mode 100644
index 0000000..14e2278
--- /dev/null
+++ b/Lib/plat-irix6/flp.py
@@ -0,0 +1,455 @@
+#
+# flp - Module to load fl forms from fd files
+#
+# Jack Jansen, December 1991
+#
+import string
+import os
+import sys
+import FL
+
+SPLITLINE = '--------------------'
+FORMLINE = '=============== FORM ==============='
+ENDLINE = '=============================='
+
+error = 'flp.error'
+
+##################################################################
+#    Part 1 - The parsing routines                               #
+##################################################################
+
+#
+# Externally visible function. Load form.
+#
+def parse_form(filename, formname):
+    forms = checkcache(filename)
+    if forms is None:
+	forms = parse_forms(filename)
+    if forms.has_key(formname):
+	return forms[formname]
+    else:
+	raise error, 'No such form in fd file'
+
+#
+# Externally visible function. Load all forms.
+#
+def parse_forms(filename):
+    forms = checkcache(filename)
+    if forms != None: return forms
+    fp = _open_formfile(filename)
+    nforms = _parse_fd_header(fp)
+    forms = {}
+    for i in range(nforms):
+	form = _parse_fd_form(fp, None)
+	forms[form[0].Name] = form
+    writecache(filename, forms)
+    return forms
+
+#
+# Internal: see if a cached version of the file exists
+#
+MAGIC = '.fdc'
+_internal_cache = {}			# Used by frozen scripts only
+def checkcache(filename):
+    if _internal_cache.has_key(filename):
+	altforms = _internal_cache[filename]
+	return _unpack_cache(altforms)
+    import marshal
+    fp, filename = _open_formfile2(filename)
+    fp.close()
+    cachename = filename + 'c'
+    try:
+	fp = open(cachename, 'r')
+    except IOError:
+	#print 'flp: no cache file', cachename
+	return None
+    try:
+	if fp.read(4) != MAGIC:
+	    print 'flp: bad magic word in cache file', cachename
+	    return None
+	cache_mtime = rdlong(fp)
+	file_mtime = getmtime(filename)
+	if cache_mtime != file_mtime:
+	    #print 'flp: outdated cache file', cachename
+	    return None
+	#print 'flp: valid cache file', cachename
+	altforms = marshal.load(fp)
+	return _unpack_cache(altforms)
+    finally:
+	fp.close()
+
+def _unpack_cache(altforms):
+	forms = {}
+	for name in altforms.keys():
+	    altobj, altlist = altforms[name]
+	    obj = _newobj()
+	    obj.make(altobj)
+	    list = []
+	    for altobj in altlist:
+		nobj = _newobj()
+		nobj.make(altobj)
+		list.append(nobj)
+	    forms[name] = obj, list
+	return forms
+
+def rdlong(fp):
+    s = fp.read(4)
+    if len(s) != 4: return None
+    a, b, c, d = s[0], s[1], s[2], s[3]
+    return ord(a)<<24 | ord(b)<<16 | ord(c)<<8 | ord(d)
+
+def wrlong(fp, x):
+    a, b, c, d = (x>>24)&0xff, (x>>16)&0xff, (x>>8)&0xff, x&0xff
+    fp.write(chr(a) + chr(b) + chr(c) + chr(d))
+
+def getmtime(filename):
+    import os
+    from stat import ST_MTIME
+    try:
+	return os.stat(filename)[ST_MTIME]
+    except os.error:
+	return None
+
+#
+# Internal: write cached version of the form (parsing is too slow!)
+#
+def writecache(filename, forms):
+    import marshal
+    fp, filename = _open_formfile2(filename)
+    fp.close()
+    cachename = filename + 'c'
+    try:
+	fp = open(cachename, 'w')
+    except IOError:
+	print 'flp: can\'t create cache file', cachename
+	return # Never mind
+    fp.write('\0\0\0\0') # Seek back and write MAGIC when done
+    wrlong(fp, getmtime(filename))
+    altforms = _pack_cache(forms)
+    marshal.dump(altforms, fp)
+    fp.seek(0)
+    fp.write(MAGIC)
+    fp.close()
+    #print 'flp: wrote cache file', cachename
+
+#
+# External: print some statements that set up the internal cache.
+# This is for use with the "freeze" script.  You should call
+# flp.freeze(filename) for all forms used by the script, and collect
+# the output on a file in a module file named "frozenforms.py".  Then
+# in the main program of the script import frozenforms.
+# (Don't forget to take this out when using the unfrozen version of
+# the script!)
+#
+def freeze(filename):
+    forms = parse_forms(filename)
+    altforms = _pack_cache(forms)
+    print 'import flp'
+    print 'flp._internal_cache[', `filename`, '] =', altforms
+
+#
+# Internal: create the data structure to be placed in the cache
+#
+def _pack_cache(forms):
+    altforms = {}
+    for name in forms.keys():
+	obj, list = forms[name]
+	altobj = obj.__dict__
+	altlist = []
+	for obj in list: altlist.append(obj.__dict__)
+	altforms[name] = altobj, altlist
+    return altforms
+
+#
+# Internal: Locate form file (using PYTHONPATH) and open file
+#
+def _open_formfile(filename):
+    return _open_formfile2(filename)[0]
+
+def _open_formfile2(filename):
+    if filename[-3:] <> '.fd':
+	filename = filename + '.fd'
+    if filename[0] == '/':
+	try:
+	    fp = open(filename,'r')
+	except IOError:
+	    fp = None
+    else:
+	for pc in sys.path:
+	    pn = os.path.join(pc, filename)
+	    try:
+		fp = open(pn, 'r')
+		filename = pn
+		break
+	    except IOError:
+		fp = None
+    if fp == None:
+	raise error, 'Cannot find forms file ' + filename
+    return fp, filename
+
+#
+# Internal: parse the fd file header, return number of forms
+#
+def _parse_fd_header(file):
+    # First read the magic header line
+    datum = _parse_1_line(file)
+    if datum <> ('Magic', 12321):
+	raise error, 'Not a forms definition file'
+    # Now skip until we know number of forms
+    while 1:
+	datum = _parse_1_line(file)
+	if type(datum) == type(()) and datum[0] == 'Numberofforms':
+	    break
+    return datum[1]
+#
+# Internal: parse fd form, or skip if name doesn't match.
+# the special value None means 'allways parse it'.
+#
+def _parse_fd_form(file, name):
+    datum = _parse_1_line(file)
+    if datum <> FORMLINE:
+	raise error, 'Missing === FORM === line'
+    form = _parse_object(file)
+    if form.Name == name or name == None:
+	objs = []
+	for j in range(form.Numberofobjects):
+	    obj = _parse_object(file)
+	    objs.append(obj)
+	return (form, objs)
+    else:
+	for j in range(form.Numberofobjects):
+	    _skip_object(file)
+    return None
+
+#
+# Internal class: a convient place to store object info fields
+#
+class _newobj:
+    def add(self, name, value):
+	self.__dict__[name] = value
+    def make(self, dict):
+	for name in dict.keys():
+	    self.add(name, dict[name])
+
+#
+# Internal parsing routines.
+#
+def _parse_string(str):
+    if '\\' in str:
+	s = '\'' + str + '\''
+	try:
+	    return eval(s)
+	except:
+	    pass
+    return str
+
+def _parse_num(str):
+    return eval(str)
+
+def _parse_numlist(str):
+    slist = string.split(str)
+    nlist = []
+    for i in slist:
+	nlist.append(_parse_num(i))
+    return nlist
+
+# This dictionary maps item names to parsing routines.
+# If no routine is given '_parse_num' is default.
+_parse_func = { \
+	'Name':		_parse_string, \
+	'Box':		_parse_numlist, \
+	'Colors':	_parse_numlist, \
+	'Label':	_parse_string, \
+	'Name':		_parse_string, \
+	'Callback':	_parse_string, \
+	'Argument':	_parse_string }
+
+# This function parses a line, and returns either
+# a string or a tuple (name,value)
+
+import regex
+prog = regex.compile('^\([^:]*\): *\(.*\)')
+
+def _parse_line(line):
+    if prog.match(line) < 0:
+	return line
+    a = prog.regs
+    name = line[:a[1][1]]
+    if name[0] == 'N':
+	    name = string.joinfields(string.split(name),'')
+	    name = string.lower(name)
+    name = string.upper(name[0]) + name[1:]
+    value = line[a[2][0]:]
+    try:
+	pf = _parse_func[name]
+    except KeyError:
+	pf = _parse_num
+    value = pf(value)
+    return (name, value)
+
+def _readline(file):
+    line = file.readline()
+    if not line:
+    	raise EOFError
+    return line[:-1]
+	
+def _parse_1_line(file):
+    line = _readline(file)
+    while line == '':
+	line = _readline(file)
+    return _parse_line(line)
+
+def _skip_object(file):
+    line = ''
+    while not line in (SPLITLINE, FORMLINE, ENDLINE):
+	pos = file.tell()
+	line = _readline(file)
+    if line == FORMLINE:
+	file.seek(pos)
+
+def _parse_object(file):
+    obj = _newobj()
+    while 1:
+	pos = file.tell()
+	datum = _parse_1_line(file)
+	if datum in (SPLITLINE, FORMLINE, ENDLINE):
+	    if datum == FORMLINE:
+		file.seek(pos)
+	    return obj
+	if type(datum) <> type(()) or len(datum) <> 2:
+	    raise error, 'Parse error, illegal line in object: '+datum
+	obj.add(datum[0], datum[1])
+
+#################################################################
+#   Part 2 - High-level object/form creation routines            #
+#################################################################
+
+#
+# External - Create a form an link to an instance variable.
+#
+def create_full_form(inst, (fdata, odatalist)):
+    form = create_form(fdata)
+    exec 'inst.'+fdata.Name+' = form\n'
+    for odata in odatalist:
+	create_object_instance(inst, form, odata)
+
+#
+# External - Merge a form into an existing form in an instance
+# variable.
+#
+def merge_full_form(inst, form, (fdata, odatalist)):
+    exec 'inst.'+fdata.Name+' = form\n'
+    if odatalist[0].Class <> FL.BOX:
+	raise error, 'merge_full_form() expects FL.BOX as first obj'
+    for odata in odatalist[1:]:
+	create_object_instance(inst, form, odata)
+
+
+#################################################################
+#   Part 3 - Low-level object/form creation routines            #
+#################################################################
+
+#
+# External Create_form - Create form from parameters
+#
+def create_form(fdata):
+    import fl
+    return fl.make_form(FL.NO_BOX, fdata.Width, fdata.Height)
+
+#
+# External create_object - Create an object. Make sure there are
+# no callbacks. Returns the object created.
+#
+def create_object(form, odata):
+    obj = _create_object(form, odata)
+    if odata.Callback:
+	raise error, 'Creating free object with callback'
+    return obj
+#
+# External create_object_instance - Create object in an instance.
+#
+def create_object_instance(inst, form, odata):
+    obj = _create_object(form, odata)
+    if odata.Callback:
+	cbfunc = eval('inst.'+odata.Callback)
+	obj.set_call_back(cbfunc, odata.Argument)
+    if odata.Name:
+	exec 'inst.' + odata.Name + ' = obj\n'
+#
+# Internal _create_object: Create the object and fill options
+#
+def _create_object(form, odata):
+    crfunc = _select_crfunc(form, odata.Class)
+    obj = crfunc(odata.Type, odata.Box[0], odata.Box[1], odata.Box[2], \
+	    odata.Box[3], odata.Label)
+    if not odata.Class in (FL.BEGIN_GROUP, FL.END_GROUP):
+	obj.boxtype = odata.Boxtype
+	obj.col1 = odata.Colors[0]
+	obj.col2 = odata.Colors[1]
+	obj.align = odata.Alignment
+	obj.lstyle = odata.Style
+	obj.lsize = odata.Size
+	obj.lcol = odata.Lcol
+    return obj
+#
+# Internal crfunc: helper function that returns correct create function
+#
+def _select_crfunc(fm, cl):
+    if cl == FL.BEGIN_GROUP: return fm.bgn_group
+    elif cl == FL.END_GROUP: return fm.end_group
+    elif cl == FL.BITMAP: return fm.add_bitmap
+    elif cl == FL.BOX: return fm.add_box
+    elif cl == FL.BROWSER: return fm.add_browser
+    elif cl == FL.BUTTON: return fm.add_button
+    elif cl == FL.CHART: return fm.add_chart
+    elif cl == FL.CHOICE: return fm.add_choice
+    elif cl == FL.CLOCK: return fm.add_clock
+    elif cl == FL.COUNTER: return fm.add_counter
+    elif cl == FL.DIAL: return fm.add_dial
+    elif cl == FL.FREE: return fm.add_free
+    elif cl == FL.INPUT: return fm.add_input
+    elif cl == FL.LIGHTBUTTON: return fm.add_lightbutton
+    elif cl == FL.MENU: return fm.add_menu
+    elif cl == FL.POSITIONER: return fm.add_positioner
+    elif cl == FL.ROUNDBUTTON: return fm.add_roundbutton
+    elif cl == FL.SLIDER: return fm.add_slider
+    elif cl == FL.VALSLIDER: return fm.add_valslider
+    elif cl == FL.TEXT: return fm.add_text
+    elif cl == FL.TIMER: return fm.add_timer
+    else:
+	raise error, 'Unknown object type: ' + `cl`
+
+
+def test():
+    import time
+    t0 = time.time()
+    if len(sys.argv) == 2:
+	forms = parse_forms(sys.argv[1])
+	t1 = time.time()
+	print 'parse time:', 0.001*(t1-t0), 'sec.'
+	keys = forms.keys()
+	keys.sort()
+	for i in keys:
+	    _printform(forms[i])
+    elif len(sys.argv) == 3:
+	form = parse_form(sys.argv[1], sys.argv[2])
+	t1 = time.time()
+	print 'parse time:', round(t1-t0, 3), 'sec.'
+	_printform(form)
+    else:
+	print 'Usage: test fdfile [form]'
+
+def _printform(form):
+    f = form[0]
+    objs = form[1]
+    print 'Form ', f.Name, ', size: ', f.Width, f.Height, ' Nobj ', f.Numberofobjects
+    for i in objs:
+	print '  Obj ', i.Name, ' type ', i.Class, i.Type
+	print '    Box ', i.Box, ' btype ', i.Boxtype
+	print '    Label ', i.Label, ' size/style/col/align ', i.Size,i.Style, i.Lcol, i.Alignment
+	print '    cols ', i.Colors
+	print '    cback ', i.Callback, i.Argument
+
+# Local variables:
+# py-indent-offset: 4
+# end:
diff --git a/Lib/plat-irix6/jpeg.py b/Lib/plat-irix6/jpeg.py
new file mode 100644
index 0000000..85d6d83
--- /dev/null
+++ b/Lib/plat-irix6/jpeg.py
@@ -0,0 +1,110 @@
+# Implement 'jpeg' interface using SGI's compression library
+
+# XXX Options 'smooth' and 'optimize' are ignored.
+
+# XXX It appears that compressing grayscale images doesn't work right;
+# XXX the resulting file causes weirdness.
+
+error = 'jpeg.error' # Exception
+
+options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0}
+
+comp = None
+decomp = None
+
+def compress(imgdata, width, height, bytesperpixel):
+	global comp
+	import cl, CL
+	if comp is None: comp = cl.OpenCompressor(CL.JPEG)
+	if bytesperpixel == 1:
+		format = CL.GRAYSCALE
+	elif bytesperpixel == 4:
+		format = CL.RGBX
+	if options['forcegray']:
+		iformat = CL.GRAYSCALE
+	else:
+		iformat = CL.YUV
+	# XXX How to support 'optimize'?
+	params = [CL.IMAGE_WIDTH, width, CL.IMAGE_HEIGHT, height, \
+		  CL.ORIGINAL_FORMAT, format, \
+		  CL.ORIENTATION, CL.BOTTOM_UP, \
+		  CL.QUALITY_FACTOR, options['quality'], \
+		  CL.INTERNAL_FORMAT, iformat, \
+		 ]
+	comp.SetParams(params)
+	jpegdata = comp.Compress(1, imgdata)
+	return jpegdata
+
+def decompress(jpegdata):
+	global decomp
+	import cl, CL
+	if decomp is None: decomp = cl.OpenDecompressor(CL.JPEG)
+	headersize = decomp.ReadHeader(jpegdata)
+	params = [CL.IMAGE_WIDTH, 0, CL.IMAGE_HEIGHT, 0, CL.INTERNAL_FORMAT, 0]
+	decomp.GetParams(params)
+	width, height, format = params[1], params[3], params[5]
+	if format == CL.GRAYSCALE or options['forcegray']:
+		format = CL.GRAYSCALE
+		bytesperpixel = 1
+	else:
+		format = CL.RGBX
+		bytesperpixel = 4
+	# XXX How to support 'smooth'?
+	params = [CL.ORIGINAL_FORMAT, format, \
+		  CL.ORIENTATION, CL.BOTTOM_UP, \
+		  CL.FRAME_BUFFER_SIZE, width*height*bytesperpixel]
+	decomp.SetParams(params)
+	imgdata = decomp.Decompress(1, jpegdata)
+	return imgdata, width, height, bytesperpixel
+
+def setoption(name, value):
+	if type(value) <> type(0):
+		raise TypeError, 'jpeg.setoption: numeric options only'
+	if name == 'forcegrey':
+		name = 'forcegray'
+	if not options.has_key(name):
+		raise KeyError, 'jpeg.setoption: unknown option name'
+	options[name] = int(value)
+
+def test():
+	import sys
+	if sys.argv[1:2] == ['-g']:
+		del sys.argv[1]
+		setoption('forcegray', 1)
+	if not sys.argv[1:]:
+		sys.argv.append('/usr/local/images/data/jpg/asterix.jpg')
+	for file in sys.argv[1:]:
+		show(file)
+
+def show(file):
+	import gl, GL, DEVICE
+	jpegdata = open(file, 'r').read()
+	imgdata, width, height, bytesperpixel = decompress(jpegdata)
+	gl.foreground()
+	gl.prefsize(width, height)
+	win = gl.winopen(file)
+	if bytesperpixel == 1:
+		gl.cmode()
+		gl.pixmode(GL.PM_SIZE, 8)
+		gl.gconfig()
+		for i in range(256):
+			gl.mapcolor(i, i, i, i)
+	else:
+		gl.RGBmode()
+		gl.pixmode(GL.PM_SIZE, 32)
+		gl.gconfig()
+	gl.qdevice(DEVICE.REDRAW)
+	gl.qdevice(DEVICE.ESCKEY)
+	gl.qdevice(DEVICE.WINQUIT)
+	gl.qdevice(DEVICE.WINSHUT)
+	gl.lrectwrite(0, 0, width-1, height-1, imgdata)
+	while 1:
+		dev, val = gl.qread()
+		if dev in (DEVICE.ESCKEY, DEVICE.WINSHUT, DEVICE.WINQUIT):
+			break
+		if dev == DEVICE.REDRAW:
+			gl.lrectwrite(0, 0, width-1, height-1, imgdata)
+	gl.winclose(win)
+	# Now test the compression and write the result to a fixed filename
+	newjpegdata = compress(imgdata, width, height, bytesperpixel)
+	open('/tmp/j.jpg', 'w').write(newjpegdata)
diff --git a/Lib/plat-irix6/panel.py b/Lib/plat-irix6/panel.py
new file mode 100644
index 0000000..2c0365c
--- /dev/null
+++ b/Lib/plat-irix6/panel.py
@@ -0,0 +1,281 @@
+# Module 'panel'
+#
+# Support for the Panel library.
+# Uses built-in module 'pnl'.
+# Applciations should use 'panel.function' instead of 'pnl.function';
+# most 'pnl' functions are transparently exported by 'panel',
+# but dopanel() is overridden and you have to use this version
+# if you want to use callbacks.
+
+
+import pnl
+
+
+debug = 0
+
+
+# Test if an object is a list.
+#
+def is_list(x):
+	return type(x) == type([])
+
+
+# Reverse a list.
+#
+def reverse(list):
+	res = []
+	for item in list:
+		res.insert(0, item)
+	return res
+
+
+# Get an attribute of a list, which may itself be another list.
+# Don't use 'prop' for name.
+#
+def getattrlist(list, name):
+	for item in list:
+		if item and is_list(item) and item[0] == name:
+			return item[1:]
+	return []
+
+
+# Get a property of a list, which may itself be another list.
+#
+def getproplist(list, name):
+	for item in list:
+		if item and is_list(item) and item[0] == 'prop':
+			if len(item) > 1 and item[1] == name:
+				return item[2:]
+	return []
+
+
+# Test if an actuator description contains the property 'end-of-group'
+#
+def is_endgroup(list):
+	x = getproplist(list, 'end-of-group')
+	return (x and x[0] == '#t')
+
+
+# Neatly display an actuator definition given as S-expression
+# the prefix string is printed before each line.
+#
+def show_actuator(prefix, a):
+	for item in a:
+		if not is_list(item):
+			print prefix, item
+		elif item and item[0] == 'al':
+			print prefix, 'Subactuator list:'
+			for a in item[1:]:
+				show_actuator(prefix + '    ', a)
+		elif len(item) == 2:
+			print prefix, item[0], '=>', item[1]
+		elif len(item) == 3 and item[0] == 'prop':
+			print prefix, 'Prop', item[1], '=>',
+			print item[2]
+		else:
+			print prefix, '?', item
+
+
+# Neatly display a panel.
+#
+def show_panel(prefix, p):
+	for item in p:
+		if not is_list(item):
+			print prefix, item
+		elif item and item[0] == 'al':
+			print prefix, 'Actuator list:'
+			for a in item[1:]:
+				show_actuator(prefix + '    ', a)
+		elif len(item) == 2:
+			print prefix, item[0], '=>', item[1]
+		elif len(item) == 3 and item[0] == 'prop':
+			print prefix, 'Prop', item[1], '=>',
+			print item[2]
+		else:
+			print prefix, '?', item
+
+
+# Exception raised by build_actuator or build_panel.
+#
+panel_error = 'panel error'
+
+
+# Dummy callback used to initialize the callbacks.
+#
+def dummy_callback(arg):
+	pass
+
+
+# Assign attributes to members of the target.
+# Attribute names in exclist are ignored.
+# The member name is the attribute name prefixed with the prefix.
+#
+def assign_members(target, attrlist, exclist, prefix):
+	for item in attrlist:
+		if is_list(item) and len(item) == 2 and item[0] not in exclist:
+			name, value = item[0], item[1]
+			ok = 1
+			if value[0] in '-0123456789':
+				value = eval(value)
+			elif value[0] == '"':
+				value = value[1:-1]
+			elif value == 'move-then-resize':
+				# Strange default set by Panel Editor...
+				ok = 0
+			else:
+				print 'unknown value', value, 'for', name
+				ok = 0
+			if ok:
+				lhs = 'target.' + prefix + name
+				stmt = lhs + '=' + `value`
+				if debug: print 'exec', stmt
+				try:
+					exec stmt + '\n'
+				except KeyboardInterrupt: # Don't catch this!
+					raise KeyboardInterrupt
+				except:
+					print 'assign failed:', stmt
+
+
+# Build a real actuator from an actuator descriptior.
+# Return a pair (actuator, name).
+#
+def build_actuator(descr):
+	namelist = getattrlist(descr, 'name')
+	if namelist:
+		# Assume it is a string
+		actuatorname = namelist[0][1:-1]
+	else:
+		actuatorname = ''
+	type = descr[0]
+	if type[:4] == 'pnl_': type = type[4:]
+	act = pnl.mkact(type)
+	act.downfunc = act.activefunc = act.upfunc = dummy_callback
+	#
+	assign_members(act, descr[1:], ['al', 'data', 'name'], '')
+	#
+	# Treat actuator-specific data
+	#
+	datalist = getattrlist(descr, 'data')
+	prefix = ''
+	if type[-4:] == 'puck':
+		prefix = 'puck_'
+	elif type == 'mouse':
+		prefix = 'mouse_'
+	assign_members(act, datalist, [], prefix)
+	#
+	return act, actuatorname
+
+
+# Build all sub-actuators and add them to the super-actuator.
+# The super-actuator must already have been added to the panel.
+# Sub-actuators with defined names are added as members to the panel
+# so they can be referenced as p.name.
+#
+# Note: I have no idea how panel.endgroup() works when applied
+# to a sub-actuator.
+#
+def build_subactuators(panel, super_act, al):
+	#
+	# This is nearly the same loop as below in build_panel(),
+	# except a call is made to addsubact() instead of addact().
+	#
+	for a in al:
+		act, name = build_actuator(a)
+		act.addsubact(super_act)
+		if name:
+			stmt = 'panel.' + name + ' = act'
+			if debug: print 'exec', stmt
+			exec stmt + '\n'
+		if is_endgroup(a):
+			panel.endgroup()
+		sub_al = getattrlist(a, 'al')
+		if sub_al:
+			build_subactuators(panel, act, sub_al)
+	#
+	# Fix the actuator to which whe just added subactuators.
+	# This can't hurt (I hope) and is needed for the scroll actuator.
+	#
+	super_act.fixact()
+
+
+# Build a real panel from a panel definition.
+# Return a panel object p, where for each named actuator a, p.name is a
+# reference to a.
+#
+def build_panel(descr):
+	#
+	# Sanity check
+	#
+	if (not descr) or descr[0] <> 'panel':
+		raise panel_error, 'panel description must start with "panel"'
+	#
+	if debug: show_panel('', descr)
+	#
+	# Create an empty panel
+	#
+	panel = pnl.mkpanel()
+	#
+	# Assign panel attributes
+	#
+	assign_members(panel, descr[1:], ['al'], '')
+	#
+	# Look for actuator list
+	#
+	al = getattrlist(descr, 'al')
+	#
+	# The order in which actuators are created is important
+	# because of the endgroup() operator.
+	# Unfortunately the Panel Editor outputs the actuator list
+	# in reverse order, so we reverse it here.
+	#
+	al = reverse(al)
+	#
+	for a in al:
+		act, name = build_actuator(a)
+		act.addact(panel)
+		if name:
+			stmt = 'panel.' + name + ' = act'
+			exec stmt + '\n'
+		if is_endgroup(a):
+			panel.endgroup()
+		sub_al = getattrlist(a, 'al')
+		if sub_al:
+			build_subactuators(panel, act, sub_al)
+	#
+	return panel
+
+
+# Wrapper around pnl.dopanel() which calls call-back functions.
+#
+def my_dopanel():
+	# Extract only the first 4 elements to allow for future expansion
+	a, down, active, up = pnl.dopanel()[:4]
+	if down:
+		down.downfunc(down)
+	if active:
+		active.activefunc(active)
+	if up:
+		up.upfunc(up)
+	return a
+
+
+# Create one or more panels from a description file (S-expressions)
+# generated by the Panel Editor.
+# 
+def defpanellist(file):
+	import panelparser
+	descrlist = panelparser.parse_file(open(file, 'r'))
+	panellist = []
+	for descr in descrlist:
+		panellist.append(build_panel(descr))
+	return panellist
+
+
+# Import everything from built-in method pnl, so the user can always
+# use panel.foo() instead of pnl.foo().
+# This gives *no* performance penalty once this module is imported.
+#
+from pnl import *			# for export
+
+dopanel = my_dopanel			# override pnl.dopanel
diff --git a/Lib/plat-irix6/panelparser.py b/Lib/plat-irix6/panelparser.py
new file mode 100644
index 0000000..1b069fa
--- /dev/null
+++ b/Lib/plat-irix6/panelparser.py
@@ -0,0 +1,128 @@
+# Module 'parser'
+#
+# Parse S-expressions output by the Panel Editor
+# (which is written in Scheme so it can't help writing S-expressions).
+#
+# See notes at end of file.
+
+
+whitespace = ' \t\n'
+operators = '()\''
+separators = operators + whitespace + ';' + '"'
+
+
+# Tokenize a string.
+# Return a list of tokens (strings).
+#
+def tokenize_string(s):
+	tokens = []
+	while s:
+		c = s[:1]
+		if c in whitespace:
+			s = s[1:]
+		elif c == ';':
+			s = ''
+		elif c == '"':
+			n = len(s)
+			i = 1
+			while i < n:
+				c = s[i]
+				i = i+1
+				if c == '"': break
+				if c == '\\': i = i+1
+			tokens.append(s[:i])
+			s = s[i:]
+		elif c in operators:
+			tokens.append(c)
+			s = s[1:]
+		else:
+			n = len(s)
+			i = 1
+			while i < n:
+				if s[i] in separators: break
+				i = i+1
+			tokens.append(s[:i])
+			s = s[i:]
+	return tokens
+
+
+# Tokenize a whole file (given as file object, not as file name).
+# Return a list of tokens (strings).
+#
+def tokenize_file(fp):
+	tokens = []
+	while 1:
+		line = fp.readline()
+		if not line: break
+		tokens = tokens + tokenize_string(line)
+	return tokens
+
+
+# Exception raised by parse_exr.
+#
+syntax_error = 'syntax error'
+
+
+# Parse an S-expression.
+# Input is a list of tokens as returned by tokenize_*().
+# Return a pair (expr, tokens)
+# where expr is a list representing the s-expression,
+# and tokens contains the remaining tokens.
+# May raise syntax_error.
+#
+def parse_expr(tokens):
+	if (not tokens) or tokens[0] <> '(':
+		raise syntax_error, 'expected "("'
+	tokens = tokens[1:]
+	expr = []
+	while 1:
+		if not tokens:
+			raise syntax_error, 'missing ")"'
+		if tokens[0] == ')':
+			return expr, tokens[1:]
+		elif tokens[0] == '(':
+			subexpr, tokens = parse_expr(tokens)
+			expr.append(subexpr)
+		else:
+			expr.append(tokens[0])
+			tokens = tokens[1:]
+
+
+# Parse a file (given as file object, not as file name).
+# Return a list of parsed S-expressions found at the top level.
+#
+def parse_file(fp):
+	tokens = tokenize_file(fp)
+	exprlist = []
+	while tokens:
+		expr, tokens = parse_expr(tokens)
+		exprlist.append(expr)
+	return exprlist
+
+
+# EXAMPLE:
+#
+# The input
+#	'(hip (hop hur-ray))'
+#
+# passed to tokenize_string() returns the token list
+#	['(', 'hip', '(', 'hop', 'hur-ray', ')', ')']
+#
+# When this is passed to parse_expr() it returns the expression
+#	['hip', ['hop', 'hur-ray']]
+# plus an empty token list (because there are no tokens left.
+#
+# When a file containing the example is passed to parse_file() it returns
+# a list whose only element is the output of parse_expr() above:
+#	[['hip', ['hop', 'hur-ray']]]
+
+
+# TOKENIZING:
+#
+# Comments start with semicolon (;) and continue till the end of the line.
+#
+# Tokens are separated by whitespace, except the following characters
+# always form a separate token (outside strings):
+#	( ) '
+# Strings are enclosed in double quotes (") and backslash (\) is used
+# as escape character in strings.
diff --git a/Lib/plat-irix6/readcd.doc b/Lib/plat-irix6/readcd.doc
new file mode 100644
index 0000000..1be549c
--- /dev/null
+++ b/Lib/plat-irix6/readcd.doc
@@ -0,0 +1,104 @@
+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
new file mode 100644
index 0000000..5c4b824
--- /dev/null
+++ b/Lib/plat-irix6/readcd.py
@@ -0,0 +1,242 @@
+# Class interface to the CD module.
+
+import cd, CD
+
+Error = 'Readcd.Error'
+_Stop = 'Readcd.Stop'
+
+def _doatime(self, cb_type, data):
+	if ((data[0] * 60) + data[1]) * 75 + data[2] > self.end:
+##		print 'done with list entry',`self.listindex`
+		raise _Stop
+	func, arg = self.callbacks[cb_type]
+	if func:
+		func(arg, cb_type, data)
+
+def _dopnum(self, cb_type, data):
+	if data > self.end:
+##		print 'done with list entry',`self.listindex`
+		raise _Stop
+	func, arg = self.callbacks[cb_type]
+	if func:
+		func(arg, cb_type, data)
+
+class Readcd:
+	def __init__(self, *arg):
+		if len(arg) == 0:
+			self.player = cd.open()
+		elif len(arg) == 1:
+			self.player = cd.open(arg[0])
+		elif len(arg) == 2:
+			self.player = cd.open(arg[0], arg[1])
+		else:
+			raise Error, 'bad __init__ call'
+		self.list = []
+		self.callbacks = [(None, None)] * 8
+		self.parser = cd.createparser()
+		self.playing = 0
+		self.end = 0
+		self.status = None
+		self.trackinfo = None
+
+	def eject(self):
+		self.player.eject()
+		self.list = []
+		self.end = 0
+		self.listindex = 0
+		self.status = None
+		self.trackinfo = None
+		if self.playing:
+##			print 'stop playing from eject'
+			raise _Stop
+
+	def pmsf2msf(self, track, min, sec, frame):
+		if not self.status:
+			self.cachestatus()
+		if track < self.status[5] or track > self.status[6]:
+			raise Error, 'track number out of range'
+		if not self.trackinfo:
+			self.cacheinfo()
+		start, total = self.trackinfo[track]
+		start = ((start[0] * 60) + start[1]) * 75 + start[2]
+		total = ((total[0] * 60) + total[1]) * 75 + total[2]
+		block = ((min * 60) + sec) * 75 + frame
+		if block > total:
+			raise Error, 'out of range'
+		block = start + block
+		min, block = divmod(block, 75*60)
+		sec, frame = divmod(block, 75)
+		return min, sec, frame
+
+	def reset(self):
+		self.list = []
+
+	def appendtrack(self, track):
+		self.appendstretch(track, track)
+				
+	def appendstretch(self, start, end):
+		if not self.status:
+			self.cachestatus()
+		if not start:
+			start = 1
+		if not end:
+			end = self.status[6]
+		if type(end) == type(0):
+			if end < self.status[5] or end > self.status[6]:
+				raise Error, 'range error'
+		else:
+			l = len(end)
+			if l == 4:
+				prog, min, sec, frame = end
+				if prog < self.status[5] or prog > self.status[6]:
+					raise Error, 'range error'
+				end = self.pmsf2msf(prog, min, sec, frame)
+			elif l <> 3:
+				raise Error, 'syntax error'
+		if type(start) == type(0):
+			if start < self.status[5] or start > self.status[6]:
+				raise Error, 'range error'
+			if len(self.list) > 0:
+				s, e = self.list[-1]
+				if type(e) == type(0):
+					if start == e+1:
+						start = s
+						del self.list[-1]
+		else:
+			l = len(start)
+			if l == 4:
+				prog, min, sec, frame = start
+				if prog < self.status[5] or prog > self.status[6]:
+					raise Error, 'range error'
+				start = self.pmsf2msf(prog, min, sec, frame)
+			elif l <> 3:
+				raise Error, 'syntax error'
+		self.list.append((start, end))
+
+	def settracks(self, list):
+		self.list = []
+		for track in list:
+			self.appendtrack(track)
+
+	def setcallback(self, cb_type, func, arg):
+		if cb_type < 0 or cb_type >= 8:
+			raise Error, 'type out of range'
+		self.callbacks[cb_type] = (func, arg)
+		if self.playing:
+			start, end = self.list[self.listindex]
+			if type(end) == type(0):
+				if cb_type <> CD.PNUM:
+					self.parser.setcallback(cb_type, func, arg)
+			else:
+				if cb_type <> CD.ATIME:
+					self.parser.setcallback(cb_type, func, arg)
+
+	def removecallback(self, cb_type):
+		if cb_type < 0 or cb_type >= 8:
+			raise Error, 'type out of range'
+		self.callbacks[cb_type] = (None, None)
+		if self.playing:
+			start, end = self.list[self.listindex]
+			if type(end) == type(0):
+				if cb_type <> CD.PNUM:
+					self.parser.removecallback(cb_type)
+			else:
+				if cb_type <> CD.ATIME:
+					self.parser.removecallback(cb_type)
+
+	def gettrackinfo(self, *arg):
+		if not self.status:
+			self.cachestatus()
+		if not self.trackinfo:
+			self.cacheinfo()
+		if len(arg) == 0:
+			return self.trackinfo[self.status[5]:self.status[6]+1]
+		result = []
+		for i in arg:
+			if i < self.status[5] or i > self.status[6]:
+				raise Error, 'range error'
+			result.append(self.trackinfo[i])
+		return result
+
+	def cacheinfo(self):
+		if not self.status:
+			self.cachestatus()
+		self.trackinfo = []
+		for i in range(self.status[5]):
+			self.trackinfo.append(None)
+		for i in range(self.status[5], self.status[6]+1):
+			self.trackinfo.append(self.player.gettrackinfo(i))
+
+	def cachestatus(self):
+		self.status = self.player.getstatus()
+		if self.status[0] == CD.NODISC:
+			self.status = None
+			raise Error, 'no disc in player'
+
+	def getstatus(self):
+		return self.player.getstatus()
+
+	def play(self):
+		if not self.status:
+			self.cachestatus()
+		size = self.player.bestreadsize()
+		self.listindex = 0
+		self.playing = 0
+		for i in range(8):
+			func, arg = self.callbacks[i]
+			if func:
+				self.parser.setcallback(i, func, arg)
+			else:
+				self.parser.removecallback(i)
+		if len(self.list) == 0:
+			for i in range(self.status[5], self.status[6]+1):
+				self.appendtrack(i)
+		try:
+			while 1:
+				if not self.playing:
+					if self.listindex >= len(self.list):
+						return
+					start, end = self.list[self.listindex]
+					if type(start) == type(0):
+						dummy = self.player.seektrack(
+							start)
+					else:
+						min, sec, frame = start
+						dummy = self.player.seek(
+							min, sec, frame)
+					if type(end) == type(0):
+						self.parser.setcallback(
+							CD.PNUM, _dopnum, self)
+						self.end = end
+						func, arg = \
+						      self.callbacks[CD.ATIME]
+						if func:
+							self.parser.setcallback(CD.ATIME, func, arg)
+						else:
+							self.parser.removecallback(CD.ATIME)
+					else:
+						min, sec, frame = end
+						self.parser.setcallback(
+							CD.ATIME, _doatime,
+							self)
+						self.end = (min * 60 + sec) * \
+							   75 + frame
+						func, arg = \
+						      self.callbacks[CD.PNUM]
+						if func:
+							self.parser.setcallback(CD.PNUM, func, arg)
+						else:
+							self.parser.removecallback(CD.PNUM)
+					self.playing = 1
+				data = self.player.readda(size)
+				if data == '':
+					self.playing = 0
+					self.listindex = self.listindex + 1
+					continue
+				try:
+					self.parser.parseframe(data)
+				except _Stop:
+					self.playing = 0
+					self.listindex = self.listindex + 1
+		finally:
+			self.playing = 0
diff --git a/Lib/plat-irix6/regen b/Lib/plat-irix6/regen
new file mode 100755
index 0000000..4c4ea5c
--- /dev/null
+++ b/Lib/plat-irix6/regen
@@ -0,0 +1,13 @@
+#! /bin/sh
+case `uname -sr` in
+'IRIX '[45].*)	;;
+*)	echo Probably not on an IRIX system 1>&2
+	exit 1;;
+esac
+set -v
+h2py /usr/include/sys/fcntl.h
+h2py /usr/include/sys/file.h
+h2py /usr/include/sys/socket.h
+h2py -i '(u_long)' /usr/include/netinet/in.h
+h2py /usr/include/sys/termios.h
+h2py /usr/include/errno.h
diff --git a/Lib/plat-irix6/torgb.py b/Lib/plat-irix6/torgb.py
new file mode 100644
index 0000000..f283063
--- /dev/null
+++ b/Lib/plat-irix6/torgb.py
@@ -0,0 +1,97 @@
+# Convert "arbitrary" image files to rgb files (SGI's image format).
+# Input may be compressed.
+# The uncompressed file type may be PBM, PGM, PPM, GIF, TIFF, or Sun raster.
+# An exception is raised if the file is not of a recognized type.
+# Returned filename is either the input filename or a temporary filename;
+# in the latter case the caller must ensure that it is removed.
+# Other temporary files used are removed by the function.
+
+import os
+import tempfile
+import pipes
+import imghdr
+
+table = {}
+
+t = pipes.Template()
+t.append('fromppm $IN $OUT', 'ff')
+table['ppm'] = t
+
+t = pipes.Template()
+t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
+t.append('fromppm $IN $OUT', 'ff')
+table['pnm'] = t
+table['pgm'] = t
+table['pbm'] = t
+
+t = pipes.Template()
+t.append('fromgif $IN $OUT', 'ff')
+table['gif'] = t
+
+t = pipes.Template()
+t.append('tifftopnm', '--')
+t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
+t.append('fromppm $IN $OUT', 'ff')
+table['tiff'] = t
+
+t = pipes.Template()
+t.append('rasttopnm', '--')
+t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
+t.append('fromppm $IN $OUT', 'ff')
+table['rast'] = t
+
+t = pipes.Template()
+t.append('djpeg', '--')
+t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
+t.append('fromppm $IN $OUT', 'ff')
+table['jpeg'] = t
+
+uncompress = pipes.Template()
+uncompress.append('uncompress', '--')
+
+
+error = 'torgb.error' # Exception
+
+def torgb(filename):
+	temps = []
+	ret = None
+	try:
+		ret = _torgb(filename, temps)
+	finally:
+		for temp in temps[:]:
+			if temp <> ret:
+				try:
+					os.unlink(temp)
+				except os.error:
+					pass
+				temps.remove(temp)
+	return ret
+
+def _torgb(filename, temps):
+	if filename[-2:] == '.Z':
+		fname = tempfile.mktemp()
+		temps.append(fname)
+		sts = uncompress.copy(filename, fname)
+		if sts:
+			raise error, filename + ': uncompress failed'
+	else:
+		fname = filename
+	try:
+		ftype = imghdr.what(fname)
+	except IOError, msg:
+		if type(msg) == type(()) and len(msg) == 2 and \
+			type(msg[0]) == type(0) and type(msg[1]) == type(''):
+			msg = msg[1]
+		if type(msg) <> type(''):
+			msg = `msg`
+		raise error, filename + ': ' + msg
+	if ftype == 'rgb':
+		return fname
+	if ftype == None or not table.has_key(ftype):
+		raise error, \
+			filename + ': unsupported image file type ' + `ftype`
+	temp = tempfile.mktemp()
+	sts = table[ftype].copy(fname, temp)
+	if sts:
+		raise error, filename + ': conversion to rgb failed'
+	return temp
