Annotation of cci/sys/stand/vdfmt/format.c, revision 1.1

1.1     ! root        1: #include       "vdfmt.h"
        !             2: 
        !             3: /*
        !             4: **
        !             5: */
        !             6: 
        !             7: format()
        !             8: {
        !             9:        boolean read_bad_sector_map();
        !            10:        cur.state = fmt;
        !            11:        print("Starting format on ");
        !            12:        printf("controller %d, drive %d, ", cur.controller, cur.drive);
        !            13:        printf("type %s.\n",CURRENT->type_name);
        !            14: 
        !            15:        /* Read the flaw map from the disk (where ever it may be) */
        !            16:        if(read_bad_sector_map() == true) {
        !            17:                if(bad_map->bs_id != D_INFO.id) {
        !            18:                        print("Module serial numbers do not match!\n");
        !            19:                        print("Use `info' to find the real serial number.\n");
        !            20:                        _longjmp(abort_environ, 1);
        !            21:                }
        !            22:        }
        !            23:        else
        !            24:                bad_map->bs_id = D_INFO.id;
        !            25: 
        !            26:        /* Re-Initialize bad sector map relocation pointers */
        !            27:        zero_bad_sector_map();
        !            28:        write_bad_sector_map();
        !            29:        if(kill_processes == true)
        !            30:                _longjmp(quit_environ, 1);
        !            31: 
        !            32:        /* format the disk surface */
        !            33:        format_relocation_area();
        !            34:        format_maintainence_area();
        !            35:        format_users_data_area();
        !            36:        if(kill_processes == true)
        !            37:                _longjmp(quit_environ, 1);
        !            38: 
        !            39: 
        !            40:        /* verify the surface */
        !            41:        verify_relocation_area();
        !            42:        verify_maintainence_area();
        !            43:        verify_users_data_area();
        !            44: }
        !            45: 
        !            46: 
        !            47: /*
        !            48: **
        !            49: */
        !            50: 
        !            51: format_relocation_area()
        !            52: {
        !            53:        register long           sector_count;
        !            54:        dskadr                  dskaddr;
        !            55: 
        !            56:        cur.substate = sub_fmt;
        !            57:        dskaddr.cylinder = (short)(CURRENT->ncyl - NUMSYS);
        !            58:        dskaddr.track = (char)0;
        !            59:        dskaddr.sector = (char)0;
        !            60:        sector_count = (long)(NUMREL * CURRENT->ntrak * CURRENT->nsec);
        !            61:        format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
        !            62: }
        !            63: 
        !            64: 
        !            65: /*
        !            66: **
        !            67: */
        !            68: 
        !            69: format_users_data_area()
        !            70: {
        !            71:        register long           sector_count;
        !            72:        dskadr                  dskaddr;
        !            73:        register int            cyl;
        !            74: 
        !            75:        cur.substate = sub_fmt;
        !            76:        sector_count = (long)(CURRENT->ntrak * CURRENT->nsec);
        !            77:        dskaddr.track = (char)0;
        !            78:        dskaddr.sector = (char)0;
        !            79:        for(cyl=0; cyl < (CURRENT->ncyl - NUMSYS); cyl++) {
        !            80:                dskaddr.cylinder = cyl;
        !            81:                format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
        !            82:        }
        !            83: }
        !            84: 
        !            85: 
        !            86: /*
        !            87: **
        !            88: */
        !            89: 
        !            90: format_maintainence_area()
        !            91: {
        !            92:        register long           sector_count;
        !            93:        dskadr                  dskaddr;
        !            94: 
        !            95:        cur.substate = sub_fmt;
        !            96:        dskaddr.cylinder = (short)(CURRENT->ncyl - NUMMNT - NUMMAP);
        !            97:        dskaddr.track = (char)0;
        !            98:        dskaddr.sector = (char)0;
        !            99:        sector_count = (long)(NUMMNT * CURRENT->ntrak * CURRENT->nsec);
        !           100:        format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
        !           101: }
        !           102: 
        !           103: 
        !           104: /*
        !           105: **
        !           106: */
        !           107: 
        !           108: boolean is_formatted()
        !           109: {
        !           110:        extern boolean  align_buf();
        !           111:        dskadr          dskaddr;
        !           112: 
        !           113:        dskaddr.cylinder = 0;
        !           114:        dskaddr.track = 0;
        !           115:        dskaddr.sector = 0;
        !           116:        if(C_INFO.type == SMD_ECTLR) {
        !           117:                access_dsk((char *)save, &dskaddr, RD_RAW, 1, 1);
        !           118:                if(align_buf((unsigned long *)save, CDCSYNC) == false)
        !           119:                        return true;
        !           120:                return  false;
        !           121:        }
        !           122:        else if(access_dsk((char *)save, &dskaddr, RD, 1, 1) & HEADER_ERROR)
        !           123:                return false;
        !           124:        return true;
        !           125: }
        !           126: 
        !           127: 
        !           128: /*
        !           129: **     Vdformat_sectors is used to do the actual formatting of a block.
        !           130: */
        !           131: 
        !           132: format_sectors(dskaddr, hdraddr, flags, count)
        !           133: dskadr *dskaddr, *hdraddr;
        !           134: short  flags;
        !           135: long   count;
        !           136: {
        !           137:        cur.daddr.cylinder = dskaddr->cylinder & 0xfff;
        !           138:        cur.daddr.track = dskaddr->track;
        !           139:        dcb.opcode = FSECT;             /* format sector command */
        !           140:        dcb.intflg = NOINT;
        !           141:        dcb.nxtdcb = (fmt_dcb *)0;      /* end of chain */
        !           142:        dcb.operrsta  = 0;
        !           143:        dcb.devselect = (char)cur.drive;
        !           144:        dcb.trailcnt = (char)(sizeof(trfmt) / sizeof(long));
        !           145:        dcb.trail.fmtrail.addr = (char *)scratch; 
        !           146:        dcb.trail.fmtrail.nsectors = count;
        !           147:        dcb.trail.fmtrail.disk.cylinder = dskaddr->cylinder | flags;
        !           148:        dcb.trail.fmtrail.disk.track = dskaddr->track;
        !           149:        dcb.trail.fmtrail.disk.sector = dskaddr->sector;
        !           150:        dcb.trail.fmtrail.hdr.cylinder = hdraddr->cylinder | flags;
        !           151:        dcb.trail.fmtrail.hdr.track = hdraddr->track;
        !           152:        dcb.trail.fmtrail.hdr.sector = hdraddr->sector;
        !           153:        mdcb.firstdcb = &dcb;
        !           154:        mdcb.vddcstat = 0;
        !           155:        VDDC_ATTENTION(C_INFO.addr, &mdcb, C_INFO.type);
        !           156:        poll((int)(((count+849)/850)+120));
        !           157:        if(vdtimeout <= 0) {
        !           158:                printf(" while formatting sectors.\n");
        !           159:                _longjmp(abort_environ, 1);
        !           160:        }
        !           161: }
        !           162: 

unix.superglobalmegacorp.com

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