This file is indexed.

/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>
==&gt; /dict/kanji/start を圧縮 &lt;==
./dict/kanji/start.ebz に出力
 1.0% 処理済み (2097152 / 220069888 バイト)
 1.9% 処理済み (4194304 / 220069888 バイト)
 2.9% 処理済み (6291456 / 220069888 バイト)
        : (略)
完了 (220069888 / 220069888 バイト)
220069888 -&gt; 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>
==&gt; /dict/science/data/honmon を圧縮 &lt;==
/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>
==&gt; /dict/kanji/start.ebz を伸長 &lt;==
./kanji/start.ebz に出力
 5.1% 処理済み (4194304 / 82460672 バイト)
10.2% 処理済み (8388608 / 82460672 バイト)
15.3% 処理済み (12582912 / 82460672 バイト)
        : (略)
完了 (82460672 / 82460672 バイト)
25681439 -&gt; 82460672 バイト
</pre>
</blockquote>

<p>
伸長の間、<code>ebunzip</code> は、すでに存在するファイルを上書きしても良いか
どうか確認を求めてきます。
</p>

<blockquote>
<pre>
==&gt; /dict/kanji/start.ebz を伸長 &lt;==
/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>
==&gt; /dict/spanish/spanish/start.ebz &lt;==
154290176 -&gt; 54881862 バイト (35.6%, ebzip 圧縮レベル 0)

==&gt; /dict/spanish/language.ebz &lt;==
compressed: 12288 -&gt; 4121 バイト (33.5%, ebzip 圧縮レベル 0)

==&gt; /dict/spanish/catalog &lt;==
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>