Mercurial > hg > forks > pwpunix
diff pwplib/win32con.c @ 0:acb5694e93d9
Initial import.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 18 May 2010 04:25:44 +0300 |
parents | |
children | 72d1c04c788b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pwplib/win32con.c Tue May 18 04:25:44 2010 +0300 @@ -0,0 +1,105 @@ +#include "config.h" + +#ifdef DRIVE_WIN32 + +#include "pwplib.h" + +#include <windows.h> + +/******************** vcsa code ********************/ + +struct{ + HANDLE hstdout; + COORD size; + + CHAR_INFO*buf; +}pwp_win32; + +/********************************************************/ + +void pwpwrite(char*z) +{ +/* fprintf(stderr,"%s\n",z); */ +} + +void win32con_dump_attr() +{ + 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); + } +} + +int win32con_probe() +{ + if(GetStdHandle(STD_OUTPUT_HANDLE) != INVALID_HANDLE_VALUE) + return 1; else return 0; +} + +int win32con_init() +{ + 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; +} + +#endif