Beispiel #1
0
        public virtual void put(string key, int data)
        {
            PSFKeyValuePair pair = new PSFKeyValuePair(key, PSF_DATA_TYPE_INT32, 4, data);

            pairList.AddLast(pair);

            sizeDirty   = true;
            tablesDirty = true;
            indexEntryCount++;
        }
Beispiel #2
0
        public virtual void put(string key, sbyte[] data)
        {
            PSFKeyValuePair pair = new PSFKeyValuePair(key, PSF_DATA_TYPE_BINARY, data.Length, data);

            pairList.AddLast(pair);

            sizeDirty   = true;
            tablesDirty = true;
            indexEntryCount++;
        }
Beispiel #3
0
        public virtual void put(string key, string data, int rawlen)
        {
            sbyte[] b = (data.GetBytes(Constants.charset));

            //if (b.Length != data.Length())
            //    System.out.println("put string '" + data + "' size mismatch. UTF-8=" + b.Length + " regular=" + (data.Length() + 1));

            //PSFKeyValuePair pair = new PSFKeyValuePair(key, PSF_DATA_TYPE_STRING, data.Length() + 1, rawlen, data);
            PSFKeyValuePair pair = new PSFKeyValuePair(key, PSF_DATA_TYPE_STRING, b.Length + 1, rawlen, data);

            pairList.AddLast(pair);

            sizeDirty   = true;
            tablesDirty = true;
            indexEntryCount++;
        }
Beispiel #4
0
        /// <summary>
        /// f.position() is undefined after calling this </summary>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void read(ByteBuffer f) throws java.io.IOException
        public virtual void read(ByteBuffer f)
        {
            psfOffset = (int)f.position();

            ident = readUWord(f);
            if (ident != PSF_IDENT)
            {
                Console.WriteLine("Not a valid PSF file (ident=" + string.Format("{0:X8}", ident) + ")");
                return;
            }

            // header
            version          = readUWord(f);    // 0x0101
            keyTableOffset   = readUWord(f);
            valueTableOffset = readUWord(f);
            indexEntryCount  = readUWord(f);

            // index table
            for (int i = 0; i < indexEntryCount; i++)
            {
                PSFKeyValuePair pair = new PSFKeyValuePair();
                pair.read(f);
                pairList.AddLast(pair);
            }

            // key/pairs
            foreach (PSFKeyValuePair pair in pairList)
            {
                f.position(psfOffset + keyTableOffset + pair.keyOffset);
                pair.key = readStringZ(f);

                f.position(psfOffset + valueTableOffset + pair.valueOffset);
                switch (pair.dataType)
                {
                case PSF_DATA_TYPE_BINARY:
                    sbyte[] data = new sbyte[pair.dataSize];
                    f.get(data);
                    pair.data = data;

                    //System.out.println(String.format("offset=%08X key='%s' binary packed [len=%d]",
                    //    keyTableOffset + pair.keyOffset, pair.key, pair.dataSize));
                    break;

                case PSF_DATA_TYPE_STRING:
                    // String may not be in english!
                    sbyte[] s = new sbyte[pair.dataSize];
                    f.get(s);
                    // Strip trailing null character
                    pair.data = StringHelper.NewString(s, 0, s[s.Length - 1] == (sbyte)'\0' ? s.Length - 1 : s.Length, Constants.charset);

                    //System.out.println(String.format("offset=%08X key='%s' string '%s' [len=%d]",
                    //    keyTableOffset + pair.keyOffset, pair.key, pair.data, pair.dataSize));
                    break;

                case PSF_DATA_TYPE_INT32:
                    pair.data = readUWord(f);

                    //System.out.println(String.format("offset=%08X key='%s' int32 %08X %d [len=%d]",
                    //    keyTableOffset + pair.keyOffset, pair.key, pair.data, pair.data, pair.dataSize));
                    break;

                default:
                    Console.WriteLine(string.Format("offset={0:X8} key='{1}' unhandled data type {2:D} [len={3:D}]", keyTableOffset + pair.keyOffset, pair.key, pair.dataType, pair.dataSize));
                    break;
                }
            }

            sizeDirty   = true;
            tablesDirty = false;
            calculateSize();
        }