Changes in tools/mkfat.py [f4057f5:c4702798] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/mkfat.py
rf4057f5 rc4702798 27 27 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 28 # 29 30 29 """ 31 30 FAT creator … … 46 45 return size 47 46 48 return (( size // alignment) + 1) * alignment47 return (((size / alignment) + 1) * alignment) 49 48 50 49 def subtree_size(root, cluster_size, dirent_size): … … 79 78 first = 0 80 79 81 inf = open(path, "rb")80 inf = file(path, "r") 82 81 rd = 0; 83 82 while (rd < size): … … 92 91 prev = empty_cluster 93 92 94 data = bytes(inf.read(cluster_size));93 data = inf.read(cluster_size); 95 94 outf.seek(data_start + (empty_cluster - reserved_clusters) * cluster_size) 96 95 outf.write(data) … … 120 119 prev = empty_cluster 121 120 122 data = bytes()121 data = '' 123 122 data_len = 0 124 123 while ((i < length) and (data_len < cluster_size)): … … 343 342 def usage(prname): 344 343 "Print usage syntax" 345 print (prname + " <EXTRA_BYTES> <PATH> <IMAGE>")344 print prname + " <PATH> <IMAGE>" 346 345 347 346 def main(): 348 if (len(sys.argv) < 4):347 if (len(sys.argv) < 3): 349 348 usage(sys.argv[0]) 350 349 return 351 350 352 if (not sys.argv[1].isdigit()): 353 print("<EXTRA_BYTES> must be a number") 354 return 355 356 extra_bytes = int(sys.argv[1]) 357 358 path = os.path.abspath(sys.argv[2]) 351 path = os.path.abspath(sys.argv[1]) 359 352 if (not os.path.isdir(path)): 360 print ("<PATH> must be a directory")353 print "<PATH> must be a directory" 361 354 return 362 355 … … 370 363 reserved_clusters = 2 371 364 372 # Make sure the filesystem is large enough for FAT16373 size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size + extra_bytes374 while (size / /cluster_size < fat16_clusters):365 # Make sure the filesystem is large enought for FAT16 366 size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size 367 while (size / cluster_size < fat16_clusters): 375 368 if (cluster_size > sector_size): 376 cluster_size = cluster_size //2377 size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size + extra_bytes369 cluster_size /= 2 370 size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size 378 371 else: 379 372 size = fat16_clusters * cluster_size + reserved_clusters * cluster_size … … 381 374 root_size = align_up(root_entries(path) * dirent_size, cluster_size) 382 375 383 fat_size = align_up(align_up(size, cluster_size) / /cluster_size * fatent_size, sector_size)384 385 sectors = (cluster_size + fat_count * fat_size + root_size + size) / /sector_size376 fat_size = align_up(align_up(size, cluster_size) / cluster_size * fatent_size, sector_size) 377 378 sectors = (cluster_size + fat_count * fat_size + root_size + size) / sector_size 386 379 root_start = cluster_size + fat_count * fat_size 387 380 data_start = root_start + root_size 388 381 389 outf = open(sys.argv[3], "wb")382 outf = file(sys.argv[2], "w") 390 383 391 384 boot_sector = xstruct.create(BOOT_SECTOR) 392 385 boot_sector.jmp = [0xEB, 0x3C, 0x90] 393 boot_sector.oem = b'MSDOS5.0'386 boot_sector.oem = "MSDOS5.0" 394 387 boot_sector.sector = sector_size 395 boot_sector.cluster = cluster_size / /sector_size396 boot_sector.reserved = cluster_size / /sector_size388 boot_sector.cluster = cluster_size / sector_size 389 boot_sector.reserved = cluster_size / sector_size 397 390 boot_sector.fats = fat_count 398 boot_sector.rootdir = root_size / /dirent_size391 boot_sector.rootdir = root_size / dirent_size 399 392 if (sectors <= 65535): 400 393 boot_sector.sectors = sectors … … 402 395 boot_sector.sectors = 0 403 396 boot_sector.descriptor = 0xF8 404 boot_sector.fat_sectors = fat_size / /sector_size397 boot_sector.fat_sectors = fat_size / sector_size 405 398 boot_sector.track_sectors = 63 406 399 boot_sector.heads = 6 … … 414 407 boot_sector.extboot_signature = 0x29 415 408 boot_sector.serial = random.randint(0, 0x7fffffff) 416 boot_sector.label = b'HELENOS'417 boot_sector.fstype = b'FAT16 '409 boot_sector.label = "HELENOS" 410 boot_sector.fstype = "FAT16 " 418 411 boot_sector.boot_signature = [0x55, 0xAA] 419 412 … … 423 416 424 417 # Reserved sectors 425 for i in range(1, cluster_size / /sector_size):418 for i in range(1, cluster_size / sector_size): 426 419 outf.write(empty_sector.pack()) 427 420 428 421 # FAT tables 429 422 for i in range(0, fat_count): 430 for j in range(0, fat_size / /sector_size):423 for j in range(0, fat_size / sector_size): 431 424 outf.write(empty_sector.pack()) 432 425 433 426 # Root directory 434 for i in range(0, root_size / /sector_size):427 for i in range(0, root_size / sector_size): 435 428 outf.write(empty_sector.pack()) 436 429 437 430 # Data 438 for i in range(0, size / /sector_size):431 for i in range(0, size / sector_size): 439 432 outf.write(empty_sector.pack()) 440 433 441 fat = array.array('L', [0] * (fat_size / /fatent_size))434 fat = array.array('L', [0] * (fat_size / fatent_size)) 442 435 fat[0] = 0xfff8 443 436 fat[1] = 0xffff … … 449 442 for i in range(0, fat_count): 450 443 outf.seek(cluster_size + i * fat_size) 451 for j in range(0, fat_size / /fatent_size):444 for j in range(0, fat_size / fatent_size): 452 445 fat_entry.next = fat[j] 453 446 outf.write(fat_entry.pack())
Note:
See TracChangeset
for help on using the changeset viewer.