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

1.1     ! root        1: #include       "vdfmt.h"
        !             2: #include       "cmd.h"
        !             3: 
        !             4: /*
        !             5: **
        !             6: */
        !             7: 
        !             8: correct()
        !             9: {
        !            10:        cur.state = cor;
        !            11:        print("Making corrections to bad sector map on ");
        !            12:        printf("controller %d, drive %d, ", cur.controller, cur.drive);
        !            13:        printf("type %s.\n",CURRENT->type_name);
        !            14: 
        !            15:        indent();
        !            16:        if(is_formatted() == true)
        !            17:                if(read_bad_sector_map() == true) {
        !            18:                        get_corrections();
        !            19:                        sync_bad_sector_map();
        !            20:                }
        !            21:                else 
        !            22:                        print("There is no bad sector map on this drive!\n");
        !            23:        else
        !            24:                print("Drive must be formatted befor corrections are done.\n");
        !            25:        exdent(1);
        !            26: }
        !            27: 
        !            28: 
        !            29: /*
        !            30: **
        !            31: */
        !            32: 
        !            33: cor_help()
        !            34: {
        !            35:        indent();
        !            36:        print("Correction commands are in the following form:\n");
        !            37:        indent();
        !            38:        print("ID              -  Correct module serial number.\n");
        !            39:        print("[a-h] (block)   -  UNIX file system format.\n");
        !            40:        print("SEctor (sector) -  Absolute sector number on disk.\n");
        !            41:        print("Track (track)   -  Absolute disk track number.\n");
        !            42:        print("(cylinder) (head) (offset) (length) - CDC flaw map format.\n");
        !            43:        print("STARt           -  Ends correction process.\n\n");
        !            44:        exdent(2);
        !            45: }
        !            46: 
        !            47: 
        !            48: /*
        !            49: **
        !            50: */
        !            51: 
        !            52: get_corrections()
        !            53: {
        !            54:        extern int      id_help();
        !            55:        char            line[256];
        !            56:        char            *ptr;
        !            57:        bs_entry        entry;
        !            58:        dskadr          dskaddr;
        !            59:        int             max_track;
        !            60: 
        !            61:        dskaddr.cylinder = CURRENT->ncyl - 1;
        !            62:        dskaddr.cylinder = CURRENT->ntrak - 1;
        !            63:        max_track = to_track(dskaddr);
        !            64:        indent();
        !            65:        for(;;) {
        !            66:                print("Location? ");
        !            67:                get_string_cmd(line, cor_help);
        !            68:                if(kill_processes == true)
        !            69:                        break;
        !            70:                if(line[0] == '\0')
        !            71:                        continue;
        !            72:                ptr = line;
        !            73:                trim_white(ptr);
        !            74:                if(!strncmp(ptr, "he", 2) || !strncmp(ptr, "?", 1) ||
        !            75:                    !strncmp(ptr, "stat", 4) || !strncmp(ptr, "!", 1))
        !            76:                        continue;
        !            77:                indent();
        !            78:                if(!strncmp(ptr, "id", 2)) {
        !            79:                        register int    temp;
        !            80: 
        !            81:                        for(;;) {
        !            82:                                print("Pack ID is %d. Change to? ",
        !            83:                                    bad_map->bs_id);
        !            84:                                temp = get_digit_cmd(id_help);
        !            85:                                if(temp > 0)
        !            86:                                        break;
        !            87:                        }
        !            88:                        D_INFO.id = bad_map->bs_id = temp;
        !            89:                }
        !            90:                else if((*ptr  >= 'a') && (*ptr <= 'h')) {
        !            91:                        register char   par = *ptr++;
        !            92:                        register int    block = get_next_digit(ptr);
        !            93:                                
        !            94:                        dskaddr = *from_unix((unsigned char)par,
        !            95:                            (unsigned int)block);
        !            96:                        if((dskaddr.cylinder == -1) || (block == -1)) {
        !            97:                                print("Invalid UNIX block number!\n");
        !            98:                                goto    next;
        !            99:                        }
        !           100:                        print("Confirm block %d on file-system '%c'",block,par);
        !           101:                        if(get_yes_no("") == true) {
        !           102:                                entry=(*C_INFO.code_pos)(dskaddr,HEADER_ERROR);
        !           103:                                remove_user_relocations(entry);
        !           104:                        }
        !           105:                }
        !           106:                else if(*ptr == 't') {
        !           107:                        register int    trk = get_next_digit(ptr);
        !           108: 
        !           109:                        if((trk == -1) || (trk >= max_track)) {
        !           110:                                print("Invalid track number!\n");
        !           111:                                goto    next;
        !           112:                        }
        !           113:                        print("Confirm track %d", trk);
        !           114:                        if(get_yes_no("") == true) {
        !           115:                                dskaddr = *from_track(trk);
        !           116:                                entry=(*C_INFO.code_pos)(dskaddr,HEADER_ERROR);
        !           117:                                remove_user_relocations(entry);
        !           118:                        }
        !           119:                }
        !           120:                else if(!strncmp(ptr, "se", 2)) {
        !           121:                        register int    sec = get_next_digit(ptr);
        !           122: 
        !           123:                        if((sec == -1) ||
        !           124:                            ((CURRENT->nsec*CURRENT->ntrak*CURRENT->ncyl)<sec)){
        !           125:                                print("Invalid sector number!\n");
        !           126:                                goto    next;
        !           127:                        }
        !           128:                        print("Confirm sector %d", sec);
        !           129:                        if(get_yes_no("") == true) {
        !           130:                                dskaddr = *from_sector((unsigned int)sec);
        !           131:                                entry = (*C_INFO.code_pos)(dskaddr, DATA_ERROR);
        !           132:                                remove_user_relocations(entry);
        !           133:                        }
        !           134:                }
        !           135:                else if(is_digit(*ptr)) {
        !           136:                        entry.bs_cyl = get_next_digit(ptr);
        !           137:                        skipdigits(ptr);
        !           138:                        finddigit(ptr);
        !           139:                        entry.bs_trk = get_next_digit(ptr);
        !           140:                        skipdigits(ptr);
        !           141:                        finddigit(ptr);
        !           142:                        entry.bs_offset = get_next_digit(ptr);
        !           143:                        skipdigits(ptr);
        !           144:                        finddigit(ptr);
        !           145:                        entry.bs_length = get_next_digit(ptr);
        !           146:                        if((entry.bs_trk != -1) && (entry.bs_offset != -1) &&
        !           147:                            (entry.bs_length != -1)) {
        !           148:                                if(entry.bs_cyl >= CURRENT->ncyl)
        !           149:                                        print("Cylinder number to high!\n");
        !           150:                                else if(entry.bs_trk >= CURRENT->ntrak)
        !           151:                                        print("Head number to high!\n");
        !           152:                                else if(entry.bs_offset >= CURRENT->nbyte)
        !           153:                                        print("Offset too long!\n");
        !           154:                                else if(entry.bs_length == 0)
        !           155:                                        print("Can't have a 0 length error!\n");
        !           156:                                else {
        !           157:                                        print("Confirm  Cyl %d, ",entry.bs_cyl);
        !           158:                                        printf("Head %d, ", entry.bs_trk);
        !           159:                                        printf("offset %d, ", entry.bs_offset);
        !           160:                                        printf("length %d", entry.bs_length);
        !           161:                                        if(get_yes_no("") == true)
        !           162:                                                remove_user_relocations(entry);
        !           163:                                }
        !           164:                        }
        !           165:                        else
        !           166:                                goto bad;
        !           167:                }
        !           168:                else if(!strncmp(ptr, "star", 4)) {
        !           169:                        exdent(1);
        !           170:                        break;
        !           171:                }
        !           172:                else
        !           173: bad:                   print("What?\n");
        !           174: next:          exdent(1);
        !           175:        }
        !           176:        write_bad_sector_map();
        !           177:        exdent(1);
        !           178: }
        !           179: 

unix.superglobalmegacorp.com

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