diff --git a/Lib/irix5/flp.py b/Lib/irix5/flp.py
index 6aae82c..e64d555 100755
--- a/Lib/irix5/flp.py
+++ b/Lib/irix5/flp.py
@@ -118,10 +118,10 @@
 # Internal parsing routines.
 #
 def _parse_string(str):
-    return string.strip(str)
+    return str
 
 def _parse_num(str):
-    return eval(string.strip(str))
+    return eval(str)
 
 def _parse_numlist(str):
     slist = string.split(str)
@@ -144,16 +144,18 @@
 # This function parses a line, and returns either
 # a string or a tuple (name,value)
 
+import regexp
+
 def _parse_line(line):
-    try:
-	colonpos = string.index(line,':')
-    except string.index_error:
-	return string.strip(line)
-    name = line[:colonpos]
-    name = string.joinfields(string.split(name),'')
-    name = string.lower(name)
+    a = regexp.match('^([^:]*): *(.*)', line)
+    if not a:
+	return line
+    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[colonpos+1:]
+    value = line[a[2][0]:]
     try:
 	pf = _parse_func[name]
     except RuntimeError:	# BCOMPAT
@@ -165,12 +167,12 @@
 
 def _readline(file):
     line = file.readline()
-    if line <> '':
-	line = line[:-1]
-    return line
+    if not line:
+    	raise EOFError
+    return line[:-1]
 	
 def _parse_1_line(file):
-    line = ''
+    line = _readline(file)
     while line = '':
 	line = _readline(file)
     return _parse_line(line)
diff --git a/Lib/plat-irix5/flp.py b/Lib/plat-irix5/flp.py
index 6aae82c..e64d555 100755
--- a/Lib/plat-irix5/flp.py
+++ b/Lib/plat-irix5/flp.py
@@ -118,10 +118,10 @@
 # Internal parsing routines.
 #
 def _parse_string(str):
-    return string.strip(str)
+    return str
 
 def _parse_num(str):
-    return eval(string.strip(str))
+    return eval(str)
 
 def _parse_numlist(str):
     slist = string.split(str)
@@ -144,16 +144,18 @@
 # This function parses a line, and returns either
 # a string or a tuple (name,value)
 
+import regexp
+
 def _parse_line(line):
-    try:
-	colonpos = string.index(line,':')
-    except string.index_error:
-	return string.strip(line)
-    name = line[:colonpos]
-    name = string.joinfields(string.split(name),'')
-    name = string.lower(name)
+    a = regexp.match('^([^:]*): *(.*)', line)
+    if not a:
+	return line
+    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[colonpos+1:]
+    value = line[a[2][0]:]
     try:
 	pf = _parse_func[name]
     except RuntimeError:	# BCOMPAT
@@ -165,12 +167,12 @@
 
 def _readline(file):
     line = file.readline()
-    if line <> '':
-	line = line[:-1]
-    return line
+    if not line:
+    	raise EOFError
+    return line[:-1]
 	
 def _parse_1_line(file):
-    line = ''
+    line = _readline(file)
     while line = '':
 	line = _readline(file)
     return _parse_line(line)
