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