int dumpcg(void) { time_t cgtime; off_t cur; int i, j; printf("\ncg %d:\n", disk.d_lcg); cur = fsbtodb(&afs, cgtod(&afs, disk.d_lcg)) * disk.d_bsize; switch (disk.d_ufs) { case 2: cgtime = acg.cg_time; printf("magic\t%x\ttell\t%jx\ttime\t%s", acg.cg_magic, (intmax_t)cur, ctime(&cgtime)); printf("cgx\t%d\tndblk\t%d\tniblk\t%d\tinitiblk %d\tunrefs %d\n", acg.cg_cgx, acg.cg_ndblk, acg.cg_niblk, acg.cg_initediblk, acg.cg_unrefs); break; case 1: cgtime = acg.cg_old_time; printf("magic\t%x\ttell\t%jx\ttime\t%s", acg.cg_magic, (intmax_t)cur, ctime(&cgtime)); printf("cgx\t%d\tncyl\t%d\tniblk\t%d\tndblk\t%d\n", acg.cg_cgx, acg.cg_old_ncyl, acg.cg_old_niblk, acg.cg_ndblk); break; default: break; } printf("nbfree\t%d\tndir\t%d\tnifree\t%d\tnffree\t%d\n", acg.cg_cs.cs_nbfree, acg.cg_cs.cs_ndir, acg.cg_cs.cs_nifree, acg.cg_cs.cs_nffree); printf("rotor\t%d\tirotor\t%d\tfrotor\t%d\nfrsum", acg.cg_rotor, acg.cg_irotor, acg.cg_frotor); for (i = 1, j = 0; i < afs.fs_frag; i++) { printf("\t%d", acg.cg_frsum[i]); j += i * acg.cg_frsum[i]; } printf("\nsum of frsum: %d", j); if (afs.fs_contigsumsize > 0) { for (i = 1; i < afs.fs_contigsumsize; i++) { if ((i - 1) % 8 == 0) printf("\nclusters %d-%d:", i, afs.fs_contigsumsize - 1 < i + 7 ? afs.fs_contigsumsize - 1 : i + 7); printf("\t%d", cg_clustersum(&acg)[i]); } printf("\nclusters size %d and over: %d\n", afs.fs_contigsumsize, cg_clustersum(&acg)[afs.fs_contigsumsize]); printf("clusters free:\t"); pbits(cg_clustersfree(&acg), acg.cg_nclusterblks); } else printf("\n"); printf("inodes used:\t"); pbits(cg_inosused(&acg), afs.fs_ipg); printf("blks free:\t"); pbits(cg_blksfree(&acg), afs.fs_fpg); return (0); }
/* * Convert string to number and display in various formats. * If s is NULL, then use the number farg instead. If the input * string cannot be interpreted, return non-zero, or zero on success. */ int reprint_number (char *s, Float farg) { ieeefloat F; if (s == NULL) F.f = farg; else { if (s[0]=='0' && s[1]=='x') { /* it's an integer */ if (parse_int (s, F.i)) { printf ("can't parse integer <%s>\n", s); return 1; } } else { char *endptr; errno = 0; F.f = strtod (s, &endptr); if (errno != 0) return 1; for (; isspace(*endptr); endptr++) ; if (*endptr != '\0') return 1; } } #if DOUBLEPRECISION /* 49 bits of precision is 49*log_10(2)=14.75 dec.digits of precision */ printf ("double %24.16e\n hex %08x %08x\n", F.f, F.i[0], F.i[1]); #else printf (" float %12.7e\n hex %08x\n", F.f, F.i[0]); #endif printf ("binary %s ", pbits (F.ieee.s, 1)); printf ("%s ", pbits (F.ieee.e, EXPONENTWIDTH)); printf ("%s ", pbits (F.ieee.m, MANTISSAWIDTH)); #if DOUBLEPRECISION printf ("%s", pbits (F.ieee.m2, 32)); #endif printf ("\n type "); /* now print out what type of number it is */ if (F.ieee.e == 0) if (ZEROMANTISSA(F)) printf ("%s zero", (F.ieee.s ? "Negative" : "Positive")); else printf ("Subnormal"); else if (F.ieee.e == FULLEXPONENT) if (ZEROMANTISSA(F)) printf ("%s infinity", (F.ieee.s ? "Negative" : "Positive")); else printf ("%s NaN", (F.ieee.m & (1<<(MANTISSAWIDTH-1)) ? "Quiet" : "Signalling")); else printf ("Normal"); /* test the pis??? routines */ printf (" (%c%c%c%c)\n", (pisnan (F.f) ? 'N' : 'n'), (pisinf (F.f) ? 'I' : 'i'), (pisfinite (F.f) ? 'F' : 'f'), (pisnormal (F.f) ? 'L' : 'l')); return 0; }