예제 #1
0
파일: eval.cs 프로젝트: Wotingfengyu12/11
        /*Vibhor 020904: End of Code*/


        // timj added 9oct07
        public static unsafe int eval_dir_device_tables_8(ref DDlDevDescription.FLAT_DEVICE_DIR_6 device_dir, ref DDlDevDescription.BIN_DEVICE_DIR_6 device_bin, uint mask)
        {

            int rc = Common.DDL_SUCCESS;   /* return code */


            if ((mask & DDlDevDescription.BLK_TBL_MASK) != 0)
            {

                /*		rc = dir_mask_man((uint) BLK_TBL_MASK, device_bin.bin_exists, device_bin.bin_hooked, &device_dir.attr_avail, (int (*) ()) eval_dir_blk_tbl, (void *) &device_dir.blk_tbl, &device_bin.blk_tbl);

                        if ((rc != DDL_SUCCESS) { != 0)

                            return rc;
                        }*/
            }
            if ((mask & DDlDevDescription.DICT_REF_TBL_MASK) != 0)
            {

                rc = dir_mask_man((uint)DDlDevDescription.DICT_REF_TBL_MASK, device_bin.bin_exists, device_bin.bin_hooked, ref device_dir.attr_avail, EVALDIR_FN.eval_dir_dict_ref_tbl8, ref device_dir, ref device_bin.dict_ref_tbl);

                if ((rc != Common.DDL_SUCCESS))
                {

                    return rc;
                }

                // copy the parsed dictionary into the global dictionary
                DDlDevDescription.pGlobalDict.makedict(ref device_dir.dict_ref_tbl);

            }
            if ((mask & DDlDevDescription.DOMAIN_TBL_MASK) != 0)
            {

                rc = dir_mask_man((uint)DDlDevDescription.DOMAIN_TBL_MASK, device_bin.bin_exists, device_bin.bin_hooked, ref device_dir.attr_avail, EVALDIR_FN.eval_dir_domain_tbl, ref device_dir, ref device_bin.domain_tbl);

                if ((rc != Common.DDL_SUCCESS))
                {

                    return rc;
                }
            }
            if ((mask & DDlDevDescription.ITEM_TBL_MASK) != 0)
            {

                rc = dir_mask_man((uint)DDlDevDescription.ITEM_TBL_MASK, device_bin.bin_exists, device_bin.bin_hooked, ref device_dir.attr_avail, EVALDIR_FN.eval_dir_item_tbl, ref device_dir, ref device_bin.item_tbl);

                if ((rc != Common.DDL_SUCCESS))
                {

                    return rc;
                }
            }
            if ((mask & DDlDevDescription.PROG_TBL_MASK) != 0)
            {

                rc = dir_mask_man((uint)DDlDevDescription.PROG_TBL_MASK, device_bin.bin_exists, device_bin.bin_hooked, ref device_dir.attr_avail, EVALDIR_FN.eval_dir_prog_tbl, ref device_dir, ref device_bin.prog_tbl);

                if ((rc != Common.DDL_SUCCESS))
                {

                    return rc;
                }
            }
            if ((mask & DDlDevDescription.STRING_TBL_MASK) != 0)
            {

                rc = dir_mask_man((uint)DDlDevDescription.STRING_TBL_MASK, device_bin.bin_exists, device_bin.bin_hooked, ref device_dir.attr_avail, EVALDIR_FN.eval_dir_string_tbl, ref device_dir, ref device_bin.string_tbl);

                if ((rc != Common.DDL_SUCCESS))
                {

                    return rc;
                }

                if (DDlDevDescription.pLitStringTable != null) // stevev 24apr08 - for fm <8 != 0)
                                                               // copy the parsed string table into the global lit string table
                    DDlDevDescription.pLitStringTable.makelit((device_dir.string_tbl), false);
            }

            if ((mask & DDlDevDescription.LOCAL_VAR_TBL_MASK) != 0)
            {

                rc = dir_mask_man((uint)DDlDevDescription.LOCAL_VAR_TBL_MASK, device_bin.bin_exists, device_bin.bin_hooked, ref device_dir.attr_avail, EVALDIR_FN.eval_dir_local_var_tbl, ref device_dir, ref device_bin.local_var_tbl);
                if ((rc != Common.DDL_SUCCESS))
                {

                    return rc;
                }
            }

            if ((mask & DDlDevDescription.CMD_NUM_ID_TBL_MASK) != 0)
            {

                rc = dir_mask_man((uint)DDlDevDescription.CMD_NUM_ID_TBL_MASK, device_bin.bin_exists, device_bin.bin_hooked, ref device_dir.attr_avail, EVALDIR_FN.eval_dir_cmd_num_id_tbl, ref device_dir, ref device_bin.cmd_num_id_tbl);
                if ((rc != Common.DDL_SUCCESS))
                {

                    return rc;
                }
            }

            if ((mask & DDlDevDescription.IMAGE_TBL_MASK) != 0)
            {

                rc = dir_mask_man((uint)DDlDevDescription.IMAGE_TBL_MASK, device_bin.bin_exists, device_bin.bin_hooked, ref device_dir.attr_avail, EVALDIR_FN.eval_dir_image_tbl, ref device_dir, ref device_bin.image_tbl);
                if ((rc != Common.DDL_SUCCESS))
                {

                    return rc;
                }
            }


            return rc;
        }
예제 #2
0
파일: eval.cs 프로젝트: Wotingfengyu12/11
        public static unsafe int dir_mask_man(uint attr_mask, uint bin_exists, uint bin_hooked, ref uint attr_avail, EVALDIR_FN eval, ref DDlDevDescription.FLAT_DEVICE_DIR_6 device_dir, ref DDlDevDescription.BININFO bin)
        {

            int rc = Common.DDL_SUCCESS; /* return code */

            /*
             * No binary exists
             */

            if ((attr_mask & bin_exists) == 0)
            {

                /*
                 * This is a DDOD error, by definition all directory tables
                 * must have binary available
                 */

                rc = Common.DDL_BINARY_REQUIRED;
            }

            /*
             * No binary hooked
             */

            else if ((attr_mask & bin_hooked) == 0)
            {

                /*
                 * If value is already available
                 */

                if ((attr_mask & attr_avail) != 0)
                {

                    rc = Common.DDL_SUCCESS;
                }

                /*
                 * error, binary should be hooked up
                 */

                else
                {

                    rc = Common.DDL_BINARY_REQUIRED;
                }
            }

            else
            {

                /*
                 * check masks for evaluating
                 */

                if ((attr_mask & attr_avail) == 0)
                {

                    //rc = (*eval)(attribute, bin);
                    switch (eval)
                    {
                        case EVALDIR_FN.eval_dir_dict_ref_tbl:
                            rc = eval_dir_dict_ref_tbl(ref device_dir.dict_ref_tbl, ref bin);
                            break;

                        case EVALDIR_FN.eval_dir_item_tbl:
                            rc = eval_dir_item_tbl(ref device_dir.item_tbl, ref bin);
                            break;

                        case EVALDIR_FN.eval_dir_string_tbl:
                            rc = eval_dir_string_tbl(ref device_dir.string_tbl, ref bin);
                            break;

                        case EVALDIR_FN.eval_dir_image_tbl:
                            rc = eval_dir_image_tbl(ref device_dir.image_tbl, ref bin);
                            break;

                        case EVALDIR_FN.eval_dir_cmd_num_id_tbl:
                            rc = eval_dir_cmd_num_id_tbl(ref device_dir.cmd_num_id_tbl, ref bin);
                            break;

                        case EVALDIR_FN.eval_dir_dict_ref_tbl8:
                            rc = eval_dir_dict_ref_tbl8(ref device_dir.dict_ref_tbl, ref bin);
                            break;

                        case EVALDIR_FN.eval_dir_domain_tbl:
                            rc = eval_dir_domain_tbl(ref device_dir.domain_tbl, ref bin);
                            break;

                        case EVALDIR_FN.eval_dir_prog_tbl:
                            rc = eval_dir_prog_tbl(ref device_dir.prog_tbl, ref bin);
                            break;

                        case EVALDIR_FN.eval_dir_local_var_tbl:
                            rc = eval_dir_local_var_tbl(ref device_dir.local_var_tbl, ref bin);
                            break;

                        default:
                            rc = Common.DDL_ENCODING_ERROR;
                            break;
                    }

                    if (rc == Common.DDL_SUCCESS)
                    {

                        attr_avail |= attr_mask;
                    }
                }

                /*
                 * evaluation is not necessary
                 */

                else
                {

                    rc = Common.DDL_SUCCESS;
                }
            }

            return rc;
        }