/* ** Command & Conquer Generals(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ // Copyright (C) Electronic Arts Canada Inc. 1995-2002. All rights reserved. /* ABSTRACT */ /*------------------------------------------------------------------*/ /* */ /* BTree - Binary Tree Codex */ /* */ /* by FrANK G. Barchard, EAC */ /* */ /*------------------------------------------------------------------*/ /* */ /* Version Date SE History: */ /* ------- ---- -- -------- */ /* 1.00 950108 FB BTree codex based on hufftree and ref codex */ /* 1.01 970117 FB encode check index before going off array */ /* 1.02 020716 FB allocate percentage more buffer for large files*/ /* */ /*------------------------------------------------------------------*/ /* */ /* Module Notes: */ /* ------------- */ /* Reentrant */ /* Files: btrread.c btrwrite.c btrcodex.h */ /* */ /*------------------------------------------------------------------*/ /* */ /* Format Notes: */ /* ------------- */ /* BTree is an EA proprietary compression scheme by Frank Barchard. */ /* Each byte is either a raw byte (leaf) or node that points to */ /* 2 other nodes. Each node is either a simple byte or 2 nodes. */ /* The stream is simple bytes and uses bytes for nodes that werent */ /* used in the original file. */ /* */ /* BTREE (fb6) header format: */ /* -------------------------- */ /* */ /* offset bytes notes */ /* id 0 2 id is 46fb */ /* ulen 2 3 total unpacked len */ /* ilen* 2/5 3 unpacked len for this file */ /* clue 5/8 1 */ /* nodes 6/9 1 number of nodes */ /* { */ /* node 7/10+3n 1 */ /* left 8/11+3n 1 */ /* right 9/12+3n 1 */ /* } */ /* */ /* [packed data] */ /* [explicitely packed last byte] */ /* */ /* * present if composite packed */ /* */ /*------------------------------------------------------------------*/ /* END ABSTRACT */ #include #include "codex.h" #include "btreecodex.h" /****************************************************************/ /* Information Functions */ /****************************************************************/ CODEXABOUT *GCALL BTREE_about(void) { CODEXABOUT* info; info = (CODEXABOUT*) galloc(sizeof(CODEXABOUT)); if (info) { memset(info, 0, sizeof(CODEXABOUT)); info->signature = QMAKEID('B','T','R','E'); info->size = sizeof(CODEXABOUT); info->version = 200; /* codex version number (200) */ info->decode = 1; /* supports decoding */ info->encode = 1; /* supports encoding */ info->size32 = 0; /* supports 32 bit size field */ strcpy(info->versionstr, "1.02"); /* version # */ strcpy(info->shorttypestr, "btr"); /* type */ strcpy(info->longtypestr, "BTree"); /* longtype */ } return(info); }