Annotation of researchv9/jerq/sgs/inc/sdpsrc/lo/writeframe.c, revision 1.1.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.