Annotation of researchv10no/cmd/spitbol/cint/wrtaout.c, revision 1.1

1.1     ! root        1: 
        !             2: /*
        !             3:        wrtaout( headerp,memsize ) writes an executable a.out file containing
        !             4:        the currently executing spitbol program. headerp is a pointer to
        !             5:        the a.out header. memsize is the actual memory size of the executing
        !             6:        program.
        !             7: */
        !             8: 
        !             9: int    wrtaout( headerp,memsize )
        !            10: 
        !            11: char   *headerp;
        !            12: int    memsize;
        !            13: 
        !            14: {
        !            15:        register int    excess, fd;
        !            16:        long    lseek();
        !            17: 
        !            18: 
        !            19:        unlink( "a.out" );
        !            20: 
        !            21:        if ( (fd = creat( "a.out",0777 )) < 0 )
        !            22:                return  -1;
        !            23: 
        !            24:        /*
        !            25:         *      write a.out header
        !            26:         */
        !            27: 
        !            28:        if ( write( fd,headerp,32 ) != 32 )
        !            29:                return  -2;
        !            30: 
        !            31:        /*
        !            32:         *      lseek out to 1024 byte boundary (full page).
        !            33:         */
        !            34: 
        !            35:        if ( lseek( fd,1024L,0 ) != 1024 )
        !            36:                return -3;
        !            37: 
        !            38:        /*
        !            39:         *      write all of memory
        !            40:         */
        !            41: 
        !            42:        if ( write( fd,0,memsize ) != memsize )
        !            43:                return  -4;
        !            44: 
        !            45:        /*
        !            46:         *      if memsize not multiple of 1024, force file size up to
        !            47:         *      this multiple.
        !            48:         */
        !            49: 
        !            50:        if ( (excess = memsize % 1024) != 0 ) {
        !            51:                excess  = 1024 - excess;
        !            52:                if ( lseek( fd,(long) excess - 1,1 ) < 0 )
        !            53:                        return  -5;
        !            54:                if ( write( fd,"",1 ) != 1 )
        !            55:                        return  -6;
        !            56:        }
        !            57: 
        !            58:        close( fd );
        !            59: 
        !            60:        return  0;
        !            61: 
        !            62: }

unix.superglobalmegacorp.com

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