Annotation of researchv9/jerq/sgs/libsdp/writeframe.c, revision 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.