#include #include #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; }