Changeset 0153c87 in mainline for uspace/dist/src/bithenge/fat.bh
- Timestamp:
- 2012-08-10T20:09:36Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6be4142
- Parents:
- c9797067
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/dist/src/bithenge/fat.bh
rc9797067 r0153c87 32 32 transform u32 = uint32le; 33 33 34 transform fat_dir_entry(disk) = struct { 35 .filename <- known_length(8); 36 .extension <- known_length(3); 37 .attrs <- u8; 38 .flags <- u8; 39 .ctime_fine <- u8; 40 .ctime <- u16; 41 .cdate <- u16; 42 .adate <- u16; 43 .permissions <- u16; 44 .mtime <- u16; 45 .mdate <- u16; 46 .start <- u16; 47 .size <- u32; 48 }; 49 50 transform fat_table(bits, num_clusters) = switch (bits) { 51 12: partial {repeat(num_clusters) { uint_le(12) }} <- bits_le; 52 16: partial {repeat(num_clusters) { u16 }}; 53 32: partial {repeat(num_clusters) { u32 }}; 54 }; 55 34 56 transform fat_super(disk) = struct { 35 57 .jump_instruction <- known_length(3); … … 63 85 }; 64 86 87 .first_root_sector <- (.num_reserved_sectors + .num_fats * .sectors_per_fat); 88 .first_data_sector <- (.first_root_sector + 89 (.num_root_entries * 32 + .bytes_per_sector - 1) // 90 .bytes_per_sector); 91 .num_clusters <- (2 + (.num_sectors - .first_data_sector) // .sectors_per_cluster); 92 .bits <- if (.num_clusters < 4085) { (12) } 93 else { if (.num_clusters < 65525) { (16) } else { (32) } }; 94 95 .fats <- partial(.num_reserved_sectors * .bytes_per_sector) { 96 repeat(.num_fats) { 97 fat_table(.bits, .num_clusters) <- 98 known_length(.sectors_per_fat * .bytes_per_sector) 99 } 100 } <- (disk); 101 102 .root <- partial(.first_root_sector * .bytes_per_sector) { 103 repeat(.num_root_entries) { fat_dir_entry(disk) } } <- (disk); 104 65 105 .boot_signature <- (disk[510,2]); # b"\x55\xaa"; TODO: what if .bytes_per_sector < 512? 66 106 };
Note:
See TracChangeset
for help on using the changeset viewer.