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);
}
Ejemplo n.º 4
0
// 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),