public static ProgramDTO ReadOneProgram(ushort focasLibHandle, int progromToRead, short programDetailType = 1)
        {
            ProgramDTO program       = new ProgramDTO();
            int        topProgram    = progromToRead;
            short      prgromsToRead = 1;
            short      ret           = 0;

            ret = 0;
            FocasLibBase.PRGDIR3 d = new FocasLibBase.PRGDIR3();
            try
            {
                ret = FocasLib.cnc_rdprogdir3(focasLibHandle, programDetailType, ref topProgram, ref prgromsToRead, d);

                if (ret != 0)
                {
                    Logger.WriteErrorLog("cnc_rdprogdir3() failed. return value is = " + ret);
                }
                else
                {
                    if (prgromsToRead > 0)
                    {
                        if (topProgram == progromToRead)
                        {
                            program.ProgramNo = d.dir1.number;
                            program.Comment   = d.dir1.comment;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.WriteErrorLog(ex.ToString());
            }
            return(program);
        }
        //cnc_rdprogdir3
        public static List <ProgramDTO> ReadAllPrograms(string ipAddress, ushort portNo, short programDetailType = 2)
        {
            List <ProgramDTO> programs = new List <ProgramDTO>();
            int    topProgram          = 0;
            short  prgromsToRead       = 10;
            short  ret            = 0;
            ushort focasLibHandle = 0;

            ret = FocasLib.cnc_allclibhndl3(ipAddress, portNo, 10, out focasLibHandle);
            if (ret != 0)
            {
                Logger.WriteErrorLog("cnc_allclibhndl3() failed. return value is = " + ret);
                return(null);
            }
            ret = 0;
            while (prgromsToRead >= 10)
            {
                FocasLibBase.PRGDIR3 d = new FocasLibBase.PRGDIR3();
                try
                {
                    ret = FocasLib.cnc_rdprogdir3(focasLibHandle, programDetailType, ref topProgram, ref prgromsToRead, d);
                }
                catch (Exception ex)
                {
                    Logger.WriteErrorLog(ex.ToString());
                }
                if (ret != 0)
                {
                    Logger.WriteErrorLog("cnc_rdprogdir3() failed. return value is = " + ret);
                    break;
                }
                if (prgromsToRead == 0)
                {
                    Logger.WriteErrorLog("No programs found.");
                    break;
                }

                if (prgromsToRead >= 1)
                {
                    get_program(programs, d.dir1);
                }
                if (prgromsToRead >= 2)
                {
                    get_program(programs, d.dir2);
                }
                if (prgromsToRead >= 3)
                {
                    get_program(programs, d.dir3);
                }
                if (prgromsToRead >= 4)
                {
                    get_program(programs, d.dir4);
                }
                if (prgromsToRead >= 5)
                {
                    get_program(programs, d.dir5);
                }
                if (prgromsToRead >= 6)
                {
                    get_program(programs, d.dir6);
                }
                if (prgromsToRead >= 7)
                {
                    get_program(programs, d.dir7);
                }
                if (prgromsToRead >= 8)
                {
                    get_program(programs, d.dir8);
                }
                if (prgromsToRead >= 9)
                {
                    get_program(programs, d.dir9);
                }
                if (prgromsToRead >= 10)
                {
                    get_program(programs, d.dir10);
                }

                topProgram = programs[programs.Count - 1].ProgramNo + 1;
            }
            return(programs);
        }