/usr/share/doc/eb-doc/html/ebzip-cat.html is in eb-doc 4.4.3-2build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<link rel="stylesheet" type="text/css" href="ebutils.css">
<link rev="made" href="mailto:m-kasahr@sra.co.jp">
<title>ebzip コマンド</title>
</head>
<body>
<h1><a name="toc">ebzip コマンド</a></h1>
<p>
この文書は EB ライブラリバージョン
4.4.3
に対応しています。
</p>
<p>
目次:
</p>
<ul>
<li><a href="#introduction">はじめに</a>
<li><a href="#action-and-command-name">動作とコマンド名</a>
<li><a href="#invoke-ebzip"><code>ebzip</code> の実行</a>
<li><a href="#compression">圧縮</a>
<ul>
<li><a href="#compression-example-1">圧縮の実行例 (1)</a>
<li><a href="#compression-example-2">圧縮の実行例 (2)</a>
<li><a href="#compression-level">圧縮レベル</a>
<li><a href="#test">テスト</a>
<li><a href="#partial-compression">一部だけの圧縮</a>
<li><a href="#overwrite-old-files">古いファイルの上書き</a>
<li><a href="#compress-compressed-book">圧縮された書籍の圧縮</a>
</ul>
<li><a href="#uncompression">伸長</a>
<ul>
<li><a href="#uncompression-example">伸長の実行例</a>
<li><a href="#options-for-uncompression">伸長のオプション</a>
<li><a href="#uncompress-compressed-book">圧縮された書籍の伸長</a>
</ul>
<li><a href="#information">情報出力</a>
<ul>
<li><a href="#information-example">情報出力の実行例</a>
<li><a href="#options-for-information">情報出力のオプション</a>
</ul>
<li><a href="#delete-a-book">書籍の削除</a>
<li><a href="#summary-of-options"><code>ebzip</code> のオプション一覧</a>
<li><a href="#compression-samples">圧縮結果の例</a>
<li><a href="#compressed-file-format">圧縮ファイルの形式</a>
<ul>
<li><a href="#format-overview">圧縮ファイル形式の概要</a>
<li><a href="#format-data-part">データ部</a>
<li><a href="#format-index-part">インデックス部</a>
<li><a href="#format-header-part">ヘッダ部</a>
</ul>
</ul>
<p>
Copyright (c) 1998-2006 Motoyuki Kasahara
</p>
<!-- ================================================================ -->
<h2><a name="introduction">はじめに</a></h2>
<p>
<code>ebzip</code> は EB ライブラリのアプリケーション用に、CD-ROM 書籍の
圧縮・伸長を行います。
EB ライブラリのアプリケーションは、機能的には何の制限もなく圧縮された
CD-ROM 書籍にアクセスできます (ただし、処理速度はもとの書籍に比べて遅
くなるかも知れません)。
圧縮データ形式は、CPU の種類や、OS、ファイルシステムには依存していませ
んので、<code>ebzip</code> で圧縮したファイルは共用が可能です。
<code>ebzip</code> は EB ライブラリと一緒に配布されています。
</p>
<p>
あなたは、自分の所有する CD-ROM 書籍の使用許諾を守らなくてはいけません。
<code>ebzip</code> はフリーソフトウェアですが、あなたの書籍が自由に使える
ものであるとは限りません。
CD-ROM 書籍の出版社がハードディスク (および他の補助記憶装置) に書籍を
コピーすることを許可していないのであれば、その書籍の圧縮は諦めて下さい。
</p>
<!-- ================================================================ -->
<h2><a name="action-and-command-name">動作とコマンド名</a></h2>
<p>
<code>ebzip</code> は三つの <dfn>動作</dfn> (<dfn>action</dfn>) モードを
備えています。
圧縮 (compression)、伸長 (uncompression) と情報出力 (information) です。
</p>
<ul>
<li>圧縮 (compression)<br>
一冊の CD-ROM 書籍を圧縮します。
<li>伸長 (uncompression)<br>
<code>ebzip</code> で圧縮された、一冊の CD-ROM 書籍を伸長します。
<li>情報出力 (information)<br>
<code>ebzip</code> で圧縮された、一冊の CD-ROM 書籍の圧縮状態に関する
情報を出力します。
</ul>
<p>
<code>ebzip</code> は起動時に、起動時に使用されたコマンド名と
コマンドラインオプションから動作モードを決定します。
<code>ebzip</code> の一回の実行の間で、動作モードが変わることは
ありません。
</p>
<p>
<code>ebzip</code> は <code>ebzip</code>、<code>ebunzip</code>,
<code>ebzipinfo</code> という異なる 3 つのコマンド名でインストール
されます。
(一部の環境では、<code>ebzipinfo</code> は <code>ebzipinf</code>
という名前になっています。)
<p>
<code>ebunzip</code> という名前で起動された場合は、伸長を行います。
<code>ebzipinfo</code> という名前で起動された場合、情報出力を行います。
それ以外の場合は、圧縮を行います。
</p>
<p>
コマンドラインオプションでも、動作モードを決定することができます。
<samp>--compress</samp> (<samp>-z</samp>) で圧縮、<samp>--uncompress</samp>
(<samp>-u</samp>) で伸長、<samp>--information</samp> (<samp>-i</samp>)
で情報出力を行います。
オプションは、起動時のコマンド名より優先します。
次の例では、いずれも動作モードが「伸長」になります。
</p>
<blockquote>
<pre>
ebunzip
ebzip --uncompress
ebzipinfo --uncompress
</pre>
</blockquote>
<p>
遠隔アクセスには対応していませんので、遠隔アクセス識別子は使用できません。
</p>
<blockquote>
<pre>
% ebzip ebnet://localhost/cdrom
ebzip: ebnet には対応していません。
</pre>
</blockquote>
<!-- ================================================================ -->
<h2><a name="invoke-ebzip"><code>ebzip</code> の実行</a></h2>
<p>
<code>ebinfo</code>、<code>ebunzip</code>、<code>ebzipinfo</code> の
一般的な起動方法は次の通りです。
</p>
<blockquote>
<pre>
% ebzip <var>書籍へのパス</var>
% ebunzip <var>書籍へのパス</var>
% ebzipinfo <var>書籍へのパス</var>
</pre>
</blockquote>
<p>
<var>書籍へのパス</var> には、CD-ROM 書籍のトップディレクトリ、つまり
<code>catalog</code> または <code>catalogs</code> ファイルが存在する
ディレクトリを指定します。
複数のパスを書くことはできませんが、以下のように、パスの指定を省くことは
できます。
</p>
<blockquote>
<pre>
% ebzip
% ebunzip
% ebzipinfo
</pre>
</blockquote>
<p>
この場合は、カレントディレクトリ (<code>.</code>) が指定されたものと
判断されます。
</p>
<!-- ================================================================ -->
<h2><a name="compression">圧縮</a></h2>
<p>
<code>ebzip</code> (<code>ebunzip --compress</code>、
<code>ebzipinfo --compress</code> と等価) は CD-ROM 書籍の圧縮を行います。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="compression-example-1">圧縮の実行例 (1)</a></h3>
<p>
この節では、ハードディスクにすでにコピーしてある CD-ROM 書籍を圧縮するには
どうしたらいいかを説明します。
CD-ROM 書籍がすでに <code>/dict</code> にコピーされているものの、まだ圧縮
されていないと仮定します。
この書籍は <code>/dict</code> の下に、次のようなファイルを持っています。
</p>
<blockquote>
<pre>
/dict/catalog
/dict/language
/dict/kanji/start
/dict/english/start
</pre>
</blockquote>
<p>
この書籍を圧縮するには、次のようにします。
</p>
<blockquote>
<pre>
% cd /dict
% ebzip
</pre>
</blockquote>
<p>
これは次のようにしても同じです。
</p>
<blockquote>
<pre>
% ebzip --output-directory /dict /dict
</pre>
</blockquote>
<p>
圧縮には、しばらくかかることがあります。
圧縮の間、<code>ebzip</code> は、次のように状況を知らせるメッセージを出力
します。
</p>
<blockquote>
<pre>
==> /dict/kanji/start を圧縮 <==
./dict/kanji/start.ebz に出力
1.0% 処理済み (2097152 / 220069888 バイト)
1.9% 処理済み (4194304 / 220069888 バイト)
2.9% 処理済み (6291456 / 220069888 バイト)
: (略)
完了 (220069888 / 220069888 バイト)
220069888 -> 78163751 バイト (35.5%)
</pre>
</blockquote>
<p>
圧縮が完了すると、<code>/dict</code> の下のディレクトリ構成が少し変化して
いるのが分かります。
</p>
<blockquote>
<pre>
/dict/catalog
/dict/language.ebz
/dict/kanji/start.ebz
/dict/english/start.ebz
</pre>
</blockquote>
<p>
拡張子 <samp>.ebz</samp> がいくつかのファイル
(<code>/dict/language.ebz</code>、<code>/dict/kanji/start.ebz</code>、
<code>/dict/english/start.ebz</code>) に付いています。
これらが圧縮されたファイルです。
他のファイルは変化していません。
</p>
<p>
<code>ebzip</code> が圧縮するファイルは、
<code>START</code>、<code>HONMON</code>、<code>HONMON2</code>、
<code>HONMONS</code>、<code>LANGUAGE</code> ファイルと <code>GAIJI</code>
ディレクトリにある外字ファイルです。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="compression-example-2">圧縮の実行例 (2)</a></h3>
<p>
この節ではもう一つ別の例として、CD-ROM ディスクのファイルを圧縮し、それ
をハードディスクに置く方法について説明します。
元の CD-ROM 書籍が <code>/cdrom</code> にマウントされ、書籍は
<code>/cdrom</code> の下に次のようなファイルを持っていると仮定します。
</p>
<blockquote>
<pre>
/cdrom/catalog
/cdrom/language
/cdrom/german/start
/cdrom/french/start
/cdrom/italian/start
</pre>
</blockquote>
<p>
この書籍を圧縮し、<code>/dict</code> の下に置くためには、次のコマンドを
実行します。
</p>
<blockquote>
<pre>
% cd /dict
% ebzip --keep /cdrom
</pre>
</blockquote>
<p>
これは次のようにしても同じです。
</p>
<blockquote>
<pre>
% ebzip --keep --output-directory /dict /cdrom
</pre>
</blockquote>
<p>
出力側のディレクトリ <code>/dict</code> は空でも構いませんが、圧縮前に
あらかじめ作っておかなければならないので、注意して下さい。
この例では、<samp>--keep</samp> オプションを使っています。
特に指定しなければ、<code>ebzip</code> は、圧縮後に元のファイルを削除
しますが、<samp>--keep</samp> オプションはこの振る舞いを抑制します。
</p>
<p>
<code>/dict</code> と <code>/cdrom</code> のディレクトリ構成はほとんど
同じですが、<code>/dict</code> の下の圧縮されたファイルには拡張子
<samp>.ebz</samp> が付いています。
</p>
<blockquote>
<pre>
/dict/catalog
/dict/language.ebz
/dict/german/start.ebz
/dict/french/start.ebz
/dict/italian/start.ebz
</pre>
</blockquote>
<p>
中間のディレクトリ <code>/dict/german</code>、<code>/dict/french</code>、
<code>/dict/italian</code> は、もし無ければ <code>ebzip</code> によって
作成されます。
<code>catalog</code> と <code>catalogs</code> は、出力側のディレクトリ
にコピーされます。
EB ライブラリが対応していないファイル、ディレクトリについては、
<code>ebzip</code> は無視します (圧縮もコピーもしません)。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="compression-level">圧縮レベル</a></h3>
<p>
<code>ebzip</code> は、0 〜 5 という 6 つの圧縮レベルを持っています。
圧縮レベル 0 は、圧縮・伸長が最も速いですが、圧縮率は最悪です。
圧縮レベル 5 は、圧縮率が最良ですが、圧縮・伸長は最も遅くなります。
圧縮レベルは、<samp>--level</samp> (<samp>-l</samp>) オプションで設定します。
</p>
<blockquote>
<pre>
% ebzip --level 2 --output-directory /dict /dict
</pre>
</blockquote>
<p>
無指定時のレベルは 0 (最速だが圧縮率は最悪) です。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="test">テスト</a></h3>
<p>
<code>ebzip</code> を <code>--test</code> (<code>-t</code>) オプション付き
で実行すると、<code>ebzip</code> は圧縮したデータを実際のファイルには
書き込まなくなります。
圧縮する前に圧縮後のファイルの大きさを知りたいときに、便利です。
</p>
<blockquote>
<pre>
% ebzip --test /dict /dict
</pre>
</blockquote>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="partial-compression">一部だけの圧縮</a></h3>
<p>
なにも設定しないと、<code>ebzip</code> は書籍一冊の全体を圧縮しますが、
<samp>--subbook</samp> (<samp>-S</samp>) や <samp>--skip-content</samp>
(<samp>-s</samp>) オプションを使うと一部だけを圧縮できます。
</p>
<p>
<samp>--subbook</samp> オプションは引数を一つ取り、そこにカンマ
(<samp>,</samp>) で区切って、圧縮したい副本のディレクトリ名を並べて
書きます。
<code>ebinfo</code> コマンドを用いると、あなたの所有している書籍に
どのような副本が含まれているのかを知ることができます。
</p>
<blockquote>
<pre>
% ebinfo /mnt/cdrom
ディスクの形式: EB/EBG/EBXA/EBXA-C/S-EBXA
文字コード: JIS X 0208
副本の数: 3
副本 1:
題名: 新英和辞典(第四版)
ディレクトリ: english
検索方式: 前方一致 後方一致 条件 メニュー
フォントの大きさ: 16 24 30 48
半角フォントの文字: 0xa121 -- 0xa24e
全角フォントの文字: 0xa321 -- 0xa27e
副本 2:
題名: CD-ROM 仏和辞典(第三版)
ディレクトリ: french
検索方式: 前方一致 後方一致 条件 メニュー
フォントの大きさ: 16 24 30 48
半角フォントの文字:
全角フォントの文字: 0xa321 -- 0xa27e
副本 3:
題名: ポケット独和辞典(第三版)
ディレクトリ: german
検索方式: メニュー
フォントの大きさ: 16 24 30 48
半角フォントの文字:
全角フォントの文字: 0xa321 -- 0xa27e
</pre>
</blockquote>
<p>
(<code>ebinfo</code> コマンドに関しての詳細は、
<a href="ebinfo.html">ebinfo コマンドのマニュアル</a> を参照のこと。)
この例では、3 つの副本が書籍には含まれており、それらのディレクトリ名は
<code>english</code>, <code>french</code>, <code>german</code>
だということが分かります。
</p>
<p>
<code>english</code> と <code>german</code> だけを圧縮するには、次の
ようにします。
</p>
<blockquote>
<pre>
% ebzip --subbook english,french /dict
</pre>
</blockquote>
<p>
ディレクトリ名の大文字、小文字の違いは無視されます。
<samp>--subbook</samp> の引数は、次のように分けて書くこともできます。
</p>
<blockquote>
<pre>
% ebzip --subbook english --subbook french /dict
</pre>
</blockquote>
<p>
残りの副本 (この例では <code>german</code>) のファイルは圧縮されることも
コピーされることもありませんので、この時点ではまだこの書籍に対する圧縮の
作業は完了していません。
この書籍を使用するためには、さらなる操作を行って残りの副本を圧縮するか、
<code>ebrefile</code> コマンドを使って残りの副本を <code>catalog(s)</code>
ファイルの副本登録リストから削除しなくてはなりません
(<code>ebrefile</code> コマンドについて詳しくは、
<a href="ebrefile.html">ebrefile コマンド のマニュアル</a>
の「<code>ebzip</code> との連携」項を参照のこと)。
</p>
<p>
副本の一部ずつを複数回に分けて圧縮する場合、すべての副本で同じ圧縮レベル
を指定する必要はありません。
(たとえば、<code>english</code> と <code>french</code> はレベル 0 で圧縮し、
<code>german</code> はレベル 2 で圧縮する)。
</p>
<p>
<samp>--skip-content</samp> (<samp>-s</samp>) は <samp>--subbook</samp>
に似ていますが、<samp>--skip-content</samp> では無視するファイルの
データ型を指定します。
</p>
<blockquote>
<pre>
% ebzip --skip-content sound,movie --subbook french /dict
</pre>
</blockquote>
<p>
この例では、<code>ebzip</code> は音声と動画ファイルを飛ばします。
現在のところ、<code>ebzip</code> によって認識されるデータ型は、
次の通りです。
</p>
<ul>
<li><code>font</code><br>
外字のフォント
<li><code>graphic</code><br>
画像データ
<li><code>sound</code><br>
音声データ
<li><code>movie</code><br>
動画データ
</ul>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="overwrite-old-files">古いファイルの上書き</a></h3>
<p>
書き込もうとしたファイルがすでに存在するとき、<code>ebzip</code> は
上書きして良いかどうかの確認を求めてきます。
</p>
<blockquote>
<pre>
==> /dict/science/data/honmon を圧縮 <==
/dict/science/data/honmon.ebz に出力
ファイルがすでに存在します: /dict/science/data/honmon.ebz
上書きしますか (はい:y, いいえ:n)?
</pre>
</blockquote>
<p>
<samp>y</samp> か <samp>n</samp> で答えて下さい。
<samp>n</samp> と答えると、<code>ebzip</code> はそのファイルを飛ばして、
次に進みます。
</p>
<p>
<samp>--force-overwrite</samp> オプションを指定すると、<code>ebzip</code>
はすでに存在しているファイルを、確認なしに上書きします。
同様に、<samp>--no-overwrite</samp> オプションを指定すると、
<code>ebzip</code> は確認なしにそのファイルを飛ばして次に進みます。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="compress-compressed-book">圧縮された書籍の圧縮</a></h3>
<p>
S-EBXA および EPWING 規格においても圧縮形式を定義しており、CD-ROM 書籍
にはこれらの圧縮形式を実際に採用しているものがあります。
これらの圧縮形式は、ebzip の圧縮形式とは異なるものです。
</p>
<p>
<code>ebzip</code> は S-EBXA や EPWING 圧縮形式で圧縮された CD-ROM 書籍も
伸長することができますが、圧縮することはできません。
</p>
<p>
<code>ebzip</code> に対して、既に圧縮されている CD-ROM 書籍を圧縮するように
命じると、<code>ebzip</code> はいったん書籍を伸長してから、ebzip の圧縮形式で
圧縮し直します。
</p>
<p>
一般に ebzip の圧縮形式の方が S-EBXA や EPWING の圧縮形式よりも圧縮率が
良好です。
</p>
<!-- ================================================================ -->
<h2><a name="uncompression">伸長</a></h2>
<p>
<code>ebunzip</code> (<code>ebzip --uncompress</code>、
<code>ebzipinfo --uncompress</code> と同じ) は、<code>ebzip</code> で
圧縮した CD-ROM 書籍を伸長します。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="uncompression-example">伸長の実行例</a></h3>
<p>
伸長の処理手順は、圧縮とかなり似ています。
<code>/dict</code> の下に圧縮された書籍が置かれているものと仮定します。
この書籍には、<code>/dict</code> の下に次のようなファイルを持っています。
</p>
<blockquote>
<pre>
/dict/catalog
/dict/language.ebz
/dict/kanji/start.ebz
/dict/english/start.ebz
</pre>
</blockquote>
<p>
この書籍を伸長するには、次のコマンドを実行します。
</p>
<blockquote>
<pre>
% cd /dict
% ebunzip
</pre>
</blockquote>
<p>
これは次のようにしても同じです。
</p>
<blockquote>
<pre>
% ebunzip --output-directory /dict /dict
</pre>
</blockquote>
<p>
伸長には、しばらくかかることがあります。
伸長の間、<code>ebunzip</code> は、次のように状況を知らせるメッセージを出力
します。
</p>
<blockquote>
<pre>
==> /dict/kanji/start.ebz を伸長 <==
./kanji/start.ebz に出力
5.1% 処理済み (4194304 / 82460672 バイト)
10.2% 処理済み (8388608 / 82460672 バイト)
15.3% 処理済み (12582912 / 82460672 バイト)
: (略)
完了 (82460672 / 82460672 バイト)
25681439 -> 82460672 バイト
</pre>
</blockquote>
<p>
伸長の間、<code>ebunzip</code> は、すでに存在するファイルを上書きしても良いか
どうか確認を求めてきます。
</p>
<blockquote>
<pre>
==> /dict/kanji/start.ebz を伸長 <==
/dict/kanji/start に出力
ファイルがすでに存在します: /dict/kanji/start
上書きしますか (はい:y, いいえ:n)?
</pre>
</blockquote>
<p>
伸長が完了すると、<code>/dict</code> の下のディレクトリ構成は少し変化して
います。
</p>
<blockquote>
<pre>
/dict/catalog
/dict/language
/dict/kanji/start
/dict/english/start
</pre>
</blockquote>
<p>
伸長されたファイルはファイル名が変化し、
拡張子 <samp>.ebz</samp> が取り除かれています。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="options-for-uncompression">伸長のオプション</a></h3>
<p>
多くのオプションは、圧縮時と伸長時とで同じ意味を持っています。
</p>
<p>
<samp>--keep</samp> オプションを指定すると、<code>ebunzip</code> は、
伸長した後に圧縮ファイルを削除しなくなります。
</p>
<p>
<samp>--test</samp> オプションを指定すると、<code>ebunzip</code> は伸長
したデータを実際のファイルには書き込みません。
このオプションは、ファイルが正しく圧縮されているのかを確認するときに便利
です
(<samp>--test</samp> オプションについての詳細は、
<a href="#test">「テスト」</a>を参照のこと)。
</p>
<p>
<samp>--subbook</samp> や <samp>--skip-content</samp> オプションを指定
すると、条件に合致したファイルだけしか伸長しません
(これらのオプションについての詳細は、
<a href="#partial-compression">「一部だけの圧縮」</a> を参照のこと)。
</p>
<p>
<samp>--force-overwrite</samp> や <samp>--no-overwrite</samp> オプション
を指定すると、<code>ebunzip</code> は上書きしても良いかどうかの確認なしに、
ファイルを上書きしたり飛ばして次に進んだりします
(<samp>--force-overwrite</samp> と <samp>--no-overwrite</samp> オプション
についての詳細は、
<a href="#overwrite-old-files">「古いファイルの上書き」</a> を参照のこと)。
</p>
<p>
<code>ebunzip</code> は、<samp>--level</samp> オプションを無視します。
伸長時に <samp>--level</samp> オプションを指定する必要はありません。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="uncompress-compressed-book">圧縮された書籍の伸長</a></h3>
<p>
S-EBXA および EPWING 規格でも圧縮形式を定義しており、CD-ROM 書籍には
これらの圧縮形式を実際に採用しているものがあります。
しかし、S-EBXA や EPWINGの圧縮形式は、ebzip の圧縮形式とは異なります。
</p>
<p>
<code>ebzip</code> は S-EBXA や EPWING 圧縮形式で圧縮された CD-ROM 書籍も
伸長することができますが、圧縮することはできません。
</p>
<p>
S-EBXA 形式で圧縮された <code>START</code> ファイルや、EPWING 形式で圧縮
された <code>HONMON2</code>, <code>HONMONS</code> ファイルを伸長すると、
伸長後のファイルには拡張子 <samp>.org</samp> が付加されます
(例: <code>honmon2</code> → <code>honmon2.org</code>)。
</p>
<!-- ================================================================ -->
<h2><a name="information">情報出力</a></h2>
<p>
<code>ebzipinfo</code> (<code>ebzip --information</code>
<code>ebunzip --information</code> と同じ) は CD-ROM 書籍の圧縮状態を出力
します。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="information-example">情報出力の実行例</a></h3>
<p>
<code>/dict</code> にある、圧縮された CD-ROM 書籍の情報を出力するには
次のコマンドを実行します。
<code>/dict</code> に置かれている、圧縮された CD-ROM 書籍の情報を出力
するには、次のようにします。
</p>
<blockquote>
<pre>
% ebzipifo /dict
</pre>
</blockquote>
<p>
<code>ebzipinfo</code> は標準出力に次のような情報を出力します。
</p>
<blockquote>
<pre>
==> /dict/spanish/spanish/start.ebz <==
154290176 -> 54881862 バイト (35.6%, ebzip 圧縮レベル 0)
==> /dict/spanish/language.ebz <==
compressed: 12288 -> 4121 バイト (33.5%, ebzip 圧縮レベル 0)
==> /dict/spanish/catalog <==
2048 バイト (非圧縮)
</pre>
</blockquote>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="options-for-information">情報出力のオプション</a></h3>
<p>
<samp>--subbook</samp> や <samp>--skip-content</samp> オプションを
指定すると、条件に合致したファイルの情報だけを出力します
(これらのオプションについての詳細は、
<a href="#partial-compression">「一部だけの圧縮」</a>を参照のこと)。
</p>
<p>
<code>ebzipinfo</code> は <samp>--force-overwrite</samp>、
<samp>--keep</samp>、<samp>--level</samp>、<samp>--no-overwrite</samp>、
<samp>--output-directory</samp>、<samp>--quiet</samp>、<samp>--silence</samp>、
<samp>--test</samp> オプションを無視します。
</p>
<!-- ================================================================ -->
<h2><a name="delete-a-book">書籍の削除</a></h2>
<p>
<code>ebzip</code> は、ハードディスク上に圧縮した辞書の削除機能は持って
いません。
代わりに <code>rm</code> コマンドを使って下さい。
</p>
<blockquote>
<pre>
% rm -r /dict
</pre>
</blockquote>
<p>
この作業は、注意して行って下さい。
</p>
<!-- ================================================================ -->
<h2><a name="summary-of-options"><code>ebzip</code> のオプション一覧</a></h2>
<p>
<code>ebzip</code> コマンドは、伝統的な一文字オプション名と覚えやすい長い
オプション名の両方を扱うことができます。
長いオプション名を表すには、<samp>-</samp> ではなく <samp>--</samp> を
用います。
オプション名が一意に決まる範囲内で、名前の後方部分を省略することができます。
</p>
<dl>
<dt><code>-f</code></dt>
<dt><code>--force-overwrite</code></dt>
<dd>
確認を求めずに、既に存在しているファイルを上書きします。
このオプションは、情報出力の動作のときや、<samp>--test</samp>
(<samp>-t</samp>) オプションを指定したときは無視されます
(詳しくは、<a href="#overwrite-old-files">「古いファイルの上書き」</a> を
参照のこと)。
<dt><code>-h</code></dt>
<dt><code>--help</code></dt>
<dd>
ヘルプメッセージを標準出力に出力して、終了します。
<dt><code>-i</code></dt>
<dt><code>--information</code></dt>
<dd>
指定された CD-ROM 書籍の圧縮状態を出力します
(詳しくは、 <a href="#information">「情報出力」</a> を参照のこと)。
<dt><code>-k</code></dt>
<dt><code>--keep</code></dt>
<dd>
出力側のファイルを書き込み終わっても、対応する入力側のファイルは
削除しません。
このオプションは、情報出力の動作のときや、<samp>--test</samp>
(<samp>-t</samp>) オプションを指定したときは無視されます
(詳しくは、<a href="#compression-example-2">「圧縮の実行例 (2)」</a>
を参照のこと)。
<dt><code>-l <var>整数</var></code></dt>
<dt><code>--level <var>整数</var></code></dt>
<dd>
圧縮レベルを指定します。
<var>整数</var> は、<samp>0</samp>、<samp>1</samp>、<samp>2</samp>、
<samp>3</samp>、<samp>4</samp>、<samp>5</samp> のいずれかでなくては
いけません。
レベル 0 は、最も速いものの圧縮率は最悪です。
レベル 3 は、最も遅いものの圧縮率は最良です。
指定しなかったときのレベルは 0 です。
このオプションは、圧縮以外の動作のときは無視されます。
(詳しくは、<a href="#compression-level">「圧縮レベル」</a> を参照のこと。)
<dt><code>-n</code></dt>
<dt><code>--no-overwrite</code></dt>
<dd>
既に存在するファイルがあった場合、上書きの確認を求めずに、そのファイル
は飛ばして次のファイルに進みます。
このオプションは、情報出力の動作のときや、<samp>--test</samp>
(<samp>-t</samp>) オプションを指定したときは無視されます。
(詳しくは、<a href="#overwrite-old-files">「古いファイルの上書き」</a>
を参照のこと。)
<dt><code>-o <var>ディレクトリ</var></code></dt>
<dt><code>--output-directory <var>ディレクトリ</var></code></dt>
<dd>
出力側のファイルを置くディレクトリを指定します。
指定しなかったときは、カレントディレクトリ (<samp>.</samp>) になります。
このオプションは、情報出力の動作のときや、<samp>--test</samp>
(<samp>-t</samp>) オプションを指定したときは無視されます
<dt><code>-q</code></dt>
<dt><code>--quiet</code></dt>
<dt><code>--silence</code></dt>
<dd>
情報、警告メッセージを出力しません。
ただし、圧縮・伸長時に出力側のファイルが既に存在していると、
<code>ebzip</code> はその出力側のファイルを上書きして良いかどうか
訊いてきます。
この質問を抑制するには、<samp>--force-overwrite</samp>(<samp>-f</samp>)
または <samp>--no-overwrite</samp>(<samp>-n</samp>) を指定して下さい。
このオプションは、情報出力の動作のときは、無視されます
<dt><code>-s <var>型</var></code></dt>
<dt><code>--skip-content <var>型</var></code></dt>
<dd>
無視するファイルのデータ型を指定します。
<var>型</var> は、データ型の名前をカンマ (<samp>,</samp>) で区切って
並べたものでなくてはいけません。
<code>ebzip</code> が現在のところ認識するデータ型の名前は、
<code>font</code> (外字のフォント)、<code>graphic</code> (画像データ)、
<code>sound</code> (音声データ)、<code>movie</code> (動画データ) です。
指定しなかったときは、どのファイルも無視されません。
<dt><code>-S <var>副本</var></code></dt>
<dt><code>--subbook <var>副本</var></code></dt>
<dd>
圧縮・伸長・情報出力の対象とする副本を指定します。
<var>副本</var> は、副本のディレクトリ名をカンマ (<samp>,</samp>) で
区切って並べたものでなくてはいけません。
指定しなかったときは、すべての副本が対象になります。
(詳しくは <a href="#partial-compression">「一部だけの圧縮」</a> を参照
のこと。)
<dt><code>-t</code></dt>
<dt><code>--test</code></dt>
<dd>
圧縮・伸長したデータを、実際のファイルには書き込みません。
このオプションは、情報出力の動作のときは無視されます。
(詳しくは <a href="#test">「テスト」</a> を参照のこと。)
<dt><code>-u</code></dt>
<dt><code>--uncompress</code></dt>
<dd>
CD-ROM 書籍を伸長します。
(詳しくは <a href="#uncompression">「伸長」</a> を参照のこと。)
<dt><code>-v</code></dt>
<dt><code>--version</code></dt>
<dd>
バージョン番号を標準出力に出力して、終了します。
<dt><code>-z</code></dt>
<dt><code>--compress</code></dt>
<dd>
CD-ROM 書籍を圧縮します。
(詳しくは <a href="#compression">「圧縮」</a> を参照のこと。)
</dl>
<!-- ================================================================ -->
<h2><a name="compression-samples">圧縮結果の例</a></h2>
<p>
次の表は、ある英和・和英辞典 (EBXA) の <code>START</code> ファイルを
圧縮した結果:
</p>
<table summary="英和・和英辞典 (EBXA) の START ファイルの圧縮結果">
<tr><td>圧縮レベル <td> ファイルサイズ <td> 圧縮率</tr>
<tr><td>(元のファイル) <td> 154476544 bytes <td> 100.0%</tr>
<tr><td>レベル 0 <td> 54922039 bytes <td> 35.6%</tr>
<tr><td>レベル 1 <td> 49615791 bytes <td> 32.1%</tr>
<tr><td>レベル 2 <td> 45983464 bytes <td> 29.8%</tr>
<tr><td>レベル 3 <td> 43431397 bytes <td> 28.1%</tr>
<tr><td>(参考: gzip -6) <td> 38712247 bytes <td> 25.0%</tr>
</table>
<p>
ある英々辞典 (EBG) の <code>START</code> ファイルを圧縮した結果:
</p>
<table summary="英々辞典 (EBG) の START ファイルの圧縮結果">
<tr><td>圧縮レベル <td> ファイルサイズ <td> 圧縮率</tr>
<tr><td>(元のファイル) <td> 55511040 bytes <td> 100.0%</tr>
<tr><td>レベル 0 <td> 25866491 bytes <td> 46.6%</tr>
<tr><td>レベル 1 <td> 24419066 bytes <td> 44.0%</tr>
<tr><td>レベル 2 <td> 23453212 bytes <td> 42.2%</tr>
<tr><td>レベル 3 <td> 22748840 bytes <td> 41.0%</tr>
<tr><td>(参考: gzip -6) <td> 20930009 bytes <td> 37.7%</tr>
</table>
<p>
ある国語辞典 (EPWING V1) の <code>HONMON</code> ファイルを圧縮した結果:
</p>
<table summary="国語辞典 (EPWING V1) の HONMON ファイルの圧縮結果">
<tr><td>圧縮レベル <td> ファイルサイズ <td> 圧縮率</tr>
<tr><td>(元のファイル) <td> 23642112 bytes <td> 100.0%</tr>
<tr><td>レベル 0 <td> 9927048 bytes <td> 42.0%</tr>
<tr><td>レベル 1 <td> 9213184 bytes <td> 39.0%</tr>
<tr><td>レベル 2 <td> 8767603 bytes <td> 37.1%</tr>
<tr><td>レベル 3 <td> 8495563 bytes <td> 35.9%</tr>
<tr><td>(参考: gzip -6) <td> 8114658 bytes <td> 34.3%</tr>
</table>
<p>
ある国語辞典 (EPWING V5) の <code>HONMON2</code> ファイルを圧縮した結果:
</p>
<table summary="国語辞典 (EPWING V5) の HONMON2 ファイルの圧縮結果">
<tr><td>圧縮レベル <td> ファイルサイズ <td> 圧縮率</tr>
<tr><td>(非圧縮) <td> 220069888 bytes <td> 100.0%</tr>
<tr><td>(元のファイル) <td> 149139690 bytes <td> 67.8%</tr>
<tr><td>レベル 0 <td> 82973263 bytes <td> 37.7%</tr>
<tr><td>レベル 1 <td> 78163751 bytes <td> 35.5%</tr>
</table>
<p>
ある百科事典 (S-EBXA) の <code>START</code> ファイルを圧縮した結果:
</p>
<table summary="百科事典 (S-EBXA) の START ファイルの圧縮結果">
<tr><td>圧縮レベル <td> file size <td> ratio</tr>
<tr><td>(非圧縮) <td> 225140735 bytes <td> 100.0%</tr>
<tr><td>(元のファイル) <td> 176467968 bytes <td> 78.4%</tr>
<tr><td>レベル 0 <td> 146045331 bytes <td> 64.9%</tr>
<tr><td>レベル 1 <td> 138137218 bytes <td> 61.4%</tr>
</table>
<!-- ================================================================ -->
<h2><a name="compressed-file-format">圧縮ファイルの形式</a></h2>
<p>
この章では、<code>ebzip</code> が扱っている圧縮ファイル形式の詳細について説
明します。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="format-overview">圧縮ファイル形式の概要</a></h3>
<p>
圧縮ファイル形式は次のような特徴を持っています。
</p>
<ul>
<li>CPU の種類、オペレーティングシステム、ファイルシステムに依存しません。
<li>非損失圧縮です。<br>
圧縮ファイルを伸長することによって、元のファイルを復元できます。
<li>6 つの圧縮レベルがあります。<br>
伸長の速さか圧縮率の良さの、いずれかを選ぶことができます。
</ul>
<p>
圧縮されたファイルは、ヘッダ部、インデックス部、およびデータ部から構成
され、この順でファイルに配置されます。
</p>
<blockquote>
<pre>
+--------+-------------+-----------------------------+
| ヘッダ |インデックス | データ |
+--------+-------------+-----------------------------+
EOF
</pre>
</blockquote>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="format-data-part">データ部</a></h3>
<p>
元のファイルは、次の行程で圧縮されます。
</p>
<p>
まず、<code>ebzip</code> は元のファイルを分割します。
個々の <dfn>スライス</dfn> (<dfn>slice</dfn>) は、末尾のものを除けば、
同じ大きさになっています。
</p>
<blockquote>
<pre>
+---------------+---------------+-- --+----------+
| スライス 1 | スライス 2 | ... |スライス N|
+---------------+---------------+-- --+----------+
EOF
</pre>
</blockquote>
<p>
スライス・サイズは、圧縮レベルから決まります
(圧縮レベルについては <a href="#compression-level">「圧縮レベル」</a>を
参照のこと)。
</p>
<table summary="圧縮レベルとスライスの大きさの対応表">
<tr><td>圧縮レベル <td> スライスの大きさ</tr>
<tr><td>0 <td> 2048 バイト</tr>
<tr><td>1 <td> 4096 バイト</tr>
<tr><td>2 <td> 8192 バイト</tr>
<tr><td>3 <td> 16384 バイト</tr>
<tr><td>4 <td> 32768 バイト</tr>
<tr><td>5 <td> 65536 バイト</tr>
</table>
<p>
次に、末尾のスライスがスライス・サイズよりも短かった場合、
<code>ebzip</code> はスライス・サイズと同じになるまで伸ばし、伸ばした
部分に 0x00 を埋めます。
</p>
<blockquote>
<pre>
伸した部分
+---------------+---------------+-- --+---------+-----+
| スライス 1 | スライス 2 | ... | スライス N |
+---------------+---------------+-- --+---------+-----+
EOF
</pre>
</blockquote>
<p>
最後に、<code>ebzip</code> は個々のスライスを、RFC 1951 に記されている
DEFLATE 圧縮データ形式で圧縮します。
おのおののスライスは、他のスライスとは独立して圧縮されます。
圧縮されたスライスのビット数が 8 の倍数でなければ、1 〜 7 ビットを圧
縮されたスライスの末尾に足し、8 の倍数になるようにします。
これにより、圧縮されたそれぞれのスライスはバイトの境界から開始されます。
足されたビットの内容は未定義ですが、このビットは決して使用されません。
</p>
<blockquote>
<pre>
+------------+----------+-- --+--------------+
| 圧縮された |圧縮された| ... | 圧縮された |
| スライス 1 |スライス 2| ... | スライス N |
+------------+----------+-- --+--------------+
</pre>
</blockquote>
<p>
これが圧縮ファイル形式における <dfn>データ部</dfn> になり、圧縮された
スライスから構成されます。
</p>
<p>
末尾のスライスの伸ばした部分は、末尾のスライスの一部として圧縮され
ます。
<code>ebunzip</code> が末尾のスライスを復元するときは、スライスを伸長して
から伸ばした部分を取り除くという作業を行います。
</p>
<p>
圧縮したスライスの大きさが、スライス・サイズよりも大きいか等しいときは、
<code>ebzip</code> はそのスライスの圧縮データを廃棄します。
この場合、<code>ebzip</code> は元のデータをそのスライスの圧縮データとして
代わりに記録します。
</p>
<p>
元のファイルが空だったときは、圧縮ファイルのデータ部はありません。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="format-index-part">インデックス部</a></h3>
<p>
圧縮時に、<code>ebzip</code> は圧縮した個々のスライスの
<dfn>インデックス</dfn> (<dfn>index</dfn>) を記録します。
個々のインデックスは、圧縮ファイルの先頭から圧縮されたスライスの先頭
までの距離を表します。
距離の単位はバイトです。
</p>
<blockquote>
<pre>
+---------+---------+-- --+---------+---------+
|インデッ |インデッ | ........... |インデッ |インデッ |
|クス 1 |クス 2 | ........... |クス N |クス END |
+---------+---------+-- --+---------+---------+
| | | |
+---+ +----+ +------+ +-----------+
V V V V
+------------------+------------------+-- --+--------------+
| 圧縮された | 圧縮された | ... | 圧縮された |
| スライス 1 | スライス 2 | ... | スライス N |
+------------------+------------------+-- --+--------------+
</pre>
</blockquote>
<p>
個々のインデックスは 2 〜 5 バイトの大きさを持ちます。
インデックスの大きさは、元のファイルの大きさで決まります。
</p>
<table summary="元のファイルの大きさとインデックスの大きさの対応表">
<tr><td>元のファイルの大きさ <td> インデックスの大きさ</tr>
<tr><td> 0 〜 65535 バイト <td> 2 バイト</tr>
<tr><td> 65535 〜 16777215 バイト <td> 3 バイト</tr>
<tr><td> 16777216 〜 4294967295 バイト <td> 4 バイト</tr>
<tr><td>4294967296 〜 1099511627775 バイト <td> 5 バイト</tr>
</table>
<p>
インデックス内での、複数バイトからなる数値はすべて、値の大きい方の部分
を表すバイト (most significant byte) が先に来た形で記録されます。
たとえば、0x1234 は次のように記録されます。
最初のバイトは 0x12 となり、次のバイトは 0x34 になります。
</p>
<blockquote>
<pre>
+---------+---------+
|0001 0010|0011 0100|
+---------+---------+
(0x12) (0x34)
</pre>
</blockquote>
<p>
インデックス部は、圧縮されたスライス 1 のインデックスで始まり、その後ろ
に圧縮されたスライス 2 のインデックスが続きます。
圧縮されたスライス N のインデックスの後ろには、「終端」へのインデックス
が置かれます。
このインデックスは、圧縮されたスライス N の末尾の次のバイトへの
インデックスになります。
また、圧縮されたファイルのサイズを示すことにもなります。
</p>
<blockquote>
<pre>
+---------+---------+-- --+---------+---------+
|インデッ |インデッ | ........... |インデッ |インデッ |
|クス 1 |クス 2 | ........... |クス N |クス END |
+---------+---------+-- --+---------+---------+
</pre>
</blockquote>
<p>
圧縮されたスライスの大きさがスライスサイズに等しいときは、そのスライス
のデータは実際には圧縮されていないことを示します。
</p>
<p>
元のファイルが空だったときは、インデックス部はインデックスを一つだけ
持ちます。
このインデックスは圧縮されたファイルの大きさを表します。
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3><a name="format-header-part">ヘッダ部</a></h3>
<p>
ヘッダ部は 22 バイトからなります。
次のフィールドから構成されます。
</p>
<blockquote>
<pre>
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| マジック ID |*1| *2 |ファイルの大きさ | Adler-32 | 修正時刻 |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
*1: zip モードと圧縮レベル
*2: 予約領域
</pre>
</blockquote>
<dl>
<dt><code>マジック ID (5 バイト)</code></dt>
<dd>
0x45, 0x42, 0x5a, 0x69, 0x70 (ASCII 文字列で表すと <samp>EBZip</samp>)
という固定した値を持ちます。
<dt><code>zip モード (MSB 側の 4 ビット)</code></dt>
<dd>
圧縮モードを表します。
元の (非圧縮時の) ファイルの大きさが 4294967295 バイト (= 4Gバイト)
以内のときは 1 (2 進数で 0001)、それより大きいときは 2 (2 進数で 0002)
をセットします。
<p>
ファイルの大きさで値が変わるのは、歴史的な事情によります。
以前の EB Library は圧縮モード 1 しか既定しておらず、また 4GB バイト
を超えるファイルを扱えませんでした。
4G バイトを超えるファイルを扱えるように EB Library を改良した際に、
「4G バイトを超えたら、圧縮モードは 2 にセットする」というルールを
新たに設けました。
これにより、以前の EB Library で 4GB バイトを超えたファイルを扱おう
とすると、非対応の圧縮モードとみなされ、エラーが発生するようになって
います。
</p>
<dt><code>圧縮レベル (LSB 側の 4 ビット)</code></dt>
<dd>
圧縮レベルを表します。
<dt><code>予約領域 (2 バイト)</code></dt>
<dd>
予約されていますが、使われていません。
0x0000 で埋められます。
<dt><code>ファイルの大きさ (6 バイト)</code></dt>
<dd>
元の (非圧縮時の) ファイルの大きさを記録しています。
<dt><code>Adler-32 (4 バイト)</code></dt>
<dd>
RFC 1950 に記されている Adler-32 というアルゴリズムを用いて計算した、
非圧縮データのチェックサムの値です。
<dt><code>修正時刻 (4 バイト)</code></dt>
<dd>
元のファイルの最終修正時刻です。
グリニッジ標準時の 1970 年 1 月 1 日 0 時 0 分 0 秒からの経過秒数で
表します。
</dl>
<p>
<code>zip モード</code> と <code>圧縮レベル</code> は、両方ともヘッダの
5 バイト目に入ります。
<code>zip モード</code> は、値の最も大きい部分を表すビット
(most significant bit) を含み、<code>圧縮レベル</code> は最も小さい部分を
表すビット (least significant bit) を含んでいます。
<code>zip モード</code> が 1 で、<code>圧縮レベル</code> が 2 なら、
ヘッダの 5 バイト目は 0x12 になります。
</p>
<blockquote>
<pre>
MSB LSB
+---+---+---+---+---+---+---+---+
| 0 0 0 1 0 0 1 0 | = 0x12
+---+---+---+---+---+---+---+---+
(zip モード) | (圧縮レベル)
</pre>
</blockquote>
<p>
ヘッダ内での、複数バイトからなる数値はすべて、値の大きい方の部分
を表すバイト (most significant byte) が先に来た形で記録されます。
</p>
</body>
</html>
|