Annotation of researchv9/jerq/sgs/libsdp/writeframe.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.