void show_btree_map(Btree *bt, FILE *file) { int i, j; /* setup maps */ for (i=0; i < 2; i++) { fseek(FDATA(i, file), 0L, SEEK_END); mapdata[i].length = ftell(FDATA(i, file)); mapdata[i].blkcount = mapdata[i].length/SIZES(i, block_size); mapdata[i].map = malloc(mapdata[i].blkcount); for (j=0; j < mapdata[i].blkcount; j++) mapdata[i].map[j] = '.'; mapdata[i].map[0] = 'C'; } /* walk the tree */ show_btree_mapr(bt, FDATA(NDX, root_block)); /* trace the free blocks */ for (i=0; i < 2; i++) { DISKOFFSET block; char *pblock; BlockControl *bc; block = FDATA(i, free_block); while(block) { pblock = bt_getblock4read(bt, i, block); if (!pblock) break; mapdata[i].map[block/SIZES(i, block_size)] = 'f'; bc = (BlockControl *) pblock; block = bc -> next; } } /* display the map */ for (i=0; i < 2; i++) { fprintf(file, "%s Block Map:\n ", i == 0 ? "Index" : "Data"); for (j=0; j < 10; j++) fprintf(file, " %d", j); for (j=0; j < mapdata[i].blkcount; j++) { if (j % 10 == 0) { fprintf(file,"\n%4d: ", j); } fprintf(file, " %c", mapdata[i].map[j]); } fprintf(file, "\n"); free(mapdata[i].map); } }
void show_basic(Btree *bt, int f) { DISKOFFSET length, blkcount; BLKSIZE blksize; fprintf(outfile, "File: %s\n", FDATA(f,filename)); blksize = SIZES(f, block_size); fprintf(outfile, " Block size: %d, split: %d, merge: %d\n", blksize, SIZES(f, split), SIZES(f, merge)); if (f == NDX) fprintf(outfile, " Index has %d levels\n", SIZES(f, levels)); fseek(FDATA(f, file), 0L, SEEK_END); length = ftell(FDATA(f,file)); blkcount = length/blksize; fprintf(outfile, " File length %ld (%ld blocks)\n", length, blkcount); if (f == NDX) fprintf(outfile, " Root index block at %ld" " (block no. %ld)\n", FDATA(f, root_block), FDATA(f, root_block)/blksize); fprintf(outfile, " First free block at %ld (block no. %ld)\n", FDATA(f, free_block), FDATA(f, free_block)/blksize); }
/* *display contents of data files * * mode = 0: just display number of pointers at each level * mode = 1: display all data */ void show_btree(Btree *bt, FILE *f, int mode) { outfile = f; if (mode) { show_basic(bt, NDX); show_basic(bt, DAT); } index_blksize = SIZES(NDX, block_size); walk_down(bt, NDX, FDATA(NDX, root_block), 0, mode); }
// pity about the probabilities... static float parray1[1] = { 1.0f}; static float cmds_array[] = {0.2f, 0.6f, 1.0f}; static float eng_array[] = {0.2f, 0.4f, 0.6f, 0.7f, 0.8f, 1.0f}; static float eng_array2[] = {0.2f, 0.4f, 0.6f, 0.7f, 0.8f, 1.0f};//TJL 01/16/04 Multi-engine static float fcr_array[] = {0.3f, 0.65f, 1.0f}; static float flcs_array[] = {0.2f, 0.4f, 0.8f, 1.0f}; static float rudr_array[] = {0.8f, 1.0f}; static float mfds_array[] = {0.5f, 1.0f}; static float sms_array[] = {0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.9f, 1.0f}; #define FDATA(s, type, sprob, aprob) { s, (type_FFunction)(type), (float)sprob, aprob, sizeof(aprob)/sizeof(aprob[0])} //TJL 01/16/04 multi-engine added ENG2 const struct FaultClass::InitFaultData FaultClass::mpFaultData[FaultClass::TotalFaultStrings] = { FDATA("AMUX", bus, 0.1f, parray1), FDATA("BLKR", bus, 0.2f, parray1), FDATA("BMUX", bus, 0.1f, parray1), FDATA("CADC", bus, 0.1f, parray1), FDATA("CMDS", chaf|flar|bus, 0.15f, cmds_array), FDATA("DLNK", bus, 0.5f, parray1), FDATA("DMUX", bus, 0.05, parray1), FDATA("DTE", bus, 0.2f, parray1), FDATA("ENG", a_i|a_b|pfl|efire|hydr|fl_out, 0.4f, eng_array), FDATA("ENG2", a_i|a_b|pfl|efire|hydr|fl_out, 0.4f, eng_array2), FDATA("EPOD", slnt, 0.2f, parray1), FDATA("FCC", bus, 0.2f, parray1), FDATA("FCR", bus|sngl|xmtr, 0.2f, fcr_array), FDATA("FLCS", dmux|dual|sngl|a_p, 0.3f, flcs_array), FDATA("FMS", bus, 0.1f, parray1), FDATA("GEAR", ldgr, 0.5f, parray1),