⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 truncfd.pm

📁 linux下从网卡远程启动
💻 PM
字号:
# Perl subroutine to shorten a floppy image by omitting trailing sectors# that are not in use## AFAIK works on FAT12 and FAT16. Won't work on FAT32## 2003.04.28 R. Main.#   Fixes for images with > 65535 sectors## Placed under GNU Public License by Ken Yap, April 2000package TruncFD;use strict;use IO::Seekable;use POSIX qw(ceil);use constant;use constant DEBUG => 0;sub truncfd ($){	my ($file) = @_;	my ($nread, $buffer, $cylinders, $clusters, $fatsectors,		$rootdirsectors, @fatents, $i, $lastclus, $clusstart, $lastsector);		return -1 if (!defined($file) or !open(F, "$file"));	binmode(F);	$nread = read(F, $buffer, 512);	return -1 if (!defined($nread) or $nread < 512);	my ($dummy1, $bytepersect, $sectperclus, $resvsectors, $fats, $rootdirents,		$sectors, $dummy2, $sectperfat, $sectpertrk, $heads, $hidsectors,		$bigsectors, $dummy3, $fstype) =		unpack('a11vCvCvvavvvVVa19a5', $buffer);	if ($sectors == 0) {	    $sectors = $bigsectors;	}	$cylinders = $sectors / ($sectpertrk * $heads);	$clusters = $sectors / $sectperclus;	$fatsectors = $fats * $sectperfat;	$rootdirsectors = POSIX::ceil(($rootdirents * 32) / $bytepersect);	if (DEBUG) {		print STDERR <<EOF;$fstype filesystem:Bytes/sector:		$bytepersectHeads:			$headsCylinders:		$cylindersSectors/cluster:	$sectperclusClusters:		$clustersReserved sectors:	$resvsectorsHidden sectors:		$hidsectorsTotal sectors:		$sectorsSectors/track:		$sectpertrkFATs:			$fatsSectors/FAT:		$sectperfatFAT sectors:		$fatsectorsRoot dir entries:	$rootdirentsRoot dir sectors:	$rootdirsectorsEOF	}	return -1 if (!seek(F, $resvsectors * 512, SEEK_SET));	$nread = read(F, $buffer, $sectperfat * 512);	close(F);	return -1 if (!defined($nread));	# Default assumption is FAT16	# For FAT12	if ($fstype eq 'FAT12') {		$buffer =~ s/(...)/$1\x00/sg;	}	@fatents = unpack("V$clusters", $buffer);	# For FAT12 shift bits 23..12 up 4 bits to make it just like FAT16	if ($fstype eq 'FAT12') {		foreach $i (0..$#fatents) {			$fatents[$i] = ($fatents[$i] & 0xFFF) | ($fatents[$i] >> 12) << 16;		}	}	# Make a string of it	$buffer = pack("L*", @fatents);	# Then extract in little endian format	@fatents = unpack("v*", $buffer);	$#fatents = $clusters if ($clusters < $#fatents);	foreach $i (reverse(0..$#fatents)) {		$lastclus = $i, last if ($fatents[$i] != 0);	}	print STDERR "Last used cluster is $lastclus\n" if (DEBUG);	$clusstart = $resvsectors + $fatsectors + $rootdirsectors;	$lastsector = $clusstart + ($lastclus - 1) * $sectperclus;	print STDERR "Last used sector is $lastsector\n" if (DEBUG);	return ($lastsector * 512);}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -