load.pl

#!/bin/perl
#
# 京ポンブックマークツール編集(~Sys~Bookmark.datを書き換えます)
#
# ~Sys~Bookmark.dat を別フォルダとかにバックアップを取っておいてください。
#
# /Documents and Settings/ログイン名/My Documents/DataLinkKcr/Bookmark/
# フォルダで実行してください。
#
# ~Sys~Bookmark.datからの読み込み
# > perl load.pl 適当なファイル名.txt
#
# エディタで "適当なファイル名.txt" を編集。
#
#「形式」
# 番号‰名前‰URL‰フォルダ番号
# 
# ※ '‰' は消さないでください。
#
# ~Sys~Bookmark.datへの書き込み
# > perl save.pl ↑のファイル名.txt
#
# "京セラユーティリティソフトウェア for AH-K3001V"を立ちあげる

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

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

$KUGIRI = '‰';

# ---------------------------------------------------------------------
# 始めに読みこみ
open(IFILE, "$infile") || die "can not open $infile";
binmode(IFILE);
@inbuf = ();
$filesize = 0;
while(1){
	if(!sysread(IFILE, $inbuf[$filesize], 1)){
		last;
	}			
	$filesize++;
}
close(IFILE);

# ---------------------------------------------------------------------
# 出力
open(OFILE, "> $outfile") || die "can not open $outfile";
$bp = 0x102; # なにか
$bp += 4;    # 個数

while($bp < $filesize){

	# 番号
	$bp += 4; # 0x2c 0x10 0x00 0x00
	printf(OFILE "%d$KUGIRI", unpack("c", $inbuf[$bp++]));
	$bp += 3;

	# 名前
	$sz = unpack("c", $inbuf[$bp++]);
	$name = "";
	for($i = 0; $i < $sz; $i++){
		$name = $name . $inbuf[$bp++];
	}
	printf(OFILE "%s$KUGIRI", $name);

	# URL
	$sz = unpack("c", $inbuf[$bp++]);
	$name = "";
	for($i = 0; $i < $sz; $i++){
		$name = $name . $inbuf[$bp++];
	}
	printf(OFILE "%s$KUGIRI", $name);

	# フォルダ番号
	printf(OFILE "%d\n", unpack("c", $inbuf[$bp++]));
	$bp += 3;

	$bp += 8;
}

close(OFILE);

exit 0;

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;