view runtime/internal/util/console.d @ 834:f466f475b654

Added proper "need 'this' to access member foo" errors instead of "variable foo not resolved" for some cases, added FIXME for the old error! Added a bit more information to the runtime's cyclic dependency detection exception.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Tue, 09 Dec 2008 01:56:39 +0100
parents 44f08170f4ef
children
line wrap: on
line source

/*******************************************************************************

        copyright:      Copyright (c) 2004 Tango group. All rights reserved

        license:        BSD style: $(LICENSE)

        version:        Initial release: July 2006


        Various low-level console oriented utilities

*******************************************************************************/

module util.console;

private import util.string;

version (Win32)
        {
        private extern (Windows) int GetStdHandle (int);
        private extern (Windows) int WriteFile (int, char*, int, int*, void*);
        }

else

version (Posix)
        {
        private extern (C) ptrdiff_t write (int, void*, size_t);
        }

/+
// emit a char[] to the console. Note that Win32 does not handle utf8, but
// then neither does fprintf (stderr). This will handle redirection though.
// May need to remedy the utf8 issue
int console (char[] s)
{
        version (Win32)
                {
                int count;
                if (WriteFile (GetStdHandle(0xfffffff5), s.ptr, s.length, &count, null))
                    return count;
                return -1;
                }
        else
        version (Posix)
                {
                return write (2, s.ptr, s.length);
                }
}

// emit an integer to the console
int console (uint i)
{
        char[10] tmp = void;

        return console (intToUtf8 (tmp, i));
}
+/

struct Console
{
    Console opCall (char[] s)
    {
            version (Win32)
                    {
                    int count;
                    WriteFile (GetStdHandle(0xfffffff5), s.ptr, s.length, &count, null);
                    }
            else
            version (Posix)
                    {
                    write (2, s.ptr, s.length);
                    }
            return *this;
    }

    // emit an integer to the console
    Console opCall (size_t i)
    {
            char[25] tmp = void;

            return console (intToUtf8 (tmp, i));
    }
}

Console console;