home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 July / Chip_1997-07_cd.bin / sharewar / 95rar / dos / rar155d.exe / rar / TECHNOTE.DOC < prev    next >
Text File  |  1995-11-10  |  10KB  |  369 lines

  1.  
  2.  ██████╗   █████╗  ██████╗
  3.  ██╔══██╗ ██╔══██╗ ██╔══██╗     RAR Version 1.55 - Technische Informationen
  4.  ██████╔╝ ███████║ ██████╔╝     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5.  ██╔══██╗ ██╔══██║ ██╔══██╗
  6.  ██║  ██║ ██║  ██║ ██║  ██║
  7.  ╚═╝  ╚═╝ ╚═╝  ╚═╝ ╚═╝  ╚═╝
  8.  
  9.  ┌────────────────────────────────────────────────────────────────────────┐
  10.  │   DAS HIER BESCHRIEBENE ARCHIVFORMAT IST ERST AB VERSION 1.50 GÜLTIG   │
  11.  └────────────────────────────────────────────────────────────────────────┘
  12.  
  13.  ╔════════════════════════════════════════════════════════════════════════╗
  14.  ║ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ RAR Archivdateien-Format ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
  15.  ╚════════════════════════════════════════════════════════════════════════╝
  16.  
  17.    Archivdateien bestehen aus Blöcken unterschiedlicher Länge. Die Reihen-
  18. folge der Blöcke kann variieren, aber der erste Block ist immer der Mar-
  19. kierungsblock, gefolgt vom Archivkopfblock.
  20.  
  21.    Jeder Block beginnt mit folgenden Feldern:
  22.  
  23. HEAD_CRC       2 bytes     CRC des ganzen Blocks oder eines Teils
  24. HEAD_TYPE      1 byte      Typ des Blocks
  25. HEAD_FLAGS     2 bytes     Flags des Blocks
  26. HEAD_SIZE      2 bytes     Größe des Blocks
  27. ADD_SIZE       4 bytes     optionales Feld: hinzugefügte Blockgröße
  28.  
  29.    ADD_SIZE ist nur vorhanden, wenn (HEAD_FLAGS & 0x8000) != 0
  30.  
  31.    HEAD_SIZE ist die gesamte Blockgröße, wenn (HEAD_FLAGS & 0x8000) == 0
  32. und HEAD_SIZE+ADD_SIZE, wenn Feld ADD_SIZE vorhanden ist - wenn
  33. (HEAD_FLAGS & 0x8000) != 0.
  34.  
  35.    In jedem Block haben die folgenden bits in HEAD_FLAGS dieselbe Bedeutung:
  36.  
  37.   0x4000 - wenn gesetzt, ignorieren ältere RAR-Versionen den Block und ent-
  38.            fernen sie, wenn das Archiv aktualisiert wird.
  39.            wenn nicht gesetzt, wird der Block bei einer Aktualisierung in
  40.            das neue Archiv kopiert;
  41.   0x8000 - wenn gesetzt: das ADD_SIZE-Feld ist vorhanden und die gesamte
  42.            Blockgröße ist HEAD-SIZE+ADD_SIZE.
  43.  
  44.   Blocktypen:
  45.  
  46. HEAD_TYPE=0x72          Markierungsblock
  47. HEAD_TYPE=0x73          Archivkopf
  48. HEAD_TYPE=0x74          Dateikopf
  49. HEAD_TYPE=0x75          Kommentarkopf
  50. HEAD_TYPE=0x76          weitere Informationen
  51.  
  52.    Der Kommentarblock wird nur innerhalb anderer Blöcke verwendet; er ist
  53.    kein eigenständiger Blocktyp.
  54.  
  55.    Die Archivverarbeitung geschieht auf folgende Weise:
  56.  
  57. 1. Lesen und Überprüfen des Markierungsblocks
  58. 2. Lesen des Archivkopfes
  59. 3. Lesen oder Überspringen des HEAD_SIZE-Größe des (MAIN_HEAD) - Bytes
  60. 4. Wenn das Ende des Archivs angezeigt wird, Beenden der Archivverarbeitung,
  61.    sonst Lesen von 7 Bytes in die Felder HEAD_CRC, HEAD_TYPE, HEAD_FLAGS,
  62.    HEAD_SIZE.
  63. 5. Überprüfe HEAD_TYPE.
  64.  
  65.    Für den Fall, daß ein Block gelesen werden muß:
  66.          wenn HEAD_TYPE==0x74
  67.            lese Dateikopf (die ersten 7 Bytes sind schon gelesen)
  68.            lese oder überspringe HEAD_SIZE-Größe des(FILE_HEAD) - Bytes
  69.            lese oder überspringe FILE_SIZE-Bytes
  70.          sonst
  71.            Lesen des entsprechenden HEAD_TYPE-Blocks:
  72.              lese HEAD_SIZE-7 Bytes
  73.                wenn (HEAD_FLAGS & 0x8000)
  74.                  lese ADD_SIZE Bytes
  75.  
  76.    Für den Fall, daß ein Block übersprungen werden muß:
  77.          überspringe HEAD_SIZE-7 Bytes
  78.          wenn (HEAD_FLAGS & 0x8000)
  79.            überspringe ADD_SIZE Bytes
  80.  
  81. 6. Zurück zu Punkt 4.
  82.  
  83.  
  84.  ╔════════════════════════════════════════════════════════════════════════╗
  85.  ║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  Blockformate   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
  86.  ╚════════════════════════════════════════════════════════════════════════╝
  87.  
  88.  
  89.    Markierungsblock ( MARK_HEAD )
  90.  
  91.  
  92. HEAD_CRC        immer 0x6152
  93. 2 bytes
  94.  
  95. HEAD_TYPE       Header-Typ: 0x72
  96. 1 byte
  97.  
  98. HEAD_FLAGS      immer 0x1a21
  99. 2 bytes
  100.  
  101. HEAD_SIZE       Blockgröße = 0x0007
  102. 2 bytes
  103.  
  104.    Der Markierungsblock besteht aus einer festgelegten Bytefolge:
  105.    0x52 0x61 0x72 0x21 0x1a 0x07 0x00
  106.  
  107.  
  108.  
  109.    Archivkopf ( MAIN_HEAD )
  110.  
  111.  
  112. HEAD_CRC        CRC der Felder HEAD_TYPE bis RESERVED2
  113. 2 bytes
  114.  
  115. HEAD_TYPE       Headertyp: 0x73
  116. 1 byte
  117.  
  118. HEAD_FLAGS      Bit-Flags:
  119. 2 bytes
  120.                 0x01    - Attribut des Volumens (Archivvolumen)
  121.                 0x02    - Archivkommentar vorhanden
  122.                 0x04    - Attribut "Archiv gesperrt"
  123.                 0x08    - Attribut "solide" (solides Archiv)
  124.                 0x10    - Unbenutzt
  125.                 0x20    - Authentizitätsinformation vorhanden
  126.  
  127.                 weitere bits in HEAD_FLAGS sind für den internen
  128.                 Gebrauch reserviert
  129.  
  130. HEAD_SIZE       Archivkopf Gesamtgröße einschließlich Archiv,
  131. 2 bytes         Kommentare und weitere zugefügte Felder
  132.  
  133. RESERVED1       reserviert
  134. 2 bytes
  135.  
  136. RESERVED2       reserviert
  137. 4 bytes
  138.  
  139.  
  140. Kommentarblock  vorhanden, wenn (HEAD_FLAGS & 0x02) != 0
  141.  
  142.  
  143. ????            weitere Blöcke, die vielleicht in zukünftigen Versionen
  144.                 Verwendung finden werden
  145.  
  146.  
  147.  
  148.    Dateikopf (Datei im Archiv)
  149.  
  150.  
  151. HEAD_CRC        CRC der Felder HEAD_TYPE bis FILEATTR
  152. 2 bytes         und Dateiname
  153.  
  154. HEAD_TYPE       Headertyp: 0x74
  155. 1 byte
  156.  
  157. HEAD_FLAGS      Bit flags:
  158. 2 bytes
  159.                 0x01 - Fortsetzung aus dem vorherigen Volumen
  160.                 0x02 - Datei wird im nächsten Volumen fortgesetzt
  161.                 0x04 - Datei mit Paßwort verschlüsselt
  162.                 0x08 - Dateikommentar vorhanden
  163.  
  164.                 (HEAD_FLAGS & 0x8000) == 1, weil gesamte Block-
  165.                 größe ist HEAD_SIZE + PACK_SIZE
  166.  
  167. HEAD_SIZE       Gesamtgröße des Dateikopfes einschließlich Dateiname,
  168. 2 bytes         Kommentaren und weiteren hizugefügten Feldern
  169.  
  170. PACK_SIZE       Größe der gepackten Datei
  171. 4 bytes
  172.  
  173. UNP_SIZE        Größe der ungepackten Datei
  174. 4 bytes
  175.  
  176. HOST_OS         Betriebssystem, das beim Komprimieren benutzt wurde:
  177. 1 byte                 0 - MS DOS;
  178.                        1 - OS/2.
  179.  
  180. FILE_CRC        Datei-CRC
  181. 4 bytes
  182.  
  183. FTIME           Datums- und Zeitangabe in Standard - MS DOS - Format
  184. 4 bytes
  185.  
  186. UNP_VER         RAR Version, die zum Entpacken erforderlich ist
  187. 1 byte
  188.  
  189. METHOD          Komprimiermethode
  190. 1 byte
  191.  
  192. NAME_SIZE       Größe des Dateinames
  193. 2 bytes
  194.  
  195. ATTR            Dateiattribute
  196. 4 bytes
  197.  
  198. FILE_NAME       Dateiname - Zeichenkette NAME_LEN Bytegröße
  199.  
  200.  
  201. Kommentarblock  vorhanden, wenn (HEAD_FLAGS & 0x08) != 0
  202.  
  203.  
  204. ????            weitere vorhandene Blöcke - reserviert für
  205.                 künftige Versionen
  206.  
  207.  
  208.  
  209.   Kommentarblock
  210.  
  211.  
  212. HEAD_CRC        CRC der Felder HEAD_TYPE bis COMM_CRC
  213. 2 bytes
  214.  
  215. HEAD_TYPE       Headertyp: 0x75
  216. 1 byte
  217.  
  218. HEAD_FLAGS      Bit flags
  219. 2 bytes
  220.  
  221. HEAD_SIZE       Größe des Kommentarkopfes + Kommentargröße
  222. 2 bytes
  223.  
  224. UNP_SIZE        Größe des Kommentars (unkomprimiert)
  225. 2 bytes
  226.  
  227. UNP_VER         RAR-Version, die zum Entpacken des Kommentars
  228. 1 byte          erforderlich ist
  229.  
  230. METHOD          Packmethode
  231. 1 byte
  232.  
  233. COMM_CRC        Kommentar CRC
  234. 2 bytes
  235.  
  236. COMMENT         Kommentartext
  237.  
  238.  
  239.  
  240.   Extrainfo-Block
  241.  
  242.  
  243. HEAD_CRC        Block-CRC
  244. 2 bytes
  245.  
  246. HEAD_TYPE       Headertyp: 0x76
  247. 1 byte
  248.  
  249. HEAD_FLAGS      Bit flags
  250. 2 bytes
  251.  
  252. HEAD_SIZE       gesamte Blockgröße
  253. 2 bytes
  254.  
  255. INFO            weitere Daten
  256.  
  257.  
  258.   Unterblock
  259.  
  260. Objekte in einem Archiv (Block oder Kopf) können einen Unterblock
  261. mit sich führen. Der Unterblock ist abhängig vom Hauptobjekt.
  262. Unterblöcke können gelöscht oder bei einer Aktualisierung des
  263. Archivs in die neue Version verschoben werden.
  264.  
  265.   Ein Unterblock enthält folgende Felder:
  266.  
  267. HEAD_CRC        Block-CRC
  268. 2 bytes
  269.  
  270. HEAD_TYPE       Headertyp: 0x77
  271. 1 byte
  272.  
  273. HEAD_FLAGS      Bit flags
  274. 2 bytes
  275.                 (HEAD_FLAGS & 0x8000) == 1, weil die gesamte
  276.                 Blockgröße ist HEAD_SIZE + DATA_SIZE
  277.  
  278. HEAD_SIZE       gesamte Blockgröße
  279. 2 bytes
  280.  
  281. DATA_SIZE       gesamte Datengröße
  282. 4 bytes
  283.  
  284. SUB_TYPE        Typus des Unterblocks
  285. 2 bytes
  286.  
  287. RESERVED        muß 0 sein
  288. 1 byte
  289.  
  290. Other           weitere Felder (hängt vom Typ des Unterblocks ab)
  291. fields
  292.  
  293.  
  294.   OS/2 - Unterblock für erweiterte Attribute
  295.  
  296.  
  297. HEAD_CRC        Block CRC
  298. 2 bytes
  299.  
  300. HEAD_TYPE       Headertyp: 0x77
  301. 1 byte
  302.  
  303. HEAD_FLAGS      Bit flags
  304. 2 bytes
  305.                 (HEAD_FLAGS & 0x8000) == 1, weil die gesamte
  306.                 Blockgröße ist HEAD_SIZE + DATA_SIZE
  307.  
  308. HEAD_SIZE       gesamte Blockgröße
  309. 2 bytes
  310.  
  311. DATA_SIZE       gesamte Datengröße (Größe der kompr. erweiterten Attr.)
  312. 4 bytes
  313.  
  314. SUB_TYPE        0x100
  315. 2 bytes
  316.  
  317. RESERVED        muß 0 sein
  318. 1 byte
  319.  
  320. UNP_SIZE        Größe der unkomprimierten erweiterten Attribute
  321. 4 bytes
  322.  
  323. UNP_VER         RAR-Version, die zum Entpacken der Attr. erforderlich ist
  324. 1 byte
  325.  
  326. METHOD          Komprimiermethode
  327. 1 byte
  328.  
  329. EA_CRC          CRC der erweiterten Attribute
  330. 4 bytes
  331.  
  332.  
  333.  ╔════════════════════════════════════════════════════════════════════════╗
  334.  ║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒     Anmerkungen     ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
  335.  ╚════════════════════════════════════════════════════════════════════════╝
  336.  
  337.  
  338.    1. Sollten Felder und Blöcke in späteren Versionen hinzugefügt werden,
  339. so würde ihre Größe in HEAD_SIZE eingetragen.
  340.  
  341.    2. Um SFX-Archive zu verarbeiten, darf das SFX-Modul keine Markierungs-
  342. blöcke im Archiv suchen.
  343. Es gibt keine Markierungsblocksequenz im SFX-Modul selbst (0x52 0x61 0x72
  344. 0x21 0x1a 0x07 0x00).
  345.    Es gibt allerdings eine undokumentierte, aber schnelle Methode, die
  346. hier benutzt wird: Die Signatur 'RSFX' (bytes 0x52 0x53 0x46 0x48) sollte am
  347. offset 0x1C stehen. Dann überprüft RAR, ob ein Markierungsblock in der Datei
  348. vorhanden ist. Daß diese Methode auch in künftigen Versionen Verwendung
  349. finden wird, kann nicht garantiert werden.
  350.  
  351.  
  352.    3. Der CRC wird mit dem Standard-Polynomial 0xEDB88320 berechnet.
  353. Ist die Größe des CRCs kleiner als 4 bytes, werden nur die bytes niederer
  354. Ordnung verwendet.
  355.  
  356.  
  357.    4. Packmethoden-Codierung:
  358.          0x30 - speichern
  359.          0x31 - schnellste Kompression
  360.          0x32 - schnelle Kompression
  361.          0x33 - normale Kompression
  362.          0x34 - gute Kompression
  363.          0x35 - beste Kompression
  364.  
  365.  
  366.    5. Die Nummer der RAR Extraktions-Version ist codiert als 10 * Major
  367.       Version + minor Version.
  368.  
  369.