|
|
1.1 ! root 1: /* ! 2: * static char ID_rdpagc[] = "@(#) readpage.c: 1.2 11/10/82"; ! 3: */ ! 4: ! 5: readpage(itemid, framenbr) ! 6: int framenbr; ! 7: ITEMID itemid; ! 8: { ! 9: ! 10: register int index; ! 11: register HEADER *gframe; ! 12: int spacenbr, bytesread; ! 13: char file_name[NAMELENG]; ! 14: long offset, pagenbr; ! 15: ! 16: pagenbr = XTRCTPN(itemid); ! 17: spacenbr = XTRCTSP(itemid); ! 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: return( fatal("attempt to read page outside of address space") ); ! 29: ! 30: offset = pagenbr - offset; ! 31: ! 32: if( gframe->filedes[index] == NOTMADE ) ! 33: return( fatal("attempt to read from nonexistant file") ); ! 34: ! 35: if( gframe->filedes[index] == CLOSED ) { ! 36: sprintf(file_name, "%s/%s%d", direct_names[spacenbr], TEMPLATE, index); ! 37: if( (gframe->filedes[index] = open(file_name,RW)) < 0 ) ! 38: return( fatal("unable to open SDP file for read") ); ! 39: } ! 40: ! 41: if( lseek(gframe->filedes[index], offset*PAGESIZE, 0) < 0 ) ! 42: return( fatal("lseek failure on SDP file") ); ! 43: ! 44: SDP_read++; ! 45: if( dflag > 15 ) ! 46: fprintf( stderr, " r%02d ", framenbr ); ! 47: ! 48: if( (bytesread = ! 49: read(gframe->filedes[index], manager[framenbr].frame_pntr, PAGESIZE)) < 0 ) ! 50: return( fatal("read feilure on SDP file") ); ! 51: ! 52: manager[framenbr].page_id = itemid; ! 53: ! 54: partusage[manager[framenbr].partition]++; ! 55: #if DPARTRESET == -1 ! 56: partusage[num_partitions]++; ! 57: #else ! 58: if( ++partusage[num_partitions] >= partreset ) ! 59: repartition(); ! 60: #endif ! 61: ! 62: return( bytesread ); ! 63: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.