OSDN Git Service

改行コードの修正
[heavyosecpu/HeavyOSECPU.git] / dpndenv.c
index 3c8a81e..54a520b 100644 (file)
--- a/dpndenv.c
+++ b/dpndenv.c
-#include "osecpu.h"
-
-
-#if (DRV_OSNUM == 0x0002)
-//
-// for Mac OSX 32-bit
-//
-#include <mach/mach.h>
-#include <Cocoa/Cocoa.h>
-
-void *mallocRWE(int bytes)
-{
-       void *p = malloc(bytes);
-       vm_protect(mach_task_self(), (vm_address_t) p, bytes, FALSE, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE);
-       return p;
-}
-
-NSApplication* app;
-
-@interface OSECPUView : NSView
-{
-       unsigned char *_buf;
-       int _sx;
-       int _sy;
-       CGContextRef _context;
-}
-
-- (id)initWithFrame:(NSRect)frameRect buf:(unsigned char *)buf sx:(int)sx sy:(int)sy;
-- (void)drawRect:(NSRect)rect;
-@end
-
-@implementation OSECPUView
-- (id)initWithFrame:(NSRect)frameRect buf:(unsigned char *)buf sx:(int)sx sy:(int)sy
-{
-       self = [super initWithFrame:frameRect];
-       if (self) {
-               _buf = buf;
-               _sx = sx;
-               _sy = sy;
-       }
-       return self;
-}
-
-- (void)drawRect:(NSRect)rect {
-       CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
-       _context = CGBitmapContextCreate (_buf, _sx, _sy, 8, 4 * _sx, colorSpace, (kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst));
-       CGImageRef image = CGBitmapContextCreateImage(_context);
-       CGContextRef currentContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
-       CGContextDrawImage(currentContext, NSRectToCGRect(rect), image);
-       
-       CFRelease(colorSpace);
-       CFRelease(image);
-}
-
-@end
-
-@interface Main : NSObject<NSWindowDelegate>
-{
-       int argc;
-       const unsigned char **argv;
-       char *winClosed;
-       OSECPUView *_view;
-}
-
-- (void)runApp;
-- (void)createThread:(int)_argc args:(const unsigned char **)_argv;
-- (BOOL)windowShouldClose:(id)sender;
-- (void)openWin:(unsigned char *)buf sx:(int)sx sy:(int)sy winClosed:(char *)_winClosed;
-- (void)flushWin:(NSRect)rect;
-@end
-
-@implementation Main
-- (void)runApp
-{
-       NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
-       HeavyOSECPUMain(argc, (char **)argv);
-       [NSApp terminate:self];
-       [pool release];
-}
-
-- (void)createThread : (int)_argc args:(const unsigned char **)_argv
-{
-       argc = _argc;
-       argv = _argv;
-       NSThread *thread = [[[NSThread alloc] initWithTarget:self selector:@selector(runApp) object:nil] autorelease];
-       [thread start];
-}
-
-- (BOOL)windowShouldClose:(id)sender
-{
-       *winClosed = 1;
-       return YES;
-}
-
-- (void)openWin:(unsigned char *)buf sx:(int)sx sy:(int) sy winClosed:(char *)_winClosed
-{
-       
-       NSWindow* window = [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, sx, sy) styleMask: NSTitledWindowMask | NSMiniaturizableWindowMask | NSClosableWindowMask backing: NSBackingStoreBuffered defer: NO];
-       [window setTitle: @"osecpu"];
-       [window center];
-       [window makeKeyAndOrderFront:nil];
-       [window setReleasedWhenClosed:YES];
-       window.delegate = self;
-       winClosed = _winClosed;
-       
-       _view = [[OSECPUView alloc] initWithFrame:NSMakeRect(0,0,sx,sy) buf:buf sx:sx sy:sy];
-       [window.contentView addSubview:_view];
-}
-
-- (void)flushWin : (NSRect)rect
-{
-       [_view drawRect:rect];
-}
-
-@end
-
-id objc_main;
-
-int main(int argc, char **argv)
-{
-       objc_main = [[Main alloc] init];
-       
-       NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
-       app = [[NSApplication alloc] init];
-       [objc_main createThread:argc args:(const unsigned char **)argv];
-       [app run];
-       [pool release];
-       return 0;
-}
-
-void drv_openWin(int sx, int sy, unsigned char *buf, char *winClosed)
-{
-       [objc_main openWin:buf sx:sx sy:sy winClosed:winClosed];
-}
-
-void drv_flshWin(int sx, int sy, int x0, int y0)
-{
-       [objc_main flushWin:NSMakeRect(x0,y0,sx,sy)];
-}
-
-void drv_sleep(int msec)
-{
-       [NSThread sleepForTimeInterval:0.001*msec];
-       return;
-}
-
-
-#elif (DRV_OSNUM == 0x0003)
-
-#error "Your OS is not supported."
-
-#elif (DRV_OSNUM == 0x0001)
-//
-// for Windows 32-bit
-//
-#include <windows.h>
-
-#define TIMER_ID                        1
-#define TIMER_INTERVAL         10
-
-struct BLD_WORK {
-       HINSTANCE hi;
-       HWND hw;
-       BITMAPINFO bmi;
-       int tmcount1, tmcount2, flags, smp; /* bit0: 終了 */
-       HANDLE mtx;
-       char *winClosed;
-};
-
-struct BLD_WORK bld_work;
-
-struct BL_WIN {
-       int xsiz, ysiz, *buf;
-};
-
-struct BL_WORK {
-       struct BL_WIN win;
-       jmp_buf jb;
-       int csiz_x, csiz_y, cx, cy, col0, col1, tabsiz, slctwin;
-       int tmcount, tmcount0, mod, rand_seed;
-       int *cbuf;
-       unsigned char *ftyp;
-       unsigned char **fptn;
-       int *ccol, *cbak;
-       int *kbuf, kbuf_rp, kbuf_wp, kbuf_c;
-};
-
-struct BL_WORK bl_work;
-
-#define BL_SIZ_KBUF                    8192
-
-#define BL_WAITKEYF            0x00000001
-#define BL_WAITKEYNF   0x00000002
-#define BL_WAITKEY             0x00000003
-#define BL_GETKEY              0x00000004
-#define BL_CLEARREP            0x00000008
-#define BL_DELFFF              0x00000010
-
-#define        BL_KEYMODE              0x00000000      // 作りかけ, make/remake/breakが見えるかどうか
-
-#define w      bl_work
-#define dw     bld_work
-
-void bld_openWin(int x, int y, char *winClosed);
-void bld_flshWin(int sx, int sy, int x0, int y0);
-LRESULT CALLBACK WndProc(HWND hw, unsigned int msg, WPARAM wp, LPARAM lp);
-void bl_cls();
-int bl_iCol(int i);
-void bl_readyWin(int n);
-
-static HANDLE threadhandle;
-
-int main(int argc, char **argv)
-{
-       // Program entry point
-       return HeavyOSECPUMain(argc, argv);
-}
-
-void *mallocRWE(int bytes)
-{
-       void *p = malloc(bytes);
-       DWORD dmy;
-       VirtualProtect(p, bytes, PAGE_EXECUTE_READWRITE, &dmy);
-       return p;
-}
-
-static int winthread(void *dmy)
-{
-       WNDCLASSEX wc;
-       RECT r;
-       int i, x, y;
-       MSG msg;
-       
-       x = dw.bmi.bmiHeader.biWidth;
-       y = -dw.bmi.bmiHeader.biHeight;
-       
-       wc.cbSize = sizeof (WNDCLASSEX);
-       wc.style = CS_HREDRAW | CS_VREDRAW;
-       wc.lpfnWndProc = WndProc;
-       wc.cbClsExtra = 0;
-       wc.cbWndExtra = 0;
-       wc.hInstance = dw.hi;
-       wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION),
-                                                               IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
-       wc.hIconSm = wc.hIcon;
-       wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW),
-                                                                       IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
-       wc.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;
-       wc.lpszMenuName = NULL;
-       wc.lpszClassName = L"WinClass";
-       if (RegisterClassEx(&wc) == 0)
-               return 1;
-       r.left = 0;
-       r.top = 0;
-       r.right = x;
-       r.bottom = y;
-       AdjustWindowRect(&r, WS_OVERLAPPEDWINDOW, FALSE);
-       x = r.right - r.left;
-       y = r.bottom - r.top;
-       
-       char *t = "osecpu";
-       
-       dw.hw = CreateWindowA("WinClass", t, WS_OVERLAPPEDWINDOW,
-                                                 CW_USEDEFAULT, CW_USEDEFAULT, x, y, NULL, NULL, dw.hi, NULL);
-       if (dw.hw == NULL)
-               return 1;
-       ShowWindow(dw.hw, SW_SHOW);
-       UpdateWindow(dw.hw);
-       SetTimer(dw.hw, TIMER_ID, TIMER_INTERVAL, NULL);
-       SetTimer(dw.hw, TIMER_ID + 1, TIMER_INTERVAL * 10, NULL);
-       SetTimer(dw.hw, TIMER_ID + 2, TIMER_INTERVAL * 100, NULL);
-       dw.flags |= 2 | 4;
-       
-       for (;;) {
-               i = GetMessage(&msg, NULL, 0, 0);
-               if (i == 0 || i == -1)  /* エラーもしくは終了メッセージ */
-                       break;
-               /* そのほかはとりあえずデフォルト処理で */
-               TranslateMessage(&msg);
-               DispatchMessage(&msg);
-       }
-       //      PostQuitMessage(0);
-       dw.flags |= 1; /* 終了, bld_waitNF()が見つける */
-       if (dw.winClosed != NULL)
-               *dw.winClosed = 1;
-       return 0;
-}
-
-void bld_openWin(int sx, int sy, char *winClosed)
-{
-       static int i;
-       
-       dw.bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
-       dw.bmi.bmiHeader.biWidth = sx;
-       dw.bmi.bmiHeader.biHeight = -sy;
-       dw.bmi.bmiHeader.biPlanes = 1;
-       dw.bmi.bmiHeader.biBitCount = 32;
-       dw.bmi.bmiHeader.biCompression = BI_RGB;
-       dw.winClosed = winClosed;
-       
-       threadhandle = CreateThread(NULL, 0, (void *)&winthread, NULL, 0, (void *)&i);
-       
-       return;
-}
-
-void drv_flshWin(int sx, int sy, int x0, int y0)
-{
-       InvalidateRect(dw.hw, NULL, FALSE);
-       UpdateWindow(dw.hw);
-       return;
-}
-
-LRESULT CALLBACK WndProc(HWND hw, unsigned int msg, WPARAM wp, LPARAM lp)
-{
-       int i, j;
-       if (msg == WM_PAINT) {
-               PAINTSTRUCT ps;
-               HDC hdc = BeginPaint(dw.hw, &ps);
-               SetDIBitsToDevice(hdc, 0, 0, w.win.xsiz, w.win.ysiz,
-                                                 0, 0, 0, w.win.ysiz, w.win.buf, &dw.bmi, DIB_RGB_COLORS);
-               EndPaint(dw.hw, &ps);
-       }
-       if (msg == WM_DESTROY) {
-               PostQuitMessage(0);
-               return 0;
-       }
-       if (msg == WM_TIMER && wp == TIMER_ID) {
-               w.tmcount += TIMER_INTERVAL;
-               return 0;
-       }
-       if (msg == WM_TIMER && wp == TIMER_ID + 1) {
-               dw.tmcount1 += TIMER_INTERVAL * 10;
-               w.tmcount = dw.tmcount1;
-               return 0;
-       }
-       if (msg == WM_TIMER && wp == TIMER_ID + 2) {
-               dw.tmcount2 += TIMER_INTERVAL * 100;
-               w.tmcount = dw.tmcount1 = dw.tmcount2;
-               return 0;
-       }
-       if (msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN) {
-               i = -1;
-               
-               if (wp == VK_RETURN)    i = KEY_ENTER;
-               if (wp == VK_ESCAPE)    i = KEY_ESC;
-               if (wp == VK_BACK)              i = KEY_BACKSPACE;
-               if (wp == VK_TAB)               i = KEY_TAB;
-               if (wp == VK_PRIOR)             i = KEY_PAGEUP;
-               if (wp == VK_NEXT)              i = KEY_PAGEDWN;
-               if (wp == VK_END)               i = KEY_END;
-               if (wp == VK_HOME)              i = KEY_HOME;
-               if (wp == VK_LEFT)              i = KEY_LEFT;
-               if (wp == VK_RIGHT)             i = KEY_RIGHT;
-               if (wp == VK_UP)                i = KEY_UP;
-               if (wp == VK_DOWN)              i = KEY_DOWN;
-               if (wp == VK_INSERT)    i = KEY_INS;
-               if (wp == VK_DELETE)    i = KEY_DEL;
-               j &= 0;
-               if ((GetKeyState(VK_LCONTROL) & (1 << 15)) != 0) j |= 1 << 17;
-               if ((GetKeyState(VK_LMENU)    & (1 << 15)) != 0) j |= 1 << 18;
-               if ((GetKeyState(VK_RCONTROL) & (1 << 15)) != 0) j |= 1 << 25;
-               if ((GetKeyState(VK_RMENU)    & (1 << 15)) != 0) j |= 1 << 26;
-               if ((GetKeyState(VK_RSHIFT)   & (1 << 15)) != 0) i |= 1 << 24;
-               if ((GetKeyState(VK_LSHIFT)   & (1 << 15)) != 0) i |= 1 << 16;
-               if ((GetKeyState(VK_NUMLOCK)  & (1 << 0)) != 0) i |= 1 << 22;
-               if ((GetKeyState(VK_CAPITAL)  & (1 << 0)) != 0) i |= 1 << 23;
-               if (j != 0) {
-                       if ('A' <= wp && wp <= 'Z') i = wp;
-               }
-               if (i != -1) {
-                       putKeybuf(i | j);
-                       //                      bl_putKeyB(1, &i);
-                       return 0;
-               }
-       }
-       if (msg == WM_KEYUP) {
-               i = 0xfff;
-               //              bl_putKeyB(1, &i);
-       }
-       if (msg == WM_CHAR) {
-               i = 0;
-               if (' ' <= wp && wp <= 0x7e) {
-                       i = wp;
-                       j &= 0;
-                       if ((GetKeyState(VK_LCONTROL) & (1 << 15)) != 0) j |= 1 << 17;
-                       if ((GetKeyState(VK_LMENU)    & (1 << 15)) != 0) j |= 1 << 18;
-                       if ((GetKeyState(VK_RCONTROL) & (1 << 15)) != 0) j |= 1 << 25;
-                       if ((GetKeyState(VK_RMENU)    & (1 << 15)) != 0) j |= 1 << 26;
-                       if ((GetKeyState(VK_RSHIFT)   & (1 << 15)) != 0) i |= 1 << 24;
-                       if ((GetKeyState(VK_LSHIFT)   & (1 << 15)) != 0) i |= 1 << 16;
-                       if ((GetKeyState(VK_NUMLOCK)  & (1 << 0)) != 0) i |= 1 << 22;
-                       if ((GetKeyState(VK_CAPITAL)  & (1 << 0)) != 0) i |= 1 << 23;
-                       if (('A' <= wp && wp <= 'Z') || ('a' <= wp && wp <= 'z')) {
-                               if (j != 0) {
-                                       i |= j;
-                                       i &= ~0x20;
-                               }
-                       }
-                       putKeybuf(i);
-                       //                      bl_putKeyB(1, &i);
-                       return 0;
-               }
-       }
-       return DefWindowProc(hw, msg, wp, lp);
-}
-
-void drv_openWin(int sx, int sy, UCHAR *buf, char *winClosed)
-{
-       w.win.buf = (int *)buf;
-       w.win.xsiz = sx;
-       w.win.ysiz = sy;
-       bld_openWin(sx, sy, winClosed);
-       return;
-}
-
-void drv_sleep(int msec)
-{
-       Sleep(msec);
-       //      MsgWaitForMultipleObjects(1, &threadhandle, FALSE, msec, QS_ALLINPUT);
-       /* 勉強不足でまだ書き方が分かりません! */
-       return;
-}
-
-#else
-
-#error "Illegal OS type. Edit osecpu.h and look at DRV_OSNUM"
-
+#include "osecpu.h"\r
+\r
+\r
+#if (DRV_OSNUM == 0x0002)\r
+//\r
+// for Mac OSX 32-bit\r
+//\r
+#include <mach/mach.h>\r
+#include <Cocoa/Cocoa.h>\r
+\r
+void *mallocRWE(int bytes)\r
+{\r
+       void *p = malloc(bytes);\r
+       vm_protect(mach_task_self(), (vm_address_t) p, bytes, FALSE, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE);\r
+       return p;\r
+}\r
+\r
+NSApplication* app;\r
+\r
+@interface OSECPUView : NSView\r
+{\r
+       unsigned char *_buf;\r
+       int _sx;\r
+       int _sy;\r
+       CGContextRef _context;\r
+}\r
+\r
+- (id)initWithFrame:(NSRect)frameRect buf:(unsigned char *)buf sx:(int)sx sy:(int)sy;\r
+- (void)drawRect:(NSRect)rect;\r
+@end\r
+\r
+@implementation OSECPUView\r
+- (id)initWithFrame:(NSRect)frameRect buf:(unsigned char *)buf sx:(int)sx sy:(int)sy\r
+{\r
+       self = [super initWithFrame:frameRect];\r
+       if (self) {\r
+               _buf = buf;\r
+               _sx = sx;\r
+               _sy = sy;\r
+       }\r
+       return self;\r
+}\r
+\r
+- (void)drawRect:(NSRect)rect {\r
+       CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();\r
+       _context = CGBitmapContextCreate (_buf, _sx, _sy, 8, 4 * _sx, colorSpace, (kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst));\r
+       CGImageRef image = CGBitmapContextCreateImage(_context);\r
+       CGContextRef currentContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];\r
+       CGContextDrawImage(currentContext, NSRectToCGRect(rect), image);\r
+       \r
+       CFRelease(colorSpace);\r
+       CFRelease(image);\r
+}\r
+\r
+@end\r
+\r
+@interface Main : NSObject<NSWindowDelegate>\r
+{\r
+       int argc;\r
+       const unsigned char **argv;\r
+       char *winClosed;\r
+       OSECPUView *_view;\r
+}\r
+\r
+- (void)runApp;\r
+- (void)createThread:(int)_argc args:(const unsigned char **)_argv;\r
+- (BOOL)windowShouldClose:(id)sender;\r
+- (void)openWin:(unsigned char *)buf sx:(int)sx sy:(int)sy winClosed:(char *)_winClosed;\r
+- (void)flushWin:(NSRect)rect;\r
+@end\r
+\r
+@implementation Main\r
+- (void)runApp\r
+{\r
+       NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];\r
+       HeavyOSECPUMain(argc, (char **)argv);\r
+       [NSApp terminate:self];\r
+       [pool release];\r
+}\r
+\r
+- (void)createThread : (int)_argc args:(const unsigned char **)_argv\r
+{\r
+       argc = _argc;\r
+       argv = _argv;\r
+       NSThread *thread = [[[NSThread alloc] initWithTarget:self selector:@selector(runApp) object:nil] autorelease];\r
+       [thread start];\r
+}\r
+\r
+- (BOOL)windowShouldClose:(id)sender\r
+{\r
+       *winClosed = 1;\r
+       return YES;\r
+}\r
+\r
+- (void)openWin:(unsigned char *)buf sx:(int)sx sy:(int) sy winClosed:(char *)_winClosed\r
+{\r
+       \r
+       NSWindow* window = [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, sx, sy) styleMask: NSTitledWindowMask | NSMiniaturizableWindowMask | NSClosableWindowMask backing: NSBackingStoreBuffered defer: NO];\r
+       [window setTitle: @"osecpu"];\r
+       [window center];\r
+       [window makeKeyAndOrderFront:nil];\r
+       [window setReleasedWhenClosed:YES];\r
+       window.delegate = self;\r
+       winClosed = _winClosed;\r
+       \r
+       _view = [[OSECPUView alloc] initWithFrame:NSMakeRect(0,0,sx,sy) buf:buf sx:sx sy:sy];\r
+       [window.contentView addSubview:_view];\r
+}\r
+\r
+- (void)flushWin : (NSRect)rect\r
+{\r
+       [_view drawRect:rect];\r
+}\r
+\r
+@end\r
+\r
+id objc_main;\r
+\r
+int main(int argc, char **argv)\r
+{\r
+       objc_main = [[Main alloc] init];\r
+       \r
+       NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];\r
+       app = [[NSApplication alloc] init];\r
+       [objc_main createThread:argc args:(const unsigned char **)argv];\r
+       [app run];\r
+       [pool release];\r
+       return 0;\r
+}\r
+\r
+void drv_openWin(int sx, int sy, unsigned char *buf, char *winClosed)\r
+{\r
+       [objc_main openWin:buf sx:sx sy:sy winClosed:winClosed];\r
+}\r
+\r
+void drv_flshWin(int sx, int sy, int x0, int y0)\r
+{\r
+       [objc_main flushWin:NSMakeRect(x0,y0,sx,sy)];\r
+}\r
+\r
+void drv_sleep(int msec)\r
+{\r
+       [NSThread sleepForTimeInterval:0.001*msec];\r
+       return;\r
+}\r
+\r
+\r
+#elif (DRV_OSNUM == 0x0003)\r
+\r
+#error "Your OS is not supported."\r
+\r
+#elif (DRV_OSNUM == 0x0001)\r
+//\r
+// for Windows 32-bit\r
+//\r
+#include <windows.h>\r
+\r
+#define TIMER_ID                        1\r
+#define TIMER_INTERVAL         10\r
+\r
+struct BLD_WORK {\r
+       HINSTANCE hi;\r
+       HWND hw;\r
+       BITMAPINFO bmi;\r
+       int tmcount1, tmcount2, flags, smp; /* bit0: 終了 */\r
+       HANDLE mtx;\r
+       char *winClosed;\r
+};\r
+\r
+struct BLD_WORK bld_work;\r
+\r
+struct BL_WIN {\r
+       int xsiz, ysiz, *buf;\r
+};\r
+\r
+struct BL_WORK {\r
+       struct BL_WIN win;\r
+       jmp_buf jb;\r
+       int csiz_x, csiz_y, cx, cy, col0, col1, tabsiz, slctwin;\r
+       int tmcount, tmcount0, mod, rand_seed;\r
+       int *cbuf;\r
+       unsigned char *ftyp;\r
+       unsigned char **fptn;\r
+       int *ccol, *cbak;\r
+       int *kbuf, kbuf_rp, kbuf_wp, kbuf_c;\r
+};\r
+\r
+struct BL_WORK bl_work;\r
+\r
+#define BL_SIZ_KBUF                    8192\r
+\r
+#define BL_WAITKEYF            0x00000001\r
+#define BL_WAITKEYNF   0x00000002\r
+#define BL_WAITKEY             0x00000003\r
+#define BL_GETKEY              0x00000004\r
+#define BL_CLEARREP            0x00000008\r
+#define BL_DELFFF              0x00000010\r
+\r
+#define        BL_KEYMODE              0x00000000      // 作りかけ, make/remake/breakが見えるかどうか\r
+\r
+#define w      bl_work\r
+#define dw     bld_work\r
+\r
+void bld_openWin(int x, int y, char *winClosed);\r
+void bld_flshWin(int sx, int sy, int x0, int y0);\r
+LRESULT CALLBACK WndProc(HWND hw, unsigned int msg, WPARAM wp, LPARAM lp);\r
+void bl_cls();\r
+int bl_iCol(int i);\r
+void bl_readyWin(int n);\r
+\r
+static HANDLE threadhandle;\r
+\r
+int main(int argc, char **argv)\r
+{\r
+       // Program entry point\r
+       return HeavyOSECPUMain(argc, argv);\r
+}\r
+\r
+void *mallocRWE(int bytes)\r
+{\r
+       void *p = malloc(bytes);\r
+       DWORD dmy;\r
+       VirtualProtect(p, bytes, PAGE_EXECUTE_READWRITE, &dmy);\r
+       return p;\r
+}\r
+\r
+static int winthread(void *dmy)\r
+{\r
+       WNDCLASSEX wc;\r
+       RECT r;\r
+       int i, x, y;\r
+       MSG msg;\r
+       \r
+       x = dw.bmi.bmiHeader.biWidth;\r
+       y = -dw.bmi.bmiHeader.biHeight;\r
+       \r
+       wc.cbSize = sizeof (WNDCLASSEX);\r
+       wc.style = CS_HREDRAW | CS_VREDRAW;\r
+       wc.lpfnWndProc = WndProc;\r
+       wc.cbClsExtra = 0;\r
+       wc.cbWndExtra = 0;\r
+       wc.hInstance = dw.hi;\r
+       wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION),\r
+                                                               IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);\r
+       wc.hIconSm = wc.hIcon;\r
+       wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW),\r
+                                                                       IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);\r
+       wc.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;\r
+       wc.lpszMenuName = NULL;\r
+       wc.lpszClassName = L"WinClass";\r
+       if (RegisterClassEx(&wc) == 0)\r
+               return 1;\r
+       r.left = 0;\r
+       r.top = 0;\r
+       r.right = x;\r
+       r.bottom = y;\r
+       AdjustWindowRect(&r, WS_OVERLAPPEDWINDOW, FALSE);\r
+       x = r.right - r.left;\r
+       y = r.bottom - r.top;\r
+       \r
+       char *t = "osecpu";\r
+       \r
+       dw.hw = CreateWindowA("WinClass", t, WS_OVERLAPPEDWINDOW,\r
+                                                 CW_USEDEFAULT, CW_USEDEFAULT, x, y, NULL, NULL, dw.hi, NULL);\r
+       if (dw.hw == NULL)\r
+               return 1;\r
+       ShowWindow(dw.hw, SW_SHOW);\r
+       UpdateWindow(dw.hw);\r
+       SetTimer(dw.hw, TIMER_ID, TIMER_INTERVAL, NULL);\r
+       SetTimer(dw.hw, TIMER_ID + 1, TIMER_INTERVAL * 10, NULL);\r
+       SetTimer(dw.hw, TIMER_ID + 2, TIMER_INTERVAL * 100, NULL);\r
+       dw.flags |= 2 | 4;\r
+       \r
+       for (;;) {\r
+               i = GetMessage(&msg, NULL, 0, 0);\r
+               if (i == 0 || i == -1)  /* エラーもしくは終了メッセージ */\r
+                       break;\r
+               /* そのほかはとりあえずデフォルト処理で */\r
+               TranslateMessage(&msg);\r
+               DispatchMessage(&msg);\r
+       }\r
+       //      PostQuitMessage(0);\r
+       dw.flags |= 1; /* 終了, bld_waitNF()が見つける */\r
+       if (dw.winClosed != NULL)\r
+               *dw.winClosed = 1;\r
+       return 0;\r
+}\r
+\r
+void bld_openWin(int sx, int sy, char *winClosed)\r
+{\r
+       static int i;\r
+       \r
+       dw.bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);\r
+       dw.bmi.bmiHeader.biWidth = sx;\r
+       dw.bmi.bmiHeader.biHeight = -sy;\r
+       dw.bmi.bmiHeader.biPlanes = 1;\r
+       dw.bmi.bmiHeader.biBitCount = 32;\r
+       dw.bmi.bmiHeader.biCompression = BI_RGB;\r
+       dw.winClosed = winClosed;\r
+       \r
+       threadhandle = CreateThread(NULL, 0, (void *)&winthread, NULL, 0, (void *)&i);\r
+       \r
+       return;\r
+}\r
+\r
+void drv_flshWin(int sx, int sy, int x0, int y0)\r
+{\r
+       InvalidateRect(dw.hw, NULL, FALSE);\r
+       UpdateWindow(dw.hw);\r
+       return;\r
+}\r
+\r
+LRESULT CALLBACK WndProc(HWND hw, unsigned int msg, WPARAM wp, LPARAM lp)\r
+{\r
+       int i, j;\r
+       if (msg == WM_PAINT) {\r
+               PAINTSTRUCT ps;\r
+               HDC hdc = BeginPaint(dw.hw, &ps);\r
+               SetDIBitsToDevice(hdc, 0, 0, w.win.xsiz, w.win.ysiz,\r
+                                                 0, 0, 0, w.win.ysiz, w.win.buf, &dw.bmi, DIB_RGB_COLORS);\r
+               EndPaint(dw.hw, &ps);\r
+       }\r
+       if (msg == WM_DESTROY) {\r
+               PostQuitMessage(0);\r
+               return 0;\r
+       }\r
+       if (msg == WM_TIMER && wp == TIMER_ID) {\r
+               w.tmcount += TIMER_INTERVAL;\r
+               return 0;\r
+       }\r
+       if (msg == WM_TIMER && wp == TIMER_ID + 1) {\r
+               dw.tmcount1 += TIMER_INTERVAL * 10;\r
+               w.tmcount = dw.tmcount1;\r
+               return 0;\r
+       }\r
+       if (msg == WM_TIMER && wp == TIMER_ID + 2) {\r
+               dw.tmcount2 += TIMER_INTERVAL * 100;\r
+               w.tmcount = dw.tmcount1 = dw.tmcount2;\r
+               return 0;\r
+       }\r
+       if (msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN) {\r
+               i = -1;\r
+               \r
+               if (wp == VK_RETURN)    i = KEY_ENTER;\r
+               if (wp == VK_ESCAPE)    i = KEY_ESC;\r
+               if (wp == VK_BACK)              i = KEY_BACKSPACE;\r
+               if (wp == VK_TAB)               i = KEY_TAB;\r
+               if (wp == VK_PRIOR)             i = KEY_PAGEUP;\r
+               if (wp == VK_NEXT)              i = KEY_PAGEDWN;\r
+               if (wp == VK_END)               i = KEY_END;\r
+               if (wp == VK_HOME)              i = KEY_HOME;\r
+               if (wp == VK_LEFT)              i = KEY_LEFT;\r
+               if (wp == VK_RIGHT)             i = KEY_RIGHT;\r
+               if (wp == VK_UP)                i = KEY_UP;\r
+               if (wp == VK_DOWN)              i = KEY_DOWN;\r
+               if (wp == VK_INSERT)    i = KEY_INS;\r
+               if (wp == VK_DELETE)    i = KEY_DEL;\r
+               j &= 0;\r
+               if ((GetKeyState(VK_LCONTROL) & (1 << 15)) != 0) j |= 1 << 17;\r
+               if ((GetKeyState(VK_LMENU)    & (1 << 15)) != 0) j |= 1 << 18;\r
+               if ((GetKeyState(VK_RCONTROL) & (1 << 15)) != 0) j |= 1 << 25;\r
+               if ((GetKeyState(VK_RMENU)    & (1 << 15)) != 0) j |= 1 << 26;\r
+               if ((GetKeyState(VK_RSHIFT)   & (1 << 15)) != 0) i |= 1 << 24;\r
+               if ((GetKeyState(VK_LSHIFT)   & (1 << 15)) != 0) i |= 1 << 16;\r
+               if ((GetKeyState(VK_NUMLOCK)  & (1 << 0)) != 0) i |= 1 << 22;\r
+               if ((GetKeyState(VK_CAPITAL)  & (1 << 0)) != 0) i |= 1 << 23;\r
+               if (j != 0) {\r
+                       if ('A' <= wp && wp <= 'Z') i = wp;\r
+               }\r
+               if (i != -1) {\r
+                       putKeybuf(i | j);\r
+                       //                      bl_putKeyB(1, &i);\r
+                       return 0;\r
+               }\r
+       }\r
+       if (msg == WM_KEYUP) {\r
+               i = 0xfff;\r
+               //              bl_putKeyB(1, &i);\r
+       }\r
+       if (msg == WM_CHAR) {\r
+               i = 0;\r
+               if (' ' <= wp && wp <= 0x7e) {\r
+                       i = wp;\r
+                       j &= 0;\r
+                       if ((GetKeyState(VK_LCONTROL) & (1 << 15)) != 0) j |= 1 << 17;\r
+                       if ((GetKeyState(VK_LMENU)    & (1 << 15)) != 0) j |= 1 << 18;\r
+                       if ((GetKeyState(VK_RCONTROL) & (1 << 15)) != 0) j |= 1 << 25;\r
+                       if ((GetKeyState(VK_RMENU)    & (1 << 15)) != 0) j |= 1 << 26;\r
+                       if ((GetKeyState(VK_RSHIFT)   & (1 << 15)) != 0) i |= 1 << 24;\r
+                       if ((GetKeyState(VK_LSHIFT)   & (1 << 15)) != 0) i |= 1 << 16;\r
+                       if ((GetKeyState(VK_NUMLOCK)  & (1 << 0)) != 0) i |= 1 << 22;\r
+                       if ((GetKeyState(VK_CAPITAL)  & (1 << 0)) != 0) i |= 1 << 23;\r
+                       if (('A' <= wp && wp <= 'Z') || ('a' <= wp && wp <= 'z')) {\r
+                               if (j != 0) {\r
+                                       i |= j;\r
+                                       i &= ~0x20;\r
+                               }\r
+                       }\r
+                       putKeybuf(i);\r
+                       //                      bl_putKeyB(1, &i);\r
+                       return 0;\r
+               }\r
+       }\r
+       return DefWindowProc(hw, msg, wp, lp);\r
+}\r
+\r
+void drv_openWin(int sx, int sy, UCHAR *buf, char *winClosed)\r
+{\r
+       w.win.buf = (int *)buf;\r
+       w.win.xsiz = sx;\r
+       w.win.ysiz = sy;\r
+       bld_openWin(sx, sy, winClosed);\r
+       return;\r
+}\r
+\r
+void drv_sleep(int msec)\r
+{\r
+       Sleep(msec);\r
+       //      MsgWaitForMultipleObjects(1, &threadhandle, FALSE, msec, QS_ALLINPUT);\r
+       /* 勉強不足でまだ書き方が分かりません! */\r
+       return;\r
+}\r
+\r
+#else\r
+\r
+#error "Illegal OS type. Edit osecpu.h and look at DRV_OSNUM"\r
+\r
 #endif
\ No newline at end of file