예제 #1
0
            public override void SetTerminalAttributes(TerminalAttributes attributes)
            {
                int fg = (int)attributes & 0x0F;
                int bg = ((int)attributes & 0xF0) >> 4;

                Console.Write("\x1B[m");

                if (fg != 0)
                {
                    Console.ForegroundColor = AttributeToConsoleColor(fg);
                }

                if (bg != 0)
                {
                    Console.BackgroundColor = AttributeToConsoleColor(bg);
                }

                if (attributes.HasFlag(TerminalAttributes.ATTRIBUTE_UNDERLINE))
                {
                    Console.Write("\x1B[4m");
                }

                if (attributes.HasFlag(TerminalAttributes.ATTRIBUTE_BLINK))
                {
                    Console.Write("\x1B[5m");
                }

                if (attributes.HasFlag(TerminalAttributes.ATTRIBUTE_BOLD))
                {
                    Console.Write("\x1B[1m");
                }

                if (attributes.HasFlag(TerminalAttributes.ATTRIBUTE_REVERSE))
                {
                    Console.Write("\x1B[7m");
                }

                if (attributes.HasFlag(TerminalAttributes.ATTRIBUTE_PROTECT))
                {
                    Console.Write("\x1B[7m");
                }

                if (attributes.HasFlag(TerminalAttributes.ATTRIBUTE_STANDOUT))
                {
                    Console.Write("\x1B[3m");
                }

                if (attributes.HasFlag(TerminalAttributes.ATTRIBUTE_INVIS))
                {
                    Console.Write("\x1B[8m");
                }

                if (attributes.HasFlag(TerminalAttributes.ATTRIBUTE_DIM))
                {
                    Console.Write("\x1B[2m");
                }

                Console.Out.Flush();
            }
예제 #2
0
            public void AttributesOn(TerminalAttributes attributes)
            {
                mutex.WaitOne();

                if (((int)attributes & 0xFF) != 0)
                {
                    prevColorTable [(int)attributes & 0xFF] = (int)activeAttributes & 0xFF;
                    activeAttributes &= (TerminalAttributes)0xFF00;
                }

                activeAttributes |= attributes;
                actionQueue.Enqueue(new SetAttributesAction(activeAttributes));

                mutex.ReleaseMutex();
            }
예제 #3
0
            public void AttributesOff(TerminalAttributes attributes)
            {
                mutex.WaitOne();

                if (((int)attributes & 0xFF) != 0)
                {
                    activeAttributes &= (TerminalAttributes)0xFF00;
                    activeAttributes |= (TerminalAttributes)(
                        prevColorTable [(int)attributes & 0xFF]
                        );
                }
                else
                {
                    activeAttributes &= ~attributes;
                }
                actionQueue.Enqueue(new SetAttributesAction(activeAttributes));
                mutex.ReleaseMutex();
            }
예제 #4
0
        private static IodineObject AttributeOff(VirtualMachine vm, IodineObject self, IodineObject[] args)
        {
            if (args.Length == 0)
            {
                vm.RaiseException(new IodineArgumentException(1));
                return(null);
            }

            AttributeWrapper attrWrapper = args [0] as AttributeWrapper;

            if (attrWrapper == null)
            {
                vm.RaiseException(new IodineTypeException("TerminalAttribute"));
                return(null);
            }

            TerminalAttributes attr = attrWrapper.Value;

            activeTerminal.AttributesOff(attr);

            return(null);
        }
예제 #5
0
 public AttributeWrapper(TerminalAttributes value)
     : base(new IodineTypeDefinition("TerminalAttribute"))
 {
     Value = value;
 }
예제 #6
0
            public void InitPair(int index, int forecolor, int backcolor)
            {
                TerminalAttributes attr = (TerminalAttributes)(forecolor | (backcolor << 4));

                palette [index & 0x0F] = attr;
            }
예제 #7
0
 public abstract void SetTerminalAttributes(TerminalAttributes attributes);
예제 #8
0
 public SetAttributesAction(TerminalAttributes attributes)
 {
     Attributes = attributes;
 }