|
|
1.1 ! root 1: static char ID[] = "@(#) writeframe.c: 1.1 3/16/82"; ! 2: #include <stdio.h> ! 3: #include "sdp.h" ! 4: #include "define3.h" ! 5: ! 6: #ifdef SHORT ! 7: #define WF01 "WF01 " ! 8: #define WF02 "WF02 " ! 9: #define WF03 "WF03 " ! 10: #define WF04 "WF04 " ! 11: #define WF05 "WF05 " ! 12: #define WF06 "WF06 " ! 13: #define WF07 "WF07 " ! 14: #else ! 15: #define WF01 "WF01 -- found id beyond file limit\n%lo\t%d\t%d\n",id,i,sp->numbfile ! 16: #define WF02 "WF02 -- fail to build file name for creation\n%s%d\n",sp->head_name,i ! 17: #define WF03 "WF03 -- fail to create file\n%s\n",file_name ! 18: #define WF04 "WF04 -- fail to build file name for opening\n%s%d\n",sp->head_name,i ! 19: #define WF05 "WF05 -- fail to open file\n%s\n",file_name ! 20: #define WF06 "WF06 -- fail to position file\n%d\n",fd ! 21: #define WF07 "WF07 -- fail to write\n%d\n",fd ! 22: #endif ! 23: ! 24: extern struct LIBFILE *Glib_file ; ! 25: extern char *BUILDNAME() ; ! 26: extern FATAL() ; ! 27: extern FREE() ; ! 28: ! 29: int /* SUCCESS or ERROR */ ! 30: writeframe(sp,frame) ! 31: register struct SPACE *sp ; ! 32: int frame; ! 33: { ! 34: long offset ; ! 35: register long floor ; ! 36: register struct MANAGER *manager ; ! 37: register int i ; ! 38: int bytewt ; ! 39: ITEMID id ; ! 40: register FD fd ; ! 41: char *file_name ; ! 42: ! 43: manager = (sp->environ)->manp ; ! 44: id = manager[frame].page_id ; ! 45: ! 46: for(floor=i=0; id >= (floor += sp->fileinfo[i].leng); ) ! 47: if(++i == sp->numbfile) ! 48: ERR_RET(WF01,ERROR) ! 49: offset = id - (floor - sp->fileinfo[i].leng) ; ! 50: ! 51: switch(sp->fileinfo[i].desc) ! 52: { ! 53: case NOTMADE: ! 54: if( (file_name = MBUILDNAME(sp->head_name,i)) == NULL ) ! 55: ERR_RET(WF02,ERROR) ! 56: if(MCREATE(file_name,sp->mode) == ERROR) ! 57: ERR_RET(WF03,ERROR) ! 58: FREE(file_name) ; ! 59: ! 60: case CLOSED: ! 61: if( (file_name = MBUILDNAME(sp->head_name,i)) == NULL ) ! 62: ERR_RET(WF04,ERROR) ! 63: if( (fd = sp->fileinfo[i].desc = MOPEN(file_name,sp->perms)) == ERROR ) ! 64: ERR_RET(WF05,ERROR) ! 65: FREE(file_name) ; ! 66: break ; ! 67: ! 68: default: ! 69: fd = sp->fileinfo[i].desc ; ! 70: break ; ! 71: } ! 72: if(MSEEK(fd,offset) == ERROR) ! 73: ERR_RET(WF06,ERROR) ! 74: ! 75: if(sp->maxpage-id < sp->environ->frame_size) ! 76: bytewt = sp->maxpage-id ; ! 77: else ! 78: bytewt = sp->environ->frame_size ; ! 79: ! 80: if(MWRITE(fd,manager[frame].frame_pntr,bytewt) == ERROR ) ! 81: ERR_RET(WF07,ERROR) ! 82: manager[frame].ref_chng = RNLY ; ! 83: (sp->environ)->stats.writes++ ; ! 84: ! 85: return(SUCCESS) ; ! 86: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.