Annotation of cci/sys/stand/vdfmt/format.c, revision 1.1.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.