view pwplib/win32con.c @ 56:5d819ba6891c

More cleanups.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 27 May 2010 22:48:37 +0300
parents 72d1c04c788b
children
line wrap: on
line source

#include "config.h"

#ifdef DRIVE_WIN32

#include "pwplib.h"
#include <stdarg.h>
#include <windows.h>

/******************** vcsa code ********************/

struct{
   HANDLE hstdout;
   COORD  size;

   CHAR_INFO*buf;
} pwp_win32;

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

void pwpwrite(char *fmt, ...)
{
/*   fprintf(stderr,"%s\n",z); */
}

static void win32con_dump_attr(void)
{
   u8*s=pwplib_buf;
   CHAR_INFO*d=pwp_win32.buf;
   int i=80*50;

   for(;i;i--)
   {
      d->Char.AsciiChar=*s++;
      d->Attributes=*s++;
      d++;
   }

   {
      const COORD bufsize = {80,50};
      const COORD bufcoord = {0,0};
      const SMALL_RECT writerect = { 0,0,79,49 };

      WriteConsoleOutput(pwp_win32.hstdout,pwp_win32.buf,
                         bufsize,bufcoord,&writerect);
   }
}

static int win32con_probe(void)
{
   if(GetStdHandle(STD_OUTPUT_HANDLE) != INVALID_HANDLE_VALUE)
      return 1; else return 0;
}

int win32con_init(void)
{
   AllocConsole();

   pwp_win32.hstdout = GetStdHandle(STD_OUTPUT_HANDLE);

   { int ret=-1;
     const COORD sz = {80,50};
     const SMALL_RECT area = { 0,0,79,49 };

     ret &= SetConsoleScreenBufferSize(pwp_win32.hstdout,sz);
     ret &= SetConsoleWindowInfo(pwp_win32.hstdout,1,&area);

     if(!ret)
     {
        FreeConsole();
        AllocConsole();

        pwp_win32.hstdout = CreateConsoleScreenBuffer(
            GENERIC_WRITE, FILE_SHARE_WRITE, NULL,
            CONSOLE_TEXTMODE_BUFFER, NULL);

        SetConsoleActiveScreenBuffer(pwp_win32.hstdout);
        SetConsoleScreenBufferSize(pwp_win32.hstdout,sz);
        SetConsoleWindowInfo(pwp_win32.hstdout,1,&area);
     }

     SetConsoleTitle("pwp");
   }

     pwp_win32.buf=malloc(sizeof(CHAR_INFO)*80*50);

     pwplib.videobuf.width  = 80;
     pwplib.videobuf.height = 100;

     pwplib.dump_attr=win32con_dump_attr;

     conv_init(2,0,0);

//   {int i=0;for(;i<20;i++)pwplib.setup[i]=0;}
/*
     tty_init();
     pwplib.setup[SETUP_TRANS] =
     pwplib.setup[SETUP_COLORS] =
     pwplib.setup[SETUP_RASTER] = -1;
     pwplib.setup[SETUP_HALVE]=1;
     conv_init(2,0,0);
*/
     pwplib.dump_attr=win32con_dump_attr;
     
     return 1;
}

#endif