Beispiel #1
0
        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                return;
            }

            string iniPath  = args[0];
            string database = args[1];

            using (IniFile iniFile = new IniFile
                                     (
                       iniPath,
                       IrbisEncoding.Ansi,
                       false
                                     ))
            {
                ServerIniFile       serverIniFile = new ServerIniFile(iniFile);
                ServerConfiguration configuration
                    = ServerConfiguration.FromIniFile(serverIniFile);
                using (Irbis64Dll irbis = new Irbis64Dll(configuration))
                {
                    irbis.Layout = SpaceLayout.Version2014();

                    irbis.UseDatabase(database);
                    int maxMfn = irbis.GetMaxMfn();
                    Console.WriteLine("Max MFN={0}", maxMfn);

                    for (int mfn = 1; mfn < maxMfn; mfn++)
                    {
                        NativeRecord record;
                        try
                        {
                            irbis.ReadRecord(mfn);
                            record = irbis.GetRecord();
                        }
                        catch
                        {
                            continue;
                        }

                        NativeField[] fields = record.Fields
                                               .Where(field => field.Tag < 4)
                                               .ToArray();
                        foreach (NativeField field in fields)
                        {
                            record.Fields.Remove(field);
                        }
                        if (fields.Length != 0)
                        {
                            Console.WriteLine(mfn);
                            irbis.SetRecord(record);
                            irbis.WriteRecord(true, false);
                        }
                    }
                }
            }
        }
Beispiel #2
0
        static void Test1(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("IrbisInteropTester <irbis_server.ini>");
                return;
            }

            try
            {
                string   fileName = args[0];
                Encoding encoding = IrbisEncoding.Ansi;
                IniFile  iniFile  = new IniFile
                                    (
                    fileName,
                    encoding,
                    false
                                    );
                ServerIniFile serverIni = new ServerIniFile
                                          (
                    iniFile
                                          );

                string systemPath = serverIni.SystemPath
                                    .ThrowIfNull("systemPath not set");
                Console.WriteLine("SystemPath={0}", systemPath);

                string dataPath = serverIni.DataPath
                                  .ThrowIfNull("dataPath not set");
                Console.WriteLine("DataPath={0}", dataPath);

                int interopVersion = Irbis65Dll.InteropVersion();
                Console.WriteLine("InteropVersion={0}", interopVersion);

                StringBuilder dllVersion = new StringBuilder(100);
                Irbis65Dll.IrbisDllVersion(dllVersion, dllVersion.Capacity);
                Console.WriteLine("Irbis64.dll version={0}", dllVersion);

                string uctab   = serverIni.UpperCaseTable;
                string lctab   = string.Empty;
                string actab   = serverIni.AlphabetTablePath;
                string execDir = systemPath;
                string dataDir = dataPath;
                int    retCode = Irbis65Dll.IrbisUatabInit(uctab, lctab, actab, execDir, dataDir);
                Console.WriteLine("IrbisUatabInit={0}", retCode);
                HandleRetCode(retCode);
                //DumpAddress(new IntPtr(retCode), 192);

                string depositPath = Path.GetFullPath
                                     (
                    Path.Combine
                    (
                        dataPath,
                        "Deposit"
                    )
                                     );
                Console.WriteLine("DepositPath={0}", depositPath);
                retCode = Irbis65Dll.IrbisInitDeposit(depositPath);
                Console.WriteLine("IrbisInitDeposit({0})={1}", depositPath, retCode);
                HandleRetCode(retCode);

                Irbis65Dll.IrbisSetOptions(-1, 0, 0);
                Console.WriteLine("IrbisSetOptions(-1,0,0)");

                IntPtr space = Irbis65Dll.IrbisInit();
                Console.WriteLine("IrbisInit=0x{0:X8}", space.ToInt32());
                //DumpAddress(space, 256);

                string mainIni = Path.GetFullPath
                                 (
                    Path.Combine
                    (
                        systemPath,
                        "irbisc.ini"
                    )
                                 );
                Irbis65Dll.IrbisMainIniInit(mainIni);
                Console.WriteLine("IrbisMainIniInit({0})", mainIni);

                string ibisParPath = Path.Combine
                                     (
                    dataPath,
                    "ibis.par"
                                     );
                ParFile ibisPar = ParFile.ParseFile(ibisParPath);
                string  mstPath = ibisPar.MstPath
                                  .ThrowIfNull("mstPath not set");
                mstPath = Path.GetFullPath
                          (
                    Path.Combine(systemPath, mstPath)
                          );
                mstPath = Path.Combine
                          (
                    mstPath,
                    "ibis"
                          );

                retCode = Irbis65Dll.IrbisInitMst(space, mstPath, 1);
                Console.WriteLine("IrbisInitMst({0})={1}", mstPath, retCode);
                HandleRetCode(retCode);

                string termPath = ibisPar.IfpPath
                                  .ThrowIfNull("ibisPar.IfpPath not set");
                termPath = Path.GetFullPath
                           (
                    Path.Combine(systemPath, termPath)
                           );
                termPath = Path.Combine
                           (
                    termPath,
                    "ibis"
                           );
                retCode = Irbis65Dll.IrbisInitTerm(space, termPath);
                Console.WriteLine("IrbisInitTerm({0})={1}", termPath, retCode);
                HandleRetCode(retCode);

                retCode = Irbis65Dll.IrbisIsDbLocked(space);
                Console.WriteLine("IrbisIsDbLocked={0}", retCode);
                HandleRetCode(retCode);

                int maxMfn = Irbis65Dll.IrbisMaxMfn(space);
                Console.WriteLine("MaxMFN={0}", maxMfn);
                HandleRetCode(maxMfn);

                int mfn = 1;
                retCode = Irbis65Dll.IrbisRecord(space, 0, mfn);
                Console.WriteLine("IrbisRecord({0})={1}", mfn, retCode);
                HandleRetCode(retCode);

                mfn = Irbis65Dll.IrbisMfn(space, 0);
                Console.WriteLine("IrbisMfn={0}", mfn);
                HandleRetCode(mfn);

                retCode = Irbis65Dll.IrbisNFields(space, 0);
                Console.WriteLine("IrbisNFields={0}", retCode);
                HandleRetCode(retCode);

                int isLocked     = Irbis65Dll.IrbisIsLocked(space, 0);
                int isDeleted    = Irbis65Dll.IrbisIsDeleted(space, 0);
                int isActualized = Irbis65Dll.IrbisIsActualized(space, 0);
                Console.WriteLine("Locked={0}, Deleted={1}, Actualized={2}",
                                  isLocked, isDeleted, isActualized);
                HandleRetCode(isLocked);
                HandleRetCode(isDeleted);
                HandleRetCode(isActualized);

                isLocked = Irbis65Dll.IrbisIsRealyLocked(space, mfn);
                Console.WriteLine("IrbisIsReallyLocked={0}", isLocked);
                HandleRetCode(isLocked);

                int version = Irbis65Dll.IrbisReadVersion(space, mfn);
                Console.WriteLine("IrbisReadVersion={0}", version);
                HandleRetCode(version);

                //string rawRecordText = Irbis65Dll.GetRawRecordText(space);
                //Console.WriteLine(rawRecordText);

                string pftPath = ibisPar.PftPath
                                 .ThrowIfNull("pftPath not set");
                pftPath = Path.GetFullPath
                          (
                    Path.Combine
                    (
                        systemPath,
                        pftPath
                    )
                          );
                Console.WriteLine("PftPath={0}", pftPath);
                //string briefPath = Path.Combine
                //    (
                //        pftPath,
                //        "brief"
                //    );

                //int retcode = Irbis65Dll.IrbisInitPft(space, "@" + briefPath);
                //Console.WriteLine("IrbisInitPft({0})={1}", briefPath, retcode);
                //HandleRetCode(retcode);

                //Irbis65Dll.IrbisInitUactab(space);
                //Console.WriteLine("IrbisInitUactab");

                //retcode = Irbis65Dll.IrbisFormat
                //    (
                //        space,
                //        0 /*номер полки*/,
                //        1,
                //        0,
                //        32000 /*размер буфера*/,
                //        "IRBIS64"
                //    );
                //Console.WriteLine("IrbisFormat={0}", retcode);
                //HandleRetCode(retcode);

                //string formattedRecord = Irbis65Dll.GetFormattedRecord(space);
                //Console.WriteLine(formattedRecord);

                Encoding utf  = Encoding.UTF8;
                byte[]   term = new byte[512];
                string   text = "K=";
                utf.GetBytes(text, 0, text.Length, term, 0);
                retCode = Irbis65Dll.IrbisFind(space, term);
                Console.WriteLine("IrbisFind={0}", retCode);
                for (int i = 0; i < 10; i++)
                {
                    retCode = Irbis65Dll.IrbisNextTerm(space, term);
                    if (retCode < 0)
                    {
                        break;
                    }
                    text = FromBytes(utf, term);
                    int nposts = Irbis65Dll.IrbisNPosts(space);
                    Console.Write("{0,-8} {1}:", nposts, text);
                    for (int j = 0; j < nposts; j++)
                    {
                        Irbis65Dll.IrbisNextPost(space);
                        mfn = Irbis65Dll.IrbisPosting(space, 1);
                        Console.Write
                        (
                            "{0}{1}",
                            j == 0 ? " " : ", ",
                            mfn
                        );
                    }
                    Console.WriteLine();
                }

                Irbis65Dll.IrbisClose(space);
                Console.WriteLine("Closed");
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }