Beispiel #1
0
        static unsafe void PrintSeedValues(ref f9sv.ClientReport rpt)
        {
            if (rpt.Seed_ == IntPtr.Zero)
            {
                if (rpt.ResultCode_ == f9sv.ResultCode.NoError)
                { // 「訂閱/查詢/取消訂閱」成功通知.
                  // Console.WriteLine("layout=");
                  // PrintSvLayout(ref rpt);
                }
                else
                { // 「訂閱/查詢/取消訂閱」失敗通知.
                }
                return;
            }
            uint fldidx = rpt.Tab_->FieldCount_;

            if (fldidx <= 0)
            {
                return;
            }
            f9sv.Field *fld = rpt.Tab_->FieldArray_;
            for (;;)
            {
                PrintSvField(fld, ref rpt);
                if (--fldidx <= 0)
                {
                    break;
                }
                Console.Write('|');
                ++fld;
            }
            Console.WriteLine();
        }
Beispiel #2
0
        public unsafe Field *FindField(byte[] pNameBuf)
        {
            void *pName = Marshal.UnsafeAddrOfPinnedArrayElement(pNameBuf, 0).ToPointer();

            f9sv.Field *pfld = this.FieldArray_;
            for (uint count = this.FieldCount_; count > 0; --count)
            {
                if (pfld->Named_.Name_.Length == pNameBuf.Length &&
                    Api.memcmp(pfld->Named_.Name_.Begin_.ToPointer(), pName, pNameBuf.Length) == 0)
                {
                    return(pfld);
                }
                ++pfld;
            }
            return(null);
        }
Beispiel #3
0
        // ---------------------------------------------------------------------
        static unsafe void PrintRequest(f9oms.Layout *pReqLayout, RequestRec req)
        {
            Console.WriteLine($"[{pReqLayout->LayoutId_}] {pReqLayout->LayoutName_}");
            StringBuilder typeId = new StringBuilder();

            for (uint iFld = 0; iFld < pReqLayout->FieldCount_; ++iFld)
            {
                f9sv.Field *fld = &pReqLayout->FieldArray_[iFld];
                typeId.Clear();
                byte *p = fld->TypeId_;
                while (*p != 0)
                {
                    typeId.Append((char)*p++);
                }
                Console.WriteLine($"\t[{iFld,2}] {typeId,-6} {fld->Named_.Name_,-10} = '{req.Fields_[iFld]}'");
            }
        }
Beispiel #4
0
        static unsafe void PrintSvField(f9sv.Field *fld, ref f9sv.ClientReport rpt)
        {
            byte[] buf = new byte[1024];
            uint   sz  = (uint)buf.Length;

            f9sv.Api.GetField_Str(rpt.Seed_, ref *fld, ref buf[0], ref sz);
            string val = Encoding.UTF8.GetString(buf, 0, (int)sz - 1 /*EOS*/);

            Console.Write($"{fld->Named_.Name_}=[{val}]");
            { // 直接取出欄位的數值.
                if (fld->TypeId_[0] == 'U')
                {
                    UInt64 uval = f9sv.Api.ReadUnsigned(rpt.Seed_, ref *fld);
                    if (uval != 0 && uval == fld->NullValue_.Unsigned_)
                    {
                        Console.Write("()");
                    }
                    else
                    {
                        Console.Write($"[{uval}]");
                    }
                }
                else if (fld->TypeId_[0] == 'S')
                {
                    Int64 sval = f9sv.Api.ReadSigned(rpt.Seed_, ref *fld);
                    if (sval != 0 && sval == fld->NullValue_.Signed_)
                    {
                        Console.Write("()");
                    }
                    else
                    {
                        Console.Write($"[{sval}]");
                    }
                }
            }
        }