47 lines
1.3 KiB
C
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;
|
||
|
}
|
||
|
|