import IOBase
import ArrBase ( MutableByteArray(..), newCharArray )
import IOHandle -- much of the real stuff is in here
-import PackedString ( nilPS, packCBytesST, unpackPS )
+import PackBase ( unpackNBytesST )
import PrelBase
import GHC
import Foreign ( ForeignObj, Addr, makeForeignObj, writeForeignObj )
instance Show Handle where {showsPrec p h = showString "<<Handle>>"}
+--Type declared in IOHandle, instance here because it depends on Eq.Handle
+instance Eq HandlePosn where
+ (HandlePosn h1 p1) == (HandlePosn h2 p2) = p1==p2 && h1==h2
+
\end{code}
%*********************************************************
SemiClosedHandle fp (buf, size) ->
_ccall_ readBlock buf fp size >>= \ bytes ->
(if bytes <= 0
- then return nilPS
- else packCBytesST bytes buf) >>= \ some ->
+ then return ""
+ else unpackNBytesST buf bytes) >>= \ some ->
if bytes < 0 then
_ccall_ free buf >>= \ () ->
_ccall_ closeFile fp >>
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
writeForeignObj fp ``NULL'' >>
ioToST (writeHandle handle (SemiClosedHandle fp (``NULL'', 0))) >>
#else
ioToST (writeHandle handle (SemiClosedHandle ``NULL'' (``NULL'', 0))) >>
#endif
- returnPrimIO (unpackPS some)
+ returnPrimIO some
else
ioToST (writeHandle handle htype) >>
unsafeInterleavePrimIO (lazyReadBlock handle)
>>= \ more ->
- returnPrimIO (unpackPS some ++ more)
+ returnPrimIO (some ++ more)
lazyReadLine handle =
ioToST (readHandle handle) >>= \ htype ->
SemiClosedHandle fp (buf, size) ->
_ccall_ readLine buf fp size >>= \ bytes ->
(if bytes <= 0
- then return nilPS
- else packCBytesST bytes buf) >>= \ some ->
+ then return ""
+ else unpackNBytesST buf bytes) >>= \ some ->
if bytes < 0 then
_ccall_ free buf >>= \ () ->
_ccall_ closeFile fp >>
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
writeForeignObj fp ``NULL'' >>
ioToST (writeHandle handle (SemiClosedHandle fp (``NULL'', 0))) >>
#else
ioToST (writeHandle handle (SemiClosedHandle ``NULL'' (``NULL'', 0))) >>
#endif
- returnPrimIO (unpackPS some)
+ return some
else
ioToST (writeHandle handle htype) >>
unsafeInterleavePrimIO (lazyReadLine handle)
>>= \ more ->
- returnPrimIO (unpackPS some ++ more)
+ return (some ++ more)
lazyReadChar handle =
ioToST (readHandle handle) >>= \ htype ->
_ccall_ readChar fp >>= \ char ->
if char == ``EOF'' then
_ccall_ closeFile fp >>
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
writeForeignObj fp ``NULL'' >>
ioToST (writeHandle handle (SemiClosedHandle fp (``NULL'', 0))) >>
#else
else
constructErrorAndFail "hPutStr"
where
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
writeLines :: ForeignObj -> String -> PrimIO Bool
#else
writeLines :: Addr -> String -> PrimIO Bool
#endif
writeLines = writeChunks ``BUFSIZ'' True
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
writeBlocks :: ForeignObj -> Int -> String -> PrimIO Bool
#else
writeBlocks :: Addr -> Int -> String -> PrimIO Bool
a whole lot quicker. -- SOF 3/96
-}
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
writeChunks :: Int -> Bool -> ForeignObj -> String -> PrimIO Bool
#else
writeChunks :: Int -> Bool -> Addr -> String -> PrimIO Bool
in
shoveString 0# s
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
writeChars :: ForeignObj -> String -> PrimIO Bool
#else
writeChars :: Addr -> String -> PrimIO Bool