[project @ 1997-03-14 05:17:06 by sof]
authorsof <unknown>
Fri, 14 Mar 1997 05:17:32 +0000 (05:17 +0000)
committersof <unknown>
Fri, 14 Mar 1997 05:17:32 +0000 (05:17 +0000)
FILE objects are now StgForeignPtrs

17 files changed:
ghc/lib/cbits/Makefile
ghc/lib/cbits/closeFile.lc
ghc/lib/cbits/fileEOF.lc
ghc/lib/cbits/fileGetc.lc
ghc/lib/cbits/fileLookAhead.lc
ghc/lib/cbits/filePosn.lc
ghc/lib/cbits/filePutc.lc
ghc/lib/cbits/fileSize.lc
ghc/lib/cbits/flushFile.lc
ghc/lib/cbits/getBufferMode.lc
ghc/lib/cbits/getLock.lc
ghc/lib/cbits/inputReady.lc
ghc/lib/cbits/readFile.lc
ghc/lib/cbits/seekFile.lc
ghc/lib/cbits/setBuffering.lc
ghc/lib/cbits/stgio.h
ghc/lib/cbits/writeFile.lc

index 9266c58..c9fecc4 100644 (file)
@@ -1,37 +1,30 @@
-# $Id: Makefile,v 1.2 1996/11/21 16:47:46 simonm Exp $
-
-TOP = ../../..
-UnlitSuffixRules = YES
-include $(TOP)/ghc/mk/ghc.mk
-
-ARCHIVE=libHS_cbits.a
-DESTDIR=$(INSTLIBDIR_GHC)
-
-SRCS=\
-closeFile.lc           createDirectory.lc              \
-errno.lc               fileEOF.lc                      \
-fileGetc.lc            fileLookAhead.lc                \
-filePosn.lc            filePutc.lc                     \
-fileSize.lc            flushFile.lc                    \
-getBufferMode.lc       getCurrentDirectory.lc          \
-getDirectoryContents.lc getLock.lc                     \
-inputReady.lc          openFile.lc                     \
-readFile.lc            removeDirectory.lc              \
-removeFile.lc          renameDirectory.lc              \
-renameFile.lc          seekFile.lc                     \
-setBuffering.lc                setCurrentDirectory.lc          \
-system.lc              writeFile.lc
-
-LIBOBJS = $(patsubst %.lc, %.o, $(SRCS))
-
-%.o : %.c
-       @$(RM) $@
-       $(GHC) $(GHCFLAGS) -c $< -o $@
-
-clean ::
-       $(RM) $(SRCS:.lc=.c)
-
-C_DEP_SRCS = $(SRCS) 
-MKDEPENDC_OPTS = -I$(GHC_INCLUDES)
-
-include $(TOP)/mk/lib.mk
+# $Id: Makefile,v 1.3 1997/03/14 05:17:06 sof Exp $
+
+TOP = ../..
+include $(TOP)/mk/boilerplate.mk
+WAYS=
+
+LIBRARY=libHS_cbits.a
+INSTALL_LIBS+=$(LIBRARY)
+
+SRCS= $(wildcard *.lc)
+
+C_SRCS  = $(SRCS:.lc=.c)
+C_OBJS  = $(C_SRCS:.c=.o)
+LIBOBJS = $(C_OBJS)
+SRC_CC_OPTS = -I$(GHC_INCLUDE_DIR)
+
+#
+# Compile the files using the Haskell compiler (ghc really).
+# 
+CC=$(HC)
+
+#
+# Remove the intermediate .c files
+# (the .o's will be removed automatically by default mk setup)
+#
+CLEAN_FILES += $(C_SRCS)
+
+SRC_MKDEPENDC_OPTS += -I$(GHC_INCLUDE_DIR)
+
+include $(TOP)/mk/target.mk
index f3efb34..9f4c80e 100644 (file)
 
 StgInt
 closeFile(fp)
-StgAddr fp;
+StgForeignObj fp;
 {
     int rc;
 
-    unlockFile(fileno((FILE *) fp));
+    if (unlockFile(fileno((FILE *) fp))) {
+       /* If it has been unlocked, don't bother fclose()ing */
+       return 0;
+    }
 
     while ((rc = fclose((FILE *) fp)) != 0) {
        if (errno != EINTR) {
index 81128d4..cdd3eb2 100644 (file)
@@ -10,7 +10,7 @@
 
 StgInt
 fileEOF(fp)
-StgAddr fp;
+StgForeignObj fp;
 {
     if (fileLookAhead(fp) != EOF)
        return 0;
index 336c0d9..131c956 100644 (file)
@@ -11,7 +11,7 @@
 
 StgInt
 fileGetc(fp)
-StgAddr fp;
+StgForeignObj fp;
 {
     int c;
 
index df0d332..91a1722 100644 (file)
@@ -10,7 +10,7 @@
 
 StgInt
 fileLookAhead(fp)
-StgAddr fp;
+StgForeignObj fp;
 {
     int c;
 
index 826c4f4..7a0d790 100644 (file)
@@ -10,7 +10,7 @@
 
 StgInt
 getFilePosn(fp)
-StgAddr fp;
+StgForeignObj fp;
 {
     StgInt posn;
 
@@ -29,7 +29,7 @@ StgAddr fp;
 
 StgInt
 setFilePosn(fp, posn)
-StgAddr fp;
+StgForeignObj fp;
 StgInt posn;
 {
     while (fseek((FILE *) fp, posn, SEEK_SET) != 0) {
index bca57ba..4e6b85b 100644 (file)
@@ -11,7 +11,7 @@
 
 StgInt
 filePutc(fp, c)
-StgAddr fp;
+StgForeignObj fp;
 StgInt c;
 {
     int rc;
index ed3da3c..34348fe 100644 (file)
@@ -18,7 +18,7 @@
   
 StgInt
 fileSize(fp, result)
-StgAddr fp;
+StgForeignObj fp;
 StgByteArray result;
 {
     struct stat sb;
index 68aa445..6cfd484 100644 (file)
@@ -10,7 +10,7 @@
 
 StgInt
 flushFile(fp)
-StgAddr fp;
+StgForeignObj fp;
 {
     int rc;
 
index 0c6bb44..cb0b984 100644 (file)
@@ -28,7 +28,7 @@
 
 StgInt
 getBufferMode(fp)
-StgAddr fp;
+StgForeignObj fp;
 {
     struct stat sb;
 
index f39014e..1ed0dbf 100644 (file)
@@ -85,18 +85,18 @@ int exclusive;
     return 0;
 }
 
-void
+int
 unlockFile(fd)
 int fd;
 {
-    int i;
+    int i, rc;
 
     for (i = 0; i < readLocks; i++)
        if (readLock[i].fd == fd) {
            while (++i < readLocks)
                readLock[i - 1] = readLock[i];
            readLocks--;
-           return;
+           return 0;
        }
 
     for (i = 0; i < writeLocks; i++)
@@ -104,13 +104,15 @@ int fd;
            while (++i < writeLocks)
                writeLock[i - 1] = writeLock[i];
            writeLocks--;
-           return;
+           return 0;
        }
+     /* Signal that we did not find an entry */
+    return 1;
 }
 
 StgInt
 getLock(fp, exclusive)
-StgAddr fp;
+StgForeignObj fp;
 StgInt exclusive;
 {
     if (lockFile(fileno((FILE *) fp), exclusive) < 0) {
index fc8184e..7e62f31 100644 (file)
@@ -22,7 +22,7 @@
 
 StgInt
 inputReady(fp)
-StgAddr fp;
+StgForeignObj fp;
 {
     int flags;
     int c;
index 2b649e3..0cc9c2c 100644 (file)
@@ -13,7 +13,7 @@
 StgInt
 readBlock(buf, fp, size)
 StgAddr buf;
-StgAddr fp;
+StgForeignObj fp;
 StgInt size;
 {
     int count;
@@ -43,7 +43,7 @@ StgInt size;
 StgInt
 readLine(buf, fp, size)
 StgAddr buf;
-StgAddr fp;
+StgForeignObj fp;
 StgInt size;
 {
     if (feof((FILE *) fp)) {
@@ -70,7 +70,7 @@ StgInt size;
 
 StgInt
 readChar(fp)
-StgAddr fp;
+StgForeignObj fp;
 {
     int c;
 
index caff607..48c0cf7 100644 (file)
@@ -18,7 +18,7 @@
 
 StgInt
 seekFile(fp, whence, size, d)
-StgAddr fp;
+StgForeignObj fp;
 StgInt whence;
 StgInt size;
 StgByteArray d;
@@ -106,7 +106,7 @@ StgByteArray d;
 
 StgInt
 seekFileP(fp)
-StgAddr fp;
+StgForeignObj fp;
 {
     struct stat sb;
 
index ffccf70..0169b50 100644 (file)
@@ -30,7 +30,7 @@
 
 StgInt
 setBuffering(fp, size)
-StgAddr fp;
+StgForeignObj fp;
 StgInt size;
 {
     int flags;
index 7913237..82b223f 100644 (file)
@@ -1,14 +1,14 @@
 #ifndef STGIO_H
 #define STGIO_H
 
-/* Decls for routines in ghc/runtime/io/ only used there.
+/* Decls for routines in ghc/lib/cbits/ only used there.
  * This file is used when compiling the Haskell library
  * that _ccalls_ those routines; and when compiling those
  * routines (to check consistency).
  */
 
 /* closeFile.lc */
-StgInt closeFile PROTO((StgAddr));
+StgInt closeFile PROTO((StgForeignObj));
 
 /* createDirectory.lc */
 StgInt createDirectory PROTO((StgByteArray));
@@ -30,29 +30,28 @@ void        stdErrno(STG_NO_ARGS);
 int    execvpe PROTO((char *, char **, char **));
 
 /* fileEOF.lc */
-StgInt fileEOF PROTO((StgAddr));
-
+StgInt fileEOF PROTO((StgForeignObj));
 /* fileGetc.lc */
-StgInt fileGetc PROTO((StgAddr));
+StgInt fileGetc PROTO((StgForeignObj));
 
 /* fileLookAhead.lc */
-StgInt fileLookAhead PROTO((StgAddr));
+StgInt fileLookAhead PROTO((StgForeignObj));
 
 /* filePosn.lc */
-StgInt getFilePosn PROTO((StgAddr));
-StgInt setFilePosn PROTO((StgAddr, StgInt));
+StgInt getFilePosn PROTO((StgForeignObj));
+StgInt setFilePosn PROTO((StgForeignObj, StgInt));
 
 /* filePutc.lc */
-StgInt filePutc    PROTO((StgAddr, StgInt));
+StgInt filePutc    PROTO((StgForeignObj, StgInt));
 
 /* fileSize.lc */
-StgInt fileSize    PROTO((StgAddr, StgByteArray));
+StgInt fileSize    PROTO((StgForeignObj, StgByteArray));
 
 /* flushFile.lc */
-StgInt flushFile   PROTO((StgAddr));
+StgInt flushFile   PROTO((StgForeignObj));
 
 /* getBufferMode.lc */
-StgInt getBufferMode PROTO((StgAddr));
+StgInt getBufferMode PROTO((StgForeignObj));
 
 /* getClockTime.lc */
 StgInt getClockTime PROTO((StgByteArray, StgByteArray));
@@ -68,19 +67,23 @@ StgAddr getDirectoryContents PROTO((StgByteArray));
 
 /* getLock.lc */
 int     lockFile    PROTO((int, int));
-void    unlockFile  PROTO((int));
-StgInt getLock     PROTO((StgAddr, StgInt));
+int     unlockFile  PROTO((int));
+StgInt getLock     PROTO((StgForeignObj, StgInt));
 
 /* inputReady.lc */
-StgInt inputReady  PROTO((StgAddr));
+StgInt inputReady  PROTO((StgForeignObj));
 
 /* openFile.lc */
 StgAddr openFile PROTO((StgByteArray, StgByteArray));
 
+/* freeFile.lc */
+void freeStdChannel PROTO((StgForeignObj));
+void freeFile PROTO((StgForeignObj));
+
 /* readFile.lc */
-StgInt readBlock PROTO((StgAddr, StgAddr, StgInt));
-StgInt readLine PROTO((StgAddr, StgAddr, StgInt));
-StgInt readChar PROTO((StgAddr));
+StgInt readBlock PROTO((StgAddr, StgForeignObj, StgInt));
+StgInt readLine PROTO((StgAddr,  StgForeignObj, StgInt));
+StgInt readChar PROTO((StgForeignObj));
 
 /* removeDirectory.lc */
 StgInt removeDirectory PROTO((StgByteArray));
@@ -95,11 +98,11 @@ StgInt renameDirectory PROTO((StgByteArray, StgByteArray));
 StgInt renameFile PROTO((StgByteArray, StgByteArray));
 
 /* seekFile.lc */
-StgInt seekFile  PROTO((StgAddr, StgInt, StgInt, StgByteArray));
-StgInt seekFileP PROTO((StgAddr));
+StgInt seekFile  PROTO((StgForeignObj, StgInt, StgInt, StgByteArray));
+StgInt seekFileP PROTO((StgForeignObj));
 
 /* setBuffering.lc */
-StgInt setBuffering PROTO((StgAddr, StgInt));
+StgInt setBuffering PROTO((StgForeignObj, StgInt));
 
 /* setCurrentDirectory.lc */
 StgInt setCurrentDirectory PROTO((StgByteArray));
@@ -120,6 +123,6 @@ StgAddr toUTCTime PROTO((StgInt, StgByteArray, StgByteArray));
 StgAddr toClockSec PROTO((StgInt, StgInt, StgInt, StgInt, StgInt, StgInt, StgInt, StgByteArray));
 
 /* writeFile.lc */
-StgInt writeFile PROTO((StgAddr, StgAddr, StgInt));
+StgInt writeFile PROTO((StgAddr, StgForeignObj, StgInt));
 
 #endif /* ! STGIO_H */
index 6981bf1..71c7b0d 100644 (file)
@@ -11,7 +11,7 @@
 StgInt
 writeFile(buf, fp, bytes)
 StgAddr buf;
-StgAddr fp;
+StgForeignObj fp;
 StgInt bytes;
 {
     int count;