save.pl

#!/bin/perl

if($#ARGV != 0){
	print "usage : perl $0 入力txt\n";
	exit 1;
}

# 定数
$infile = $ARGV[0];
$outfile = "~Sys~Bookmark.dat";


# ---------------------------------------------------------------------
# ヘッダ読みこみ
open(IFILE, "$outfile") || die "can not open $outfile";
binmode(IFILE);
@inbuf = ();
for($i = 0; $i < 0x102+4; $i++){
	if(!sysread(IFILE, $inbuf[$i], 1)){
		die "$outfile error";
		exit 1;
	}			
}
close(IFILE);

# ---------------------------------------------------------------------
# 出力
open(IFILE, "$infile") || die "can not open $infile";
open(OFILE, "> $outfile") || die "can not open $outfile";
binmode(OFILE);
for($i = 0; $i < 0x102+4; $i++){
	syswrite(OFILE, $inbuf[$i], 1);
}
$kosuu = 0;
while(){
	if($_ eq ""){
		last;
	}
	@w = split(/‰/, $_);
	syswrite(OFILE, pack("c", 0x2c), 1);
	syswrite(OFILE, pack("c", 0x01), 1);
	syswrite(OFILE, pack("c", 0x00), 1);
	syswrite(OFILE, pack("c", 0x00), 1);
	syswrite(OFILE, pack("c", $w[0]), 1);
	syswrite(OFILE, pack("c", 0x00), 1);
	syswrite(OFILE, pack("c", 0x00), 1);
	syswrite(OFILE, pack("c", 0x00), 1);

	$len = length($w[1]);
	syswrite(OFILE, pack("c", $len), 1);
	syswrite(OFILE, $w[1], $len);

	$len = length($w[2]);
	syswrite(OFILE, pack("c", $len), 1);
	syswrite(OFILE, $w[2], $len);

	syswrite(OFILE, pack("c", $w[3]), 1);
	syswrite(OFILE, pack("c", 0x00), 1);
	syswrite(OFILE, pack("c", 0x00), 1);
	syswrite(OFILE, pack("c", 0x00), 1);
	syswrite(OFILE, pack("c", 0xFF), 1);
	syswrite(OFILE, pack("c", 0xFF), 1);
	syswrite(OFILE, pack("c", 0xFF), 1);
	syswrite(OFILE, pack("c", 0xFF), 1);
	syswrite(OFILE, pack("c", 0x00), 1);
	syswrite(OFILE, pack("c", 0x00), 1);
	syswrite(OFILE, pack("c", 0x00), 1);
	syswrite(OFILE, pack("c", 0x00), 1);

	$kosuu++;
}
close(IFILE);
close(OFILE);

# ---------------------------------------------------------------------
# 個数出力
open(OFILE, "+< $outfile") || die "can not open $outfile";
binmode(OFILE);
seek(OFILE, 0x102, 0);
syswrite(OFILE, pack("c", $kosuu), 1);
close(OFILE);

exit 0;