コード例 #1
0
ファイル: Fasl.cs プロジェクト: xach/jrm-code-project
        public object [] ReadVector(FaslFile file, uint offset)
        {
            uint length = this [offset].Datum;

            object [] vector = new object [length];
            for (uint i = 0; i < length; i++)
            {
                vector [i] = file.ReadObject(offset + 4 + i * 4);
            }
            return(vector);
        }
コード例 #2
0
ファイル: Fasl.cs プロジェクト: xach/jrm-code-project
        public string [] ReadFormals(FaslFile file, uint offset)
        {
            uint length = this [offset].Datum;

            string [] vector = new string [length];
            for (uint i = 0; i < length; i++)
            {
                vector [i] = (string)(file.ReadObject(offset + 4 + i * 4));
            }
            return(vector);
        }
コード例 #3
0
ファイル: Fasl.cs プロジェクト: xach/jrm-code-project
        public double ReadFlonum(FaslFile file, uint offset)
        {
            //EncodedObject header = this [arg0Offset];
            byte b0 = ReadByte(offset + 4);
            byte b1 = ReadByte(offset + 5);
            byte b2 = ReadByte(offset + 6);
            byte b3 = ReadByte(offset + 7);
            byte b4 = ReadByte(offset + 8);
            byte b5 = ReadByte(offset + 9);
            byte b6 = ReadByte(offset + 10);
            byte b7 = ReadByte(offset + 11);

            if ((b0 == 0) &&
                (b1 == 0) &&
                (b2 == 0) &&
                (b3 == 0) &&
                (b4 == 0) &&
                (b5 == 0) &&
                (b6 == 0) &&
                (b7 == 0))
            {
                return(0.0);
            }
            int encodedExponent = (b7 & 0x7F) << 4;

            encodedExponent += (b6 & 0xF0) >> 4;
            long mantissa = (encodedExponent == 0) ? 0 : 1;

            mantissa *= 16;
            mantissa += b6 & 0x0F;
            mantissa *= 256;
            mantissa += b5;
            mantissa *= 256;
            mantissa += b4;
            mantissa *= 256;
            mantissa += b3;
            mantissa *= 256;
            mantissa += b2;
            mantissa *= 256;
            mantissa += b1;
            mantissa *= 256;
            mantissa += b0;
            int exponent = -(1024 + 51);

            exponent += encodedExponent;
            int    sign   = ((b7 & 0x80) == 0) ? 1 : -1;
            double answer = FloatArithmetic.EncodeFloat(sign, exponent, mantissa);

            return(answer);
        }
コード例 #4
0
ファイル: Fasl.cs プロジェクト: xach/jrm-code-project
        static object OldFasload(string pathName)
        {
            FileStream faslStream = null;

            try {
                faslStream = File.OpenRead(pathName);
                FaslFile faslFile = FaslFile.Fasload(new BinaryReader(faslStream));
                return(faslFile.RootObject);
            }
            finally
            {
                if (faslStream != null)
                {
                    faslStream.Close();
                }
            }
        }
コード例 #5
0
ファイル: Fasl.cs プロジェクト: xach/jrm-code-project
        public object ReadBignum(FaslFile file, uint offset)
        {
            //EncodedObject header = this [arg0Offset];
            EncodedObject h1 = this [offset + 4];

            if (h1.Datum == 1)
            {
                EncodedObject w0    = this [offset + 8];
                long          total = w0.ToLong();
                return(total);
            }
            if (h1.Datum == 2)
            {
                EncodedObject w0    = this [offset + 8];
                EncodedObject w1    = this [offset + 12];
                long          total = (w1.ToLong() << 30) + w0.ToLong();
                return(total);
            }
            throw new NotImplementedException();
        }
コード例 #6
0
ファイル: Fasl.cs プロジェクト: NotJRM/jrm-code-project
 public object[] ReadVector(FaslFile file, uint offset)
 {
     uint length = this [offset].Datum;
     object [] vector = new object [length];
     for (uint i = 0; i < length; i++)
         vector [i] = file.ReadObject (offset + 4 + i * 4);
     return vector;
 }
コード例 #7
0
ファイル: Fasl.cs プロジェクト: NotJRM/jrm-code-project
 public string[] ReadFormals(FaslFile file, uint offset)
 {
     uint length = this [offset].Datum;
     string [] vector = new string [length];
     for (uint i = 0; i < length; i++)
         vector [i] = (string) (file.ReadObject (offset + 4 + i * 4));
     return vector;
 }
コード例 #8
0
ファイル: Fasl.cs プロジェクト: NotJRM/jrm-code-project
 public double ReadFlonum(FaslFile file, uint offset)
 {
     //EncodedObject header = this [arg0Offset];
     byte b0 = ReadByte (offset + 4);
     byte b1 = ReadByte (offset + 5);
     byte b2 = ReadByte (offset + 6);
     byte b3 = ReadByte (offset + 7);
     byte b4 = ReadByte (offset + 8);
     byte b5 = ReadByte (offset + 9);
     byte b6 = ReadByte (offset + 10);
     byte b7 = ReadByte (offset + 11);
     if ((b0 == 0) &&
         (b1 == 0) &&
         (b2 == 0) &&
         (b3 == 0) &&
         (b4 == 0) &&
         (b5 == 0) &&
         (b6 == 0) &&
         (b7 == 0))
         return 0.0;
     int encodedExponent = (b7 & 0x7F) << 4;
     encodedExponent += (b6 & 0xF0) >> 4;
     long mantissa = (encodedExponent == 0) ? 0 : 1;
     mantissa *= 16;
     mantissa += b6 & 0x0F;
     mantissa *= 256;
     mantissa += b5;
     mantissa *= 256;
     mantissa += b4;
     mantissa *= 256;
     mantissa += b3;
     mantissa *= 256;
     mantissa += b2;
     mantissa *= 256;
     mantissa += b1;
     mantissa *= 256;
     mantissa += b0;
     int exponent = -(1024 + 51);
     exponent += encodedExponent;
     int sign = ((b7 & 0x80) == 0) ? 1 : -1;
     double answer = FloatArithmetic.EncodeFloat (sign, exponent, mantissa);
     return answer;
 }
コード例 #9
0
ファイル: Fasl.cs プロジェクト: NotJRM/jrm-code-project
 public object ReadBignum(FaslFile file, uint offset)
 {
     //EncodedObject header = this [arg0Offset];
     EncodedObject h1 = this [offset + 4];
     if (h1.Datum == 1)
     {
         EncodedObject w0 = this [offset + 8];
         long total = w0.ToLong ();
         return total;
     }
     if (h1.Datum == 2)
     {
         EncodedObject w0 = this [offset + 8];
         EncodedObject w1 = this [offset + 12];
         long total = (w1.ToLong () << 30) + w0.ToLong ();
         return total;
     }
     throw new NotImplementedException ();
 }