Changeset 2988aec7 in mainline for uspace/dist/src/bithenge/fat.bh
- Timestamp:
- 2012-08-14T03:17:17Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade
- Children:
- 71b0d4d4
- Parents:
- 1b6b76d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/dist/src/bithenge/fat.bh
r1b6b76d r2988aec7 44 44 } <- bits_le <- known_length(1); 45 45 46 transform fat_dir_entry(disk) = struct { 46 transform file_data(data, bits, fat, cluster_size, start) = (in.data) <- struct { 47 .cluster <- (data[(start-2)*cluster_size, cluster_size]); 48 .last_cluster_number <- switch (bits) { 49 12: (488); # 0x00000ff8 50 16: (65528); # 0x0000fff8 51 32: (268435448); # 0x0ffffff8 52 }; 53 .next <- (fat[start]); 54 if (.next == 0 || .next >= .last_cluster_number) { 55 .data <- (.cluster); 56 } else { 57 .rest <- file_data(data, bits, fat, cluster_size, .next); 58 .data <- (.cluster ++ .rest); 59 } 60 }; 61 62 transform fat_dir_entry(data, bits, fat, cluster_size, self_start, parent) = struct { 47 63 .filename <- known_length(8); 48 64 .extension <- known_length(3); … … 58 74 .start <- u16; 59 75 .size <- u32; 76 .size_shown <- if (.size > 32) { (32) } else { (.size) }; 77 78 if (.start != 0 && .start != self_start && .start != parent) { 79 .data 80 <- if (.attrs.subdirectory) { 81 repeat { fat_dir_entry(data, bits, fat, cluster_size, .start, self_start) } 82 } else { 83 (in[0,.size_shown]) 84 } 85 <- if (.size != 0) { (in[0,.size]) } else { (in) } 86 <- file_data(data, bits, fat, cluster_size, .start); 87 } 60 88 }; 61 89 … … 112 140 }; 113 141 142 .cluster_size <- (.super.sectors_per_cluster * .super.bytes_per_sector); 114 143 .first_root_sector <- (.super.num_reserved_sectors + .super.num_fats * .super.sectors_per_fat); 115 144 .first_data_sector <- (.first_root_sector + … … 128 157 129 158 .root <- partial(.first_root_sector * .super.bytes_per_sector) { 130 repeat(.super.num_root_entries) { fat_dir_entry(disk) } } <- (disk); 159 repeat(.super.num_root_entries) { 160 fat_dir_entry(disk[.first_data_sector * .super.bytes_per_sector:], 161 .bits, .fats[0], .cluster_size, 0, 0) 162 } 163 } <- (disk); 131 164 }; 132 165
Note:
See TracChangeset
for help on using the changeset viewer.