#include #include #include #include #include #include #include #include #include #include #include #include #define BFSIZE 8192 void passmark(); int sysopnc_(unit,name,mode,nf,lenname) int *unit, *mode, *nf, lenname; char *name; { char buf[BFSIZE]; int k,err,fd; extern errno; long bytes; struct mtop magop; for(k=0;k<40;k++) { if(*(name+k)==' ') *(name+k)='\0'; if(*(name+k)=='\0') break; } *unit=open(name,*mode); if(*unit==-1 && *mode!=0) *unit=creat(name,05777); if(*unit==-1) err=-1; else err=0; if(*nf<0) {printf("error in sysopnc"); exit();} if(*nf>0){ switch(*mode){ case 0:passmark(*unit,*nf,buf); case 1:magop.mt_op=MTWEOF; magop.mt_count=*nf; if(ioctl(*unit,MTIOCTOP,&magop)==-1) {printf("errno=%d",errno); exit();} break; case 2:printf("to be fixed"); exit(); break; default: printf("sysopnc.c:wrong mode"); exit(); } } return (err); } /********************************************************/ void passmark(fd,nf,buf) int fd,nf; char *buf; { int n,nread; for(n=1;n<=nf;n++) { do { nread=read(fd,buf,BFSIZE); if(nread<0) {printf("error in passmark");exit();} } while(nread>0); } }