示例#1
0
            private static FIELD CreateNewField(BinaryReader br, int index, int fieldOffset, int dataOrDataOffset, GffFieldType fieldType)
            {
                FIELD data;

                switch (fieldType)
                {
                case GffFieldType.BYTE:
                    data = new BYTE(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.CHAR:
                    data = new CHAR(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.WORD:
                    data = new WORD(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.SHORT:
                    data = new SHORT(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.DWORD:
                    data = new DWORD(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.INT:
                    data = new INT(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.DWORD64:
                    data = new DWORD64(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.INT64:
                    data = new INT64(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.FLOAT:
                    data = new FLOAT(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.DOUBLE:
                    data = new DOUBLE(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.CExoString:
                    data = new CExoString(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.ResRef:
                    data = new ResRef(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.CExoLocString:
                    data = new CExoLocString(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.VOID:
                    data = new VOID(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.Struct:
                    int lbl_index = br.ReadInt32();
                    data = new STRUCT(br, br.ReadInt32(), lbl_index);
                    break;

                case GffFieldType.List:
                    data = new LIST(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.Orientation:
                    data = new Orientation(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.Vector:
                    data = new Vector(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.StrRef:
                    data = new StrRef(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                default:
                    throw new Exception(string.Format("UNEXPECTED FIELD TYPE \"{0}\", IN STRUCT INDEX \"{1}\"", fieldType, index));
                }

                return(data);
            }
示例#2
0
文件: validity.cs 项目: kwanboy/mcs
        // internal sub-checks

        //-------------------------------------------------
        //  validate_core - validate core internal systems
        //-------------------------------------------------
        void validate_core()
        {
            //throw new emu_unimplemented();
#if false
            // basic system checks
            if (~0 != -1)
            {
                osd_printf_error("Machine must be two's complement\n");
            }
#endif

            byte a = 0xff;
            byte b = (byte)(a + 1);
            if (b > a)
            {
                osd_printf_error("UINT8 must be 8 bits\n");
            }

            // check size of core integer types
            if (sizeof(sbyte) != 1)
            {
                osd_printf_error("INT8 must be 8 bits\n");
            }
            if (sizeof(byte) != 1)
            {
                osd_printf_error("UINT8 must be 8 bits\n");
            }
            if (sizeof(Int16) != 2)
            {
                osd_printf_error("INT16 must be 16 bits\n");
            }
            if (sizeof(UInt16) != 2)
            {
                osd_printf_error("UINT16 must be 16 bits\n");
            }
            if (sizeof(int) != 4)
            {
                osd_printf_error("INT32 must be 32 bits\n");
            }
            if (sizeof(UInt32) != 4)
            {
                osd_printf_error("UINT32 must be 32 bits\n");
            }
            if (sizeof(Int64) != 8)
            {
                osd_printf_error("INT64 must be 64 bits\n");
            }
            if (sizeof(UInt64) != 8)
            {
                osd_printf_error("UINT64 must be 64 bits\n");
            }

            //throw new emu_unimplemented();
#if false
            // check signed right shift
            INT8  a8  = -3;
            INT16 a16 = -3;
            INT32 a32 = -3;
            INT64 a64 = -3;
            if (a8 >> 1 != -2)
            {
                osd_printf_error("INT8 right shift must be arithmetic\n");
            }
            if (a16 >> 1 != -2)
            {
                osd_printf_error("INT16 right shift must be arithmetic\n");
            }
            if (a32 >> 1 != -2)
            {
                osd_printf_error("INT32 right shift must be arithmetic\n");
            }
            if (a64 >> 1 != -2)
            {
                osd_printf_error("INT64 right shift must be arithmetic\n");
            }
#endif

            //throw new emu_unimplemented();
#if false
            // check pointer size
//#ifdef PTR64
            if (sizeof(void *) != 8)
            {
                osdcore_global.m_osdcore.osd_printf_error("PTR64 flag enabled, but was compiled for 32-bit target\n");
            }
//#else
            if (sizeof(void *) != 4)
            {
                osdcore_global.m_osdcore.osd_printf_error("PTR64 flag not enabled, but was compiled for 64-bit target\n");
            }
//#endif
#endif

            //throw new emu_unimplemented();
#if false
            // TODO: check if this is actually working
            // check endianness definition
            UINT16 lsbtest = 0;
            *(UINT8 *)&lsbtest = 0xff;
//#ifdef LSB_FIRST
            if (lsbtest == 0xff00)
            {
                osdcore_global.m_osdcore.osd_printf_error("LSB_FIRST specified, but running on a big-endian machine\n");
            }
//#else
            if (lsbtest == 0x00ff)
            {
                osdcore_global.m_osdcore.osd_printf_error("LSB_FIRST not specified, but running on a little-endian machine\n");
            }
//#endif
#endif
        }