This page describes the compressed resource file format introduced
            from Symbian OS v7.0. 
         
         
         This format compresses, for those cases where actual benefit is
            yielded by compressing, Unicode text-strings in the resource data by using the
            Standard Compression Scheme for Unicode, described in 
            http://www.unicode.org/unicode/reports/tr6/tr6-3.2.html.
            
         
         
         Resource files in this format are generated by the resource compiler
            from Symbian OS v7.0.
         
         
         
            
               
                  
                     
                        | 
                           
                            Number of bytes 
                           
                         | 
                        
                           
                            Description 
                           
                         | 
                      
                     
                        | 
                           
                            16 
                           
                         | 
                        
                           
                            These bytes store the resource files UIDs.  
                           
                           The first twelve bytes consist of three four-byte integers (in
                              little-endian byte order) followed by a four-byte CRC checksum generated from
                              those three integers. 
                            
                           
                           The first UID is always 0x101f4a6b.  
                           
                           The second and third UIDs can be specified on
                              rcomp's command-line. By default, the second UID is zero and
                              the third UID is the resource files offset, i.e. the
                              twenty-bit integer generated from the resource files name. These twenty
                              bits are stored in the least significant twenty bits of the third UID; the most
                              significant twelve bits are all zero.
                            
                           
                         | 
                      
                     
                        | 
                           
                            1 
                           
                         | 
                        
                           
                            This byte stores flags. Currently, there is only one flag
                              defined, which is the lowest bit of the byte (0x01). This flag indicates
                              whether the third UID is actually the resource files
                              offset (see the row above). The bit is set to non-zero if it
                              is, and zero if it is not.
                            
                           
                         | 
                      
                     
                        | 
                           
                            2 
                           
                         | 
                        
                           
                            This two-byte integer (in little-endian byte order) stores the
                              size in bytes of the largest resource in the file (that is, the size when
                              uncompressed).
                            
                           
                         | 
                      
                     
                        | 
                           
                            number_of_resources/8 (rounded up to the nearest whole
                              number)
                            
                           
                         | 
                        
                           
                            This is a bit-array (one bit for each resource) storing which
                              resources contain compressed Unicode. The least significant bit of the first
                              byte corresponds to the first resource, the next-to-least significant bit of
                              the first byte corresponds to the second resource, etc. A bit being set to
                              non-zero indicates that the corresponding resource contains compressed Unicode,
                              a zero bit indicates that it does not contain compressed Unicode.
                            
                           
                         | 
                      
                     
                        | 
                           
                            [any] 
                           
                         | 
                        
                           
                            This contains the data for all the resources stored in order,
                              one after another with no byte-padding between them. The format of the data for
                              each resource is in one of two possible formats depending on whether the
                              resource contains compressed Unicode. The bit-array described in the row above
                              indicates which resources contain compressed Unicode. Note that resources in
                              either of these two formats may contain uncompressed Unicode: this
                              is because compressing Unicode using the Standard Compression Scheme for
                              Unicode can, in certain conditions, yield larger output than input, hence such
                              Unicode text-strings will not be compressed as it would not be
                              beneficial. Extra padding bytes (arbitrarily 0xab) are inserted in front of any
                              uncompressed Unicode text-string that would otherwise not be aligned on a
                              two-byte boundary relative to the start of that resources data, once
                              the resource has been uncompressed.
                            
                           
                           Resources not containing compressed
                                 Unicode: 
                           
                           The binary data of these resources is laid out exactly as
                              specified in the resource definition (although note the comment about padding
                              bytes above).
                            
                           
                           Resources containing compressed Unicode: 
                           
                           The binary data of these resources is split up into one or more
                              sequences, or runs, alternating between compressed Unicode
                              and other material. 
                            
                           
                           Each run is preceded by an integer containing the length in
                              bytes of the run (not including the byte(s) it occupies itself). The run-length
                              occupies a single byte if it is less than 128, otherwise it occupies two bytes
                              (in little-endian byte order), with the most significant bit of the first byte
                              set to non-zero to indicate that the run-length occupies two bytes. Only the
                              length of the first run may be zero (which would be the case if the resource
                              does not start with compressed Unicode).
                            
                           
                         | 
                      
                     
                        | 
                           
                            (number_of_resources+1)*2 
                           
                         | 
                        
                           
                            This is the resource index, which is a series of two-byte
                              integers (in little-endian byte order), one for each resource in the resource
                              file, each storing the file-position of that resources data (see row
                              immediately above). 
                            
                           
                           This is followed by a two-byte integer (in little-endian byte
                              order), which is the file-position one byte past the end of the last
                              resources data. This is so that working out the length of a
                              resources data is trivially done by subtracting the file-position
                              stored in that resources index-entry from the file-position in the next
                              index-entry. 
                            
                           
                           This last entry in the resource index, which stores the
                              file-position one byte past the end of the last resources data, can
                              also be thought of as storing the file-position of the start of the resource
                              index.
                            
                           
                         | 
                      
                   
                |