ack/lang/a68s/liba68s/aopen.c
1988-10-04 13:41:01 +00:00

47 lines
1.3 KiB
C

#include <pc_file.h>
#include <pc_err.h>
#define BUFFLENGTH 512 /* number of items in buffer */
extern struct file *_curfil; /* for error mesages from trap */
extern _trp(); /* pc runtime trap routine */
extern creat(); /* unix open for write */
extern open(); /* unix open for read */
static int initfile (desc,f) int desc; struct file *f; {
_curfil=f;
if ( (desc & WRBIT) == 0) {
if ( (f->ufd = open(f->fname,0)) < 0 )
_trp(ERESET);
} else {
if ( (f->ufd = creat(f->fname,0644)) < 0 )
_trp(EREWR);
}
f->buflen = BUFFLENGTH;
f->size = 1;
f->ptr = f->bufadr;
f->flags = desc;
return(1);
}
/* as both the following routines are called from a pascal subroutine */
/* and the pascal compiler has been fixed to alwayd supply static links */
/* to non-global externals the parameter 'statlink' is a dummy to fill */
/* the space occupied by the static link. The parameter is first instead */
/* of last because of the C method of passing its parameters backwards */
AOPN(statlink,f) int *statlink; struct file *f; {
if ( initfile ((int)(MAGIC|TXTBIT),f) )
f->count=0;
}
ACRE(statlink,f) int *statlink; struct file *f; {
if ( initfile ((int)(WRBIT|EOFBIT|ELNBIT|MAGIC|TXTBIT),f) )
f->count=f->buflen;
}