Annotation of researchv9/jerq/sgs/inc/sdpsrc/lo/writeframe.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * static char ID_wrtfrmc[] = "@(#) writeframe.c: 1.1 1/8/82";
        !             3:  */
        !             4: 
        !             5: writeframe(framenbr)
        !             6: int framenbr;
        !             7: {
        !             8: 
        !             9:        register int index;
        !            10:        register HEADER *gframe;
        !            11:        int byteswritten, spacenbr, fdes;
        !            12:        char file_name[NAMELENG];
        !            13:        long offset;
        !            14:        long pagenbr;
        !            15:        
        !            16:        spacenbr = XTRCTSP(manager[framenbr].page_id);
        !            17:        pagenbr  = XTRCTPN(manager[framenbr].page_id);
        !            18:        
        !            19:        gframe = &global_frames[spacenbr];
        !            20:        
        !            21:        offset = 0L;
        !            22:        for( index = 0; index < gframe->numbfiles; index++ ) {
        !            23:                if( pagenbr < (offset + gframe->filesize[index]) )
        !            24:                        break;
        !            25:                offset += gframe->filesize[index];
        !            26:                }
        !            27:        if( index == gframe->numbfiles )
        !            28:                if( gframe->numbfiles == MAXFILES )
        !            29:                        return( fatal("address space too large") );
        !            30:                else
        !            31:                        gframe->filedes[++gframe->numbfiles] = NOTMADE;
        !            32:        
        !            33:        offset = pagenbr - offset;
        !            34:        
        !            35:        sprintf(file_name, "%s/%s%d", direct_names[spacenbr], TEMPLATE, index);
        !            36:        
        !            37:        if( gframe->filedes[index] == NOTMADE ) {
        !            38:                if( (fdes = creat(file_name,MODE) ) < 0 )
        !            39:                        return( fatal("create of new SDP file failed") );
        !            40:                if( close(fdes) == SYSERR )
        !            41:                        return( fatal("close of new SDP file failed") );
        !            42:                gframe->filedes[index] = CLOSED;
        !            43:                }
        !            44: 
        !            45:        if( gframe->filedes[index] == CLOSED )
        !            46:                if( (gframe->filedes[index] = open(file_name, RW)) < 0 )
        !            47:                        return( fatal("open of new SDP file failed") );
        !            48:        
        !            49:        if( lseek(gframe->filedes[index], offset*PAGESIZE, 0) < 0 )
        !            50:                return( fatal("lseek on SDP file failed") );
        !            51:        
        !            52:        SDP_write++;
        !            53:        if( dflag > 15 )
        !            54:                fprintf( stderr, " w%02d ", framenbr );
        !            55: 
        !            56:        if( (byteswritten =
        !            57:                write(gframe->filedes[index], manager[framenbr].frame_pntr, PAGESIZE)) < 0 )
        !            58:                return( fatal("write failed to SDP file") );
        !            59:        
        !            60:        partusage[manager[framenbr].partition]++;
        !            61:        partusage[num_partitions]++;
        !            62: 
        !            63:        return( byteswritten );
        !            64: }

unix.superglobalmegacorp.com

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