public MyDefinitionId(VRage.ObjectBuilders.MyObjectBuilderType typeId, string subtypeName)
 {
     TypeId      = typeId;
     SubtypeName = subtypeName;
 }
        void Main(string argument)
        {
            // initialize
            Dictionary <MyDefinitionId, VRage.MyFixedPoint> inventory = new Dictionary <MyDefinitionId, VRage.MyFixedPoint>();

            var blocks = new List <IMyTerminalBlock>();

            GridTerminalSystem.GetBlocksOfType <IMyInventoryOwner>(blocks);
            VRage.ObjectBuilders.MyObjectBuilderType type = null;
            if (!nameTypes.TryGetValue(argument, out type))
            {
                for (int i = 0; i < nameTypes.Count; i++)
                {
                }
                return;
            }
            debug.Append(argument).Append('=').AppendLine(type.ToString() ?? "null");


            if (blocks.Count == 0)
            {
                throw new Exception("Did not find any cargo container.");
            }

            for (int i = 0; i < blocks.Count; ++i)
            {
                IMyInventoryOwner invOwner = blocks[i] as IMyInventoryOwner;
                for (int j = 0; j < invOwner.InventoryCount; ++j)
                {
                    IMyInventory            inv   = invOwner.GetInventory(j);
                    List <IMyInventoryItem> items = inv.GetItems();
                    for (int k = 0; k < items.Count; ++k)
                    {
                        IMyInventoryItem item = items[k];
                        var key = new MyDefinitionId(item.Content.TypeId, item.Content.SubtypeName);
                        //contents.Add(key);
                        if (!inventory.ContainsKey(key))
                        {
                            inventory[key] = item.Amount;
                        }
                        else
                        {
                            inventory[key] = inventory[key] + item.Amount;
                        }
                    }
                }
            }
            debug.AppendLine();
            var enumerator = inventory.Keys.GetEnumerator();

            while (enumerator.MoveNext())
            {
                var key = enumerator.Current;
                if (key.TypeId != ItemTypes.INGOT)
                {
                    continue;
                }
                debug.Append(typeNames[key.TypeId]).Append(key.SubtypeName).Append(" = ").Append(inventory[key]).AppendLine();
            }

            Echo(debug.ToString());
            debug.Clear();
        }