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