Commit 15ecf716 authored by sof's avatar sof
Browse files

[project @ 1997-03-14 05:17:06 by sof]

FILE objects are now StgForeignPtrs
parent 831045a7
# $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
......@@ -10,11 +10,14 @@
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) {
......
......@@ -10,7 +10,7 @@
StgInt
fileEOF(fp)
StgAddr fp;
StgForeignObj fp;
{
if (fileLookAhead(fp) != EOF)
return 0;
......
......@@ -11,7 +11,7 @@
StgInt
fileGetc(fp)
StgAddr fp;
StgForeignObj fp;
{
int c;
......
......@@ -10,7 +10,7 @@
StgInt
fileLookAhead(fp)
StgAddr fp;
StgForeignObj fp;
{
int c;
......
......@@ -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) {
......
......@@ -11,7 +11,7 @@
StgInt
filePutc(fp, c)
StgAddr fp;
StgForeignObj fp;
StgInt c;
{
int rc;
......
......@@ -18,7 +18,7 @@
StgInt
fileSize(fp, result)
StgAddr fp;
StgForeignObj fp;
StgByteArray result;
{
struct stat sb;
......
......@@ -10,7 +10,7 @@
StgInt
flushFile(fp)
StgAddr fp;
StgForeignObj fp;
{
int rc;
......
......@@ -28,7 +28,7 @@
StgInt
getBufferMode(fp)
StgAddr fp;
StgForeignObj fp;
{
struct stat sb;
......
......@@ -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) {
......
......@@ -22,7 +22,7 @@
StgInt
inputReady(fp)
StgAddr fp;
StgForeignObj fp;
{
int flags;
int c;
......
......@@ -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;
......
......@@ -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;
......
......@@ -30,7 +30,7 @@
StgInt
setBuffering(fp, size)
StgAddr fp;
StgForeignObj fp;
StgInt size;
{
int flags;
......
#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 */
......@@ -11,7 +11,7 @@
StgInt
writeFile(buf, fp, bytes)
StgAddr buf;
StgAddr fp;
StgForeignObj fp;
StgInt bytes;
{
int count;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment