private async Task GetReady()
        {
            Worker = new WebWorkerClient();
            var AssembellyNames = "[";

            foreach (var Asm in Monsajem_Incs.Assembly.Assembly.AllAppAssemblies)
            {
                AssembellyNames += $"'{Asm.GetName().Name}.dll',";
            }
            if (Monsajem_Incs.Assembly.Assembly.AllAppAssemblies.Length > 0)
            {
                AssembellyNames = AssembellyNames.Substring(0, AssembellyNames.Length - 1);
            }
            AssembellyNames += "]";
            var Location = Window.window.Location;
            await Worker.Run($"self.MN={{}};self.MN.AssemblyFilenames={AssembellyNames};self.MN.baseUrl = '{Location.Protocol}//{Location.Hostname}:{Location.Port}/_framework/';");

            var Ready = Worker.GetMessage();
            await Worker.Run(WebWorkerJs);

            await Ready;
        }
Example #2
0
        private void AsmWriteString(string cadenaAImprimir) // FixMe: arreglar cadena vacia
        {
            // ToDo: terminar implementacion

            /*
             * Implementacion para Linux x86_64 (64 bits)
             * Para imprimir es necesario almacenar el string en memoria.
             * En esta implementacion se guarda el string en el stack para pasarla
             * como argumento a la subrutina writeString.
             * De esta forma la longitud de la cadena no está limitada a la longitud
             * de los registros, no es necesario incluir otro archivo (biblioteca),
             * ni se necesita declarar un buffer en .data
             */
            cadenaAImprimir += '\n';
            cadenaAImprimir  = cadenaAImprimir.Invertir();
            string cadenaAux   = "";
            int    longitud    = cadenaAImprimir.Length;
            int    iteraciones = longitud / 8;
            int    pushCont    = iteraciones;

            if (longitud % 8 != 0)
            {
                cadenaAux       = ToAsciiHex(cadenaAImprimir.Substring(0, longitud % 8));
                cadenaAImprimir = cadenaAImprimir.Substring(longitud % 8, longitud - longitud % 8);
                pushCont++;
                Asm.WriteLine("mov rax, 0x" + cadenaAux);
                Asm.WriteLine("push rax");
            }
            for (int i = 0; i < iteraciones; i++)
            {
                cadenaAux = ToAsciiHex(cadenaAImprimir.Substring(i * 8, 8));
                Asm.WriteLine("mov rax, 0x" + cadenaAux);
                Asm.WriteLine("push rax");
            }
            Asm.WriteLine("mov rax, rsp"); // Direccion de la cadena, tope del stack
            Asm.WriteLine("mov rbx, " + longitud);
            Asm.WriteLine("mov rcx, " + pushCont);
            Asm.WriteLine("call writeString");
        }
Example #3
0
        private void GetAllModel()
        {
            foreach (Part pt in Session.GetSession().Parts)
            {
                string name = pt.Name;
                if (ParentAssmblieInfo.IsParent(pt))
                {
                    ParentAssmblieInfo parent = ParentAssmblieInfo.GetAttribute(pt);
                    switch (parent.Type)
                    {
                    case PartType.ASM:
                        Asm.Add(new ASMModel(pt));
                        break;

                    case PartType.EDM:
                        Edm.Add(new EDMModel(pt));
                        break;

                    case PartType.Electrode:
                        ElectrodeModel eleModel = new ElectrodeModel(pt);
                        Electrode.Add(eleModel);
                        break;

                    case PartType.Work:
                        Work.Add(new WorkModel(pt));
                        break;

                    default:
                        Other.Add(pt);
                        break;
                    }
                }
                else
                {
                    Other.Add(pt);
                }
            }
        }
Example #4
0
        /// <summary>编译汇编程序</summary>
        /// <param name="file"></param>
        /// <param name="showCmd"></param>
        /// <returns></returns>
        public Int32 Assemble(String file, Boolean showCmd)
        {
            var lstName = GetListPath(file);
            var objName = GetObjPath(file);

            // 如果文件太新,则不参与编译
            var obj = (objName + ".o").AsFile();

            if (!Check(file, obj))
            {
                return(-2);
            }

            obj.DirectoryName.EnsureDirectory(false);

            var cmd = OnAssemble(file);

            if (showCmd)
            {
                Console.Write("汇编参数:");
                Console.ForegroundColor = ConsoleColor.Magenta;
                Console.WriteLine(cmd);
                Console.ResetColor();
            }

            var sb = new StringBuilder();

            sb.Append(cmd);
            sb.AppendFormat(" \"{0}\" -o \"{1}.o\"", file, objName);

            // 先删除目标文件
            if (obj.Exists)
            {
                obj.Delete();
            }

            return(Asm.Run(sb.ToString(), 100, WriteLog));
        }
Example #5
0
        private void AsmEvaluarCondicion(string operador, string etiequeta, int numEtiqueta)
        {
            Asm.WriteLine("cmp rax, rbx");
            switch (operador)
            {
            case "<":
                Asm.Write("jnl ");
                AsmSaltosCondicionales(etiequeta, numEtiqueta);
                break;

            case "<=":
                Asm.Write("jnle ");
                AsmSaltosCondicionales(etiequeta, numEtiqueta);
                break;

            case ">":
                Asm.Write("jng ");
                AsmSaltosCondicionales(etiequeta, numEtiqueta);
                break;

            case ">=":
                Asm.Write("jng ");
                AsmSaltosCondicionales(etiequeta, numEtiqueta);
                break;

            case "==":
                Asm.Write("jne ");
                AsmSaltosCondicionales(etiequeta, numEtiqueta);
                break;

            case "!=":
                Asm.Write("je ");
                AsmSaltosCondicionales(etiequeta, numEtiqueta);
                break;
            }
            //Asm.Write("jmp ");
            //AsmSaltosCondicionales(etiequeta, numEtiqueta);
        }
Example #6
0
        protected void VariableAssignment(Address aVariableName, string aOpEquals, object aValue)
        {
            string size;

            switch (aValue)
            {
            case uint _:
                size = "dword";
                Asm.Emit(OpCode.Mov, size, aVariableName.AddPrefix(Compiler.GetPrefixForVar), aValue);
                break;

            case Register aValueReg:
                size = aValueReg.RegSize;
                Asm.Emit(OpCode.Mov, size, aVariableName.AddPrefix(Compiler.GetPrefixForVar), aValue);
                break;

            case string _:
                //TODO: verify this
                aValue = $"{Compiler.GetPrefixForConst}{aValue}";
                Asm.Emit(OpCode.Mov, aVariableName.AddPrefix(Compiler.GetPrefixForVar), aValue);
                break;
            }
        }
Example #7
0
        /// <summary>
        /// Reboot the system.
        /// We can reset the system, oddly enough, through the keyboard IO port
        /// </summary>
        public static void Reboot()
        {
            // Disable interrupts
            Asm.CLI();

            // Clear all keyboard buffers (output and command buffers)
            byte temp;

            do
            {
                temp = IO.ReadByte(IO.Port.KB_controller_commands);
                if ((temp & 0x01) != 0)
                {
                    IO.ReadByte(IO.Port.KB_data_port);                      // Empty keyboard buffer
                }
            } while ((temp & 0x02) != 0);

            // Reset the system
            IO.WriteByte(IO.Port.KB_controller_commands, 0xFE);

            // Halt the system (in case reset didn't work)
            Asm.HLT();
        }
Example #8
0
            /// <summary>
            /// Gets the requested type.
            /// </summary>
            /// <param name="typeName"></param>
            /// <returns></returns>
            public Type GetType(string typeName)
            {
                Load();

                if (!typeName.Contains('.') && !string.IsNullOrEmpty(DefaultNamespace))
                {
                    typeName = string.Format(CultureInfo.InvariantCulture, "{0}.{1}", DefaultNamespace, typeName);
                }

                if (Types.ContainsKey(typeName))
                {
                    return(Types[typeName]);
                }

                var t = Asm.GetType(typeName);

                if (t == null)
                {
                    throw new DynException(ErrTypeLoad, typeName, AsmName);
                }

                Types.Add(t.FullName, t);
                return(t);
            }
Example #9
0
        /// <summary>在程序集中查找类型</summary>
        /// <param name="typeName"></param>
        /// <returns></returns>
        Type GetTypeInternal(String typeName)
        {
            var type = Asm.GetType(typeName);

            if (type != null)
            {
                return(type);
            }

            // 如果没有包含圆点,说明其不是FullName
            if (!typeName.Contains("."))
            {
                var types = Asm.GetTypes();
                if (types != null && types.Length > 0)
                {
                    foreach (var item in types)
                    {
                        if (item.Name == typeName)
                        {
                            return(item);
                        }
                    }
                }

                // 遍历所有类型,包括内嵌类型
                foreach (var item in TypeXs)
                {
                    if (item.Name == typeName)
                    {
                        return(item);
                    }
                }
            }

            return(null);
        }
Example #10
0
        /// <summary>
        ///     Loads in the new dll
        /// </summary>
        public void LoadDll()
        {
            var path = $@"../../../../{ProjectName}/bin/Debug/netcoreapp2.1/{ProjectName}.dll";

            Asm = Assembly.Load(File.ReadAllBytes(path));

            foreach (var type in Asm.GetExportedTypes())
            {
                if (Screen == null)
                {
                    break;
                }

                if (type.FullName == Screen.GetType().ToString())
                {
                    // We found our gamelogic type, set our dynamic types logic, and state
                    var oldScreen = Screen;

                    Screen = Activator.CreateInstance(type);
                    oldScreen?.Destroy();
                    break;
                }
            }
        }
Example #11
0
        public float MasTermino()
        {
            float A = Termino();
            int   tipoPredominante = TipoPredominante;

            if (GETClasificacion() == operadorTermino)
            {
                string operador = GETContenido();
                MATCH(operadorTermino);
                float t = Termino();
                Log.Write(operador + " ");
                Asm.WriteLine("pop rbx");
                Asm.WriteLine("pop rax");
                if (EvaluaExpresion(t) > TipoPredominante)
                {
                    TipoPredominante = EvaluaExpresion(t);
                }
                if (tipoPredominante > TipoPredominante)
                {
                    TipoPredominante = tipoPredominante;
                }
                if (operador == "+")
                {
                    Asm.WriteLine("add rax, rbx");
                    Asm.WriteLine("push rax");
                    return(A + t);
                }
                else
                {
                    Asm.WriteLine("sub rax, rbx");
                    Asm.WriteLine("push rbx");
                    return(A - t);
                }
            }
            return(A + 0f);
        }
Example #12
0
        public static void ShowAllTypeInfo()
        {
            Console.WriteLine("1 - Common types information\n");

            Assembly myAsm = Assembly.GetExecutingAssembly();

            Type[] myAsmTypes = myAsm.GetTypes();
            Console.WriteLine("My assembly has {0} types:", myAsmTypes.Length);

            string[] myAsmTypesNames = new string[myAsmTypes.Length];
            for (int i = 0; i < myAsmTypes.Length; i++)
            {
                myAsmTypesNames[i] = myAsmTypes[i].Name;
            }
            string sMyAsmTypesNames = string.Join(", ", myAsmTypesNames);

            Console.WriteLine(sMyAsmTypesNames);

            // Referenced assemblies
            #region Properties init
            int refAsmsNum      = 0;
            int allTypesNum     = 0;
            int RefTypesCount   = 0;
            int ValTypesCount   = 0;
            int InterTypesCount = 0;

            Type MaxCntMethType     = null;
            int  MaxCntMethTypeNums = 0;

            MethodInfo MaxLenNameMeth    = null;
            int        MaxLenNameMethNum = 0;

            MethodInfo MaxCntParMeth    = null;
            int        MaxCntParMethNum = 0;
            #endregion

            Assembly[] refAssemblies = AppDomain.CurrentDomain.GetAssemblies();
            refAsmsNum = refAssemblies.Length;
            List <Type> allTypes = new List <Type>();

            foreach (Assembly Asm in refAssemblies)
            {
                allTypes.AddRange(Asm.GetTypes());
            }
            allTypesNum = allTypes.Count;

            foreach (var t in allTypes)
            {
                if (t.IsClass)
                {
                    RefTypesCount++;
                }
                if (t.IsValueType)
                {
                    ValTypesCount++;
                }
                if (t.IsInterface)
                {
                    InterTypesCount++;
                }
                //MaxCntMethType
                if (t.GetMethods().Length > MaxCntMethTypeNums)
                {
                    MaxCntMethType     = t;
                    MaxCntMethTypeNums = t.GetMethods().Length;
                }

                //MaxLenNameMeth & MaxCntParMeth
                MethodInfo[] TempMethods = t.GetMethods();
                foreach (var m in TempMethods)
                {
                    if (m.Name.Length > MaxLenNameMethNum)
                    {
                        MaxLenNameMethNum = m.Name.Length;
                        MaxLenNameMeth    = m;
                    }

                    //MaxCntParMeth
                    if (m.GetParameters().Length > MaxCntParMethNum)
                    {
                        MaxCntParMethNum = m.GetParameters().Length;
                        MaxCntParMeth    = m;
                    }
                }
            }

            Console.WriteLine($@"
        Referenced assemblies:              {refAsmsNum}
        Ref assemblies sum types:           {allTypesNum}
        Referenced types:                   {RefTypesCount}
        Value types:                        {ValTypesCount}
        Interface types:                    {InterTypesCount}
        Max count methods type:             {MaxCntMethType.Name}
        Max length name method:             {MaxLenNameMeth.Name}
        Max count parameters method:        {MaxCntParMeth.Name}
 ");


            Console.WriteLine("\nPress any key to return back into menu");
            Console.ReadKey();
        }
Example #13
0
 protected void RegAssignToMemory(string aOpOpenBracket, Register aTargetRegisterRoot, string aOpCloseBracket, string aOpEquals, Register source)
 {
     Asm.Emit(OpCode.Mov, source.RegSize, new Address(aTargetRegisterRoot), source);
 }
Example #14
0
 public static unsafe uint Increment(uint *location)
 {
     Asm.LOCK();
     Asm.INC(location);
     return(*location);
 }
Example #15
0
        protected void Goto(string aGotoKeyword, string aLabelName)
        {
            string xLabelName = Compiler.GetFullName(aLabelName, true);

            Asm.Emit(OpCode.Jmp, $"{xLabelName}");
        }
Example #16
0
 protected void VariableAssignToMemory(string aOpOpenBracket, Register aTargetRegisterRoot, string aOpCloseBracket, string aOpEquals, Address source)
 {
     source.AddPrefix(Compiler.CurrentNamespace);
     Asm.Emit(OpCode.Mov, "dword", new Address(aTargetRegisterRoot), source);
 }
Example #17
0
 [Emitter(typeof(Reg32), typeof(OpEquals), typeof(Int32u))] // EAX = 0
 protected void RegAssignNum(Register aDestReg, string aEquals, object aVal)
 {
     Asm.Emit(OpCode.Mov, aDestReg, aVal);
 }
Example #18
0
 public TAttribute GetCustomAttribute <TAttribute>()
 {
     return(Asm.GetCustomAttribute <TAttribute>());
 }
Example #19
0
 protected void PopConst(string aOpMinus, string value)
 {
     Asm.Emit(OpCode.Pop, $"{Compiler.CurrentNamespace}_Const_{value}");
 }
Example #20
0
        protected void RegAssignVarAddress(Register aReg, string aEquals, string aVal)
        {
            string xValue = Compiler.GetFullName(aVal);

            Asm.Emit(OpCode.Mov, aReg, xValue);
        }
Example #21
0
 protected void RegAssignVar(Register aReg, string aEquals, Address aVal)
 {
     // TODO: Do this better? Use Compiler.GetFullName() so things are consistent.
     aVal.AddPrefix(Compiler.CurrentNamespace);
     Asm.Emit(OpCode.Mov, aReg, aReg.RegSize, aVal);
 }
Example #22
0
        protected void RegAssignConst(Register aReg, string aEquals, string aVal)
        {
            string xValue = Compiler.GetFullName($"Const_{aVal}");

            Asm.Emit(OpCode.Mov, aReg, xValue);
        }
Example #23
0
 [Emitter(typeof(Reg32), typeof(OpEquals), typeof(Reg32))] // EAX = EBX
 protected void RegAssigReg(Register aDestReg, string aEquals, Register aSrcReg)
 {
     Asm.Emit(OpCode.Mov, aDestReg, aSrcReg);
 }
Example #24
0
 protected void PopVar(string aOpPlus, Address value)
 {
     // TODO: Do this better? Use Compiler.GetFullName() so things are consistent.
     value.AddPrefix(Compiler.CurrentNamespace);
     Asm.Emit(OpCode.Pop, value);
 }
Example #25
0
 protected void ZeroParamOp(OpCode aOpCode)
 {
     Asm.Emit(aOpCode);
 }
Example #26
0
 protected void PopAddr(string aOpPlus, string value)
 {
     Asm.Emit(OpCode.Pop, $"{Compiler.CurrentNamespace}_{value}");
 }
Example #27
0
 protected void PushValue(string aOp, object aReg)
 {
     Asm.Emit(OpCode.Push, aReg);
 }
Example #28
0
 protected void IntegerAssignToMemory(string aOpOpenBracket, Register aTargetRegisterRoot, string aOpCloseBracket, string aOpEquals, object source)
 {
     Asm.Emit(OpCode.Mov, "dword", new Address(aTargetRegisterRoot), source);
 }
Example #29
0
        /// <summary>在程序集中查找类型</summary>
        /// <param name="typeName"></param>
        /// <returns></returns>
        Type GetTypeInternal(String typeName)
        {
            var type = Asm.GetType(typeName);

            if (type != null)
            {
                return(type);
            }

            // 如果没有包含圆点,说明其不是FullName
            if (!typeName.Contains("."))
            {
                try
                {
                    var types = Asm.GetTypes();
                    if (types != null && types.Length > 0)
                    {
                        foreach (var item in types)
                        {
                            if (item.Name == typeName)
                            {
                                return(item);
                            }
                        }
                    }
                }
                catch (ReflectionTypeLoadException ex)
                {
                    if (XTrace.Debug)
                    {
                        //XTrace.WriteException(ex);
                        XTrace.WriteLine("加载[{0}]{1}的类型时发生个{2}错误!", this, Location, ex.LoaderExceptions.Length);

                        foreach (var item in ex.LoaderExceptions)
                        {
                            XTrace.WriteException(item);
                        }
                    }

                    return(null);
                }
                catch (Exception ex)
                {
                    if (XTrace.Debug)
                    {
                        XTrace.WriteException(ex);
                    }

                    return(null);
                }

                // 遍历所有类型,包括内嵌类型
                foreach (var item in Types)
                {
                    if (item.Name == typeName)
                    {
                        return(item);
                    }
                }
            }

            return(null);
        }
Example #30
0
 protected void PopValue(string aOp, object aReg)
 {
     Asm.Emit(OpCode.Pop, aReg);
 }