Annotation of researchv9/jerq/sgs/inc/sdpsrc/hi/init.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * static char ID_initc[] = "@(#) init.c: 1.1 1/7/82";
                      3:  */
                      4: 
                      5: sdpinit(dir_name, file_status, spacenbr)
                      6: char *dir_name;
                      7: int  file_status, spacenbr;
                      8: {
                      9: 
                     10:        register int index1, index2, limit1, limit2;
                     11:        char call_string[NAMELENG+7];
                     12:        int  fdes;
                     13:        HEADER *gframe;
                     14: 
                     15: /*
                     16:  * The UN*X directory name must fit into local storage.
                     17:  *
                     18:  * The file status and space number must be valid.
                     19:  */
                     20: 
                     21:        if( (strlen(dir_name)+1+strlen(TEMPLATE)+1 > NAMELENG)
                     22:                ||  (strlen(dir_name) == 0) )
                     23:                return( fatal("SDP directory name is illegal") );
                     24: 
                     25:        if( (spacenbr < 0) || (spacenbr > MAXSP) )
                     26:                return( fatal("illegal address space number") );
                     27: 
                     28:        if( file_status != CREATE )
                     29:                return( fatal("unknown file status") );
                     30: 
                     31: /*
                     32:  * If sdpinit has not been called before, set up the frame managers
                     33:  */
                     34: 
                     35:        if( callstatus == NOTCALLEDBEFORE ) {
                     36: 
                     37:                limit1 = 0;
                     38:                for( index1 = 0; index1 < num_partitions; index1++ ) {
                     39: 
                     40:                        limit2 = limit1 + partitions[index1];
                     41:                        for( index2 = limit1; index2 < limit2; index2++ ) {
                     42:                                manager[index2].page_id     = EMPTY;
                     43:                                manager[index2].lock_count  = 0;
                     44:                                manager[index2].forward     = index2+1;
                     45:                                manager[index2].backward    = index2-1;
                     46:                                manager[index2].ref_chng    = RNLY;
                     47:                                manager[index2].partition   = index1;
                     48:                                manager[index2].frame_pntr  =  &(frames[index2][0]);
                     49:                                }
                     50: 
                     51:                        manager[limit1].backward = LAMDA;
                     52:                        manager[limit2-1].forward = LAMDA;
                     53: 
                     54:                        lru[index1] = limit1;
                     55:                        mru[index1] = limit2-1;
                     56:                        num_linked[index1] = limit2 - limit1;
                     57:                        partusage[index1] = 0;
                     58: 
                     59:                        limit1 = limit2;
                     60: 
                     61:                        }
                     62:                partusage[num_partitions] = 0;
                     63: 
                     64:                for( index1 = 0; index1 < MAXATTACH; index1++ )
                     65:                        open_spacenumbers[index1] = NO;
                     66: 
                     67:                }
                     68:        else
                     69:                if( open_spacenumbers[spacenbr] == YES )
                     70:                        return( fatal("address space already opened") );
                     71: 
                     72: /*
                     73:  * Create the paging file
                     74:  */
                     75: 
                     76:        gframe = &global_frames[spacenbr];
                     77: 
                     78:        gframe->maxpage = 0;
                     79:        gframe->curpage = EMPTY;
                     80:        gframe->curoffset = PAGESIZE;
                     81:        gframe->numbfiles = DFILES;
                     82:        for( index1 = 0; index1 < DFILES; index1++ ) {
                     83:                gframe->filesize[index1] = file_size[index1];
                     84:                gframe->filedes[index1] = NOTMADE;
                     85:                }
                     86: 
                     87:        sprintf(call_string, "mkdir %s", dir_name);
                     88:        if( system(call_string) != 0 )
                     89:                return( fatal("creation of SDP directory failed") );
                     90: 
                     91:        sprintf(call_string, "%s/%s0", dir_name, TEMPLATE);
                     92:        if( (fdes = creat(call_string,MODE)) == SYSERR )
                     93:                return( fatal("creation of SDP paging file failed") );
                     94: 
                     95:        if( close(fdes) == SYSERR )
                     96:                return( fatal("close of SDP paging file failed") );
                     97: 
                     98:        if( (gframe->filedes[0] = open(call_string,RW)) == SYSERR )
                     99:                return( fatal("open of SDP paging file failed") );
                    100: 
                    101:        open_spacenumbers[spacenbr] = YES;
                    102:        sprintf(&direct_names[spacenbr][0], "%s", dir_name);
                    103: 
                    104:        num_spaces++;
                    105: 
                    106:        callstatus = CALLEDBEFORE;
                    107: 
                    108:        return( spacenbr );
                    109: }

unix.superglobalmegacorp.com

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