Ignore:
Timestamp:
Jun 17, 1999, 8:22:43 PM (26 years ago)
Author:
phaller
Message:

Fix: major restructuring of Open32 handle management, HandleManager

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/console2.h

    r99 r111  
    1 /* $Id: console2.h,v 1.5 1999-06-10 19:11:30 phaller Exp $ */
     1/* $Id: console2.h,v 1.6 1999-06-17 18:21:41 phaller Exp $ */
    22
    33/*
     
    1616 * Remark                                                                    *
    1717 *****************************************************************************
    18 
    1918 */
    20 
    21 
    22 /*****************************************************************************
    23  * Resources                                                                 *
    24  *****************************************************************************/
    25 
    26 #include "consolerc.h"
    27 
    2819
    2920/*****************************************************************************
     
    3122 *****************************************************************************/
    3223
    33 //#include <win32type.h>
    34 #include "handlemanager.h"
    35 #include <console.h>
     24#pragma pack(4)
     25
     26#ifndef _OS2WIN_H_
     27typedef struct _COORD
     28{
     29    SHORT X;
     30    SHORT Y;
     31} COORD, *PCOORD;
     32#endif
     33
     34
     35typedef struct _SMALL_RECT
     36{
     37    SHORT Left;
     38    SHORT Top;
     39    SHORT Right;
     40    SHORT Bottom;
     41} SMALL_RECT, *PSMALL_RECT;
     42
     43
     44typedef struct _KEY_EVENT_RECORD
     45{
     46    BOOL bKeyDown;
     47    WORD wRepeatCount;
     48    WORD wVirtualKeyCode;
     49    WORD wVirtualScanCode;
     50    union
     51    {
     52        WCHAR UnicodeChar;
     53        CHAR   AsciiChar;
     54    } uChar;
     55    DWORD dwControlKeyState;
     56} KEY_EVENT_RECORD, *PKEY_EVENT_RECORD;
     57
     58
     59//
     60// ControlKeyState flags
     61//
     62
     63#define RIGHT_ALT_PRESSED     0x0001 // the right alt key is pressed.
     64#define LEFT_ALT_PRESSED      0x0002 // the left alt key is pressed.
     65#define RIGHT_CTRL_PRESSED    0x0004 // the right ctrl key is pressed.
     66#define LEFT_CTRL_PRESSED     0x0008 // the left ctrl key is pressed.
     67#define SHIFT_PRESSED         0x0010 // the shift key is pressed.
     68#define NUMLOCK_ON            0x0020 // the numlock light is on.
     69#define SCROLLLOCK_ON         0x0040 // the scrolllock light is on.
     70#define CAPSLOCK_ON           0x0080 // the capslock light is on.
     71#define ENHANCED_KEY          0x0100 // the key is enhanced.
     72
     73typedef struct _MOUSE_EVENT_RECORD
     74{
     75    COORD dwMousePosition;
     76    DWORD dwButtonState;
     77    DWORD dwControlKeyState;
     78    DWORD dwEventFlags;
     79} MOUSE_EVENT_RECORD, *PMOUSE_EVENT_RECORD;
     80
     81
     82//
     83// ButtonState flags
     84//
     85
     86#define FROM_LEFT_1ST_BUTTON_PRESSED    0x0001
     87#define RIGHTMOST_BUTTON_PRESSED        0x0002
     88#define FROM_LEFT_2ND_BUTTON_PRESSED    0x0004
     89#define FROM_LEFT_3RD_BUTTON_PRESSED    0x0008
     90#define FROM_LEFT_4TH_BUTTON_PRESSED    0x0010
     91
     92//
     93// EventFlags
     94//
     95
     96#define MOUSE_MOVED   0x0001
     97#define DOUBLE_CLICK  0x0002
     98
     99typedef struct _WINDOW_BUFFER_SIZE_RECORD
     100{
     101  COORD dwSize;
     102} WINDOW_BUFFER_SIZE_RECORD, *PWINDOW_BUFFER_SIZE_RECORD;
     103
     104typedef struct _MENU_EVENT_RECORD
     105{
     106  UINT dwCommandId;
     107} MENU_EVENT_RECORD, *PMENU_EVENT_RECORD;
     108
     109typedef struct _FOCUS_EVENT_RECORD
     110{
     111  BOOL bSetFocus;
     112} FOCUS_EVENT_RECORD, *PFOCUS_EVENT_RECORD;
     113
     114typedef struct _INPUT_RECORD
     115{
     116  WORD EventType;
     117  union
     118  {
     119    KEY_EVENT_RECORD          KeyEvent;
     120    MOUSE_EVENT_RECORD        MouseEvent;
     121    WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
     122    MENU_EVENT_RECORD         MenuEvent;
     123    FOCUS_EVENT_RECORD        FocusEvent;
     124  } Event;
     125} INPUT_RECORD, *PINPUT_RECORD;
     126
     127
     128//
     129//  EventType flags:
     130//
     131
     132#define KEY_EVENT         0x0001 // Event contains key event record
     133#define MOUSE_EVENT       0x0002 // Event contains mouse event record
     134#define WINDOW_BUFFER_SIZE_EVENT 0x0004 // Event contains window change event record
     135#define MENU_EVENT 0x0008 // Event contains menu event record
     136#define FOCUS_EVENT 0x0010 // event contains focus change
     137
     138typedef struct _CHAR_INFO
     139{
     140  union
     141  {
     142    WCHAR UnicodeChar;
     143    CHAR   AsciiChar;
     144   } Char;
     145   WORD Attributes;
     146} CHAR_INFO, *PCHAR_INFO;
     147
     148//
     149// Attributes flags:
     150//
     151
     152#define FOREGROUND_BLUE      0x0001 // text color contains blue.
     153#define FOREGROUND_GREEN     0x0002 // text color contains green.
     154#define FOREGROUND_RED       0x0004 // text color contains red.
     155#define FOREGROUND_INTENSITY 0x0008 // text color is intensified.
     156#define BACKGROUND_BLUE      0x0010 // background color contains blue.
     157#define BACKGROUND_GREEN     0x0020 // background color contains green.
     158#define BACKGROUND_RED       0x0040 // background color contains red.
     159#define BACKGROUND_INTENSITY 0x0080 // background color is intensified.
     160
     161
     162typedef struct _CONSOLE_SCREEN_BUFFER_INFO
     163{
     164  COORD      dwSize;
     165  COORD      dwCursorPosition;
     166  WORD       wAttributes;
     167  SMALL_RECT srWindow;
     168  COORD      dwMaximumWindowSize;
     169} CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;
     170
     171typedef struct _CONSOLE_CURSOR_INFO
     172{
     173  DWORD  dwSize;
     174  BOOL   bVisible;
     175} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
     176
     177//
     178// typedef for ctrl-c handler routines
     179//
     180
     181typedef BOOL (* __stdcall PHANDLER_ROUTINE)(DWORD CtrlType);    /*PLF Fri  97-06-20 17:17:42*/
     182
     183#define CTRL_C_EVENT        0
     184#define CTRL_BREAK_EVENT    1
     185#define CTRL_CLOSE_EVENT    2
     186// 3 is reserved!
     187// 4 is reserved!
     188#define CTRL_LOGOFF_EVENT   5
     189#define CTRL_SHUTDOWN_EVENT 6
     190
     191//
     192//  Input Mode flags:
     193//
     194
     195#define ENABLE_PROCESSED_INPUT 0x0001
     196#define ENABLE_LINE_INPUT      0x0002
     197#define ENABLE_ECHO_INPUT      0x0004
     198#define ENABLE_WINDOW_INPUT    0x0008
     199#define ENABLE_MOUSE_INPUT     0x0010
     200
     201//
     202// Output Mode flags:
     203//
     204
     205#define ENABLE_PROCESSED_OUTPUT    0x0001
     206#define ENABLE_WRAP_AT_EOL_OUTPUT  0x0002
     207
     208#pragma pack()
    36209
    37210
     
    40213 *****************************************************************************/
    41214
    42 
    43215#define CONSOLE_TEXTMODE_BUFFER 1
     216
     217#define SZ_CONSOLE_CLASS "WIN32CONSOLECLASS"
     218
     219
     220/* according to the updated AVIO documentation of Warp 4 */
     221#define MAX_OS2_ROWS           255
     222#define MAX_OS2_COLUMNS        255
     223#define FORMAT_CGA             1
     224#define CONSOLE_TIMER_ID       1
     225#define CONSOLE_INPUTQUEUESIZE 256
     226
     227
     228#define CONSOLECURSOR_HIDE         1
     229#define CONSOLECURSOR_SHOW         2
     230#define CONSOLECURSOR_BLINK        3
     231#define CONSOLECURSOR_OVERWRITTEN  4
     232
     233#define UM_CONSOLE_CREATE WM_USER + 0x1000
     234
     235
     236/* device request codes for use in the pseudo-device handlers */
     237#define DRQ_CONSOLE                        0x00010000
     238#define DRQ_FILLCONSOLEOUTPUTATTRIBUTE     DRQ_CONSOLE +  0
     239#define DRQ_FILLCONSOLEOUTPUTCHARACTERA    DRQ_CONSOLE +  1
     240#define DRQ_FILLCONSOLEOUTPUTCHARACTERW    DRQ_CONSOLE +  2
     241#define DRQ_FLUSHCONSOLEINPUTBUFFER        DRQ_CONSOLE +  3
     242#define DRQ_GETCONSOLECURSORINFO           DRQ_CONSOLE +  4
     243#define DRQ_GETCONSOLEMODE                 DRQ_CONSOLE +  5
     244#define DRQ_GETCONSOLESCREENBUFFERINFO     DRQ_CONSOLE +  6
     245#define DRQ_GETLARGESTCONSOLEWINDOWSIZE    DRQ_CONSOLE +  7
     246#define DRQ_GETNUMBEROFCONSOLEINPUTEVENTS  DRQ_CONSOLE +  8
     247#define DRQ_PEEKCONSOLEINPUTW              DRQ_CONSOLE +  9
     248#define DRQ_PEEKCONSOLEINPUTA              DRQ_CONSOLE + 10
     249#define DRQ_READCONSOLEA                   DRQ_CONSOLE + 11
     250#define DRQ_READCONSOLEW                   DRQ_CONSOLE + 12
     251#define DRQ_READCONSOLEINPUTA              DRQ_CONSOLE + 14
     252#define DRQ_READCONSOLEINPUTW              DRQ_CONSOLE + 15
     253#define DRQ_READCONSOLEOUTPUTA             DRQ_CONSOLE + 16
     254#define DRQ_READCONSOLEOUTPUTW             DRQ_CONSOLE + 17
     255#define DRQ_READCONSOLEOUTPUTATTRIBUTE     DRQ_CONSOLE + 18
     256#define DRQ_READCONSOLEOUTPUTCHARACTERA    DRQ_CONSOLE + 19
     257#define DRQ_READCONSOLEOUTPUTCHARACTERW    DRQ_CONSOLE + 20
     258#define DRQ_SCROLLCONSOLESCREENBUFFERA     DRQ_CONSOLE + 21
     259#define DRQ_SCROLLCONSOLESCREENBUFFERW     DRQ_CONSOLE + 22
     260#define DRQ_SETCONSOLEACTIVESCREENBUFFER   DRQ_CONSOLE + 23
     261#define DRQ_SETCONSOLECURSORINFO           DRQ_CONSOLE + 24
     262#define DRQ_SETCONSOLECURSORPOSITION       DRQ_CONSOLE + 25
     263#define DRQ_SETCONSOLEMODE                 DRQ_CONSOLE + 26
     264#define DRQ_SETCONSOLESCREENBUFFERSIZE     DRQ_CONSOLE + 27
     265#define DRQ_SETCONSOLETEXTATTRIBUTE        DRQ_CONSOLE + 28
     266#define DRQ_SETCONSOLEWINDOWINFO           DRQ_CONSOLE + 29
     267#define DRQ_WRITECONSOLEA                  DRQ_CONSOLE + 30
     268#define DRQ_WRITECONSOLEW                  DRQ_CONSOLE + 31
     269#define DRQ_WRITECONSOLEINPUTA             DRQ_CONSOLE + 32
     270#define DRQ_WRITECONSOLEINPUTW             DRQ_CONSOLE + 33
     271#define DRQ_WRITECONSOLEOUTPUTA            DRQ_CONSOLE + 34
     272#define DRQ_WRITECONSOLEOUTPUTW            DRQ_CONSOLE + 35
     273#define DRQ_WRITECONSOLEOUTPUTATTRIBUTE    DRQ_CONSOLE + 36
     274#define DRQ_WRITECONSOLEOUTPUTCHARACTERA   DRQ_CONSOLE + 37
     275#define DRQ_WRITECONSOLEOUTPUTCHARACTERW   DRQ_CONSOLE + 38
     276#define DRQ_INTERNAL_CONSOLEBUFFERMAP      DRQ_CONSOLE + 39
     277#define DRQ_INTERNAL_CONSOLECURSORSHOW     DRQ_CONSOLE + 40
     278#define DRQ_INTERNAL_CONSOLEADJUSTWINDOW   DRQ_CONSOLE + 41
     279
     280
     281#define COORD2ULONG(c) ((ULONG)( ((ULONG)c.X << 16) + (ULONG)c.Y))
     282#define ULONG2COORD(c,u) c.X = u >> 16; c.Y = u & 0x0000FFFF;
    44283
    45284
     
    72311
    73312
     313typedef struct _ConsoleOptions
     314{
     315  HMODULE hmodResources;                   /* module handle for PM resources */
     316
     317  BOOL  fTerminateAutomatically;       /* wait for window termination or not */
     318  BOOL  fSpeakerEnabled;               /* whether we process BEL 0x07 or not */
     319  ULONG ulSpeakerDuration;        /* duration and frequency for speaker beep */
     320  ULONG ulSpeakerFrequency;
     321  ULONG ulUpdateLimit;        /* when exceeding this line counter, automatic */
     322                                               /* screen update is performed */
     323
     324  BOOL  fSetWindowPosition;           /* TRUE if window has to be positioned */
     325
     326  COORD coordDefaultPosition;      /* default position of the console window */
     327  COORD coordDefaultSize;          /* default size     of the console window */
     328  COORD coordBufferSize;           /* size of the console buffer             */
     329
     330  BOOL  fQuickInsert;                         /* like NT's quick insert mode */
     331  BOOL  fInsertMode;                                          /* insert mode */
     332  BOOL  fMouseActions;                  /* like Warp 4's "mouse action" mode */
     333  BOOL  fToolbarActive;                   /* windows95-like toolbar on / off */
     334
     335  ULONG ulTabSize;                                         /* tabulator size */
     336
     337  UCHAR ucDefaultAttribute;                    /* the default text attribute */
     338
     339  UCHAR ucCursorDivisor;                /* cursor timer divisor for blinking */
     340
     341  ULONG ulConsoleThreadPriorityClass;       /* priority settings for message */
     342  ULONG ulConsoleThreadPriorityDelta;                              /* thread */
     343  ULONG ulAppThreadPriorityClass;       /* priority settings for application */
     344  ULONG ulAppThreadPriorityDelta;                                  /* thread */
     345
     346} ICONSOLEOPTIONS, *PICONSOLEOPTIONS;
     347
     348
     349
     350typedef struct _iConsoleGlobals
     351{
     352    TID    tidConsole;                             /* console message thread */
     353    HEV    hevConsole;                            /* console event semaphore */
     354    APIRET rcConsole;                /* initialization status of the console */
     355    HAB    hab;                                       /* anchor block handle */
     356    HMQ    hmq;               /* message queue handle for the console window */
     357    QMSG   qmsg;                           /* message for the console window */
     358    ULONG  flFrameFlags;                      /* frame window creation flags */
     359    PSZ    pszWindowTitle;                             /* name of the window */
     360    HWND   hwndFrame;                                 /* frame window handle */
     361    HWND   hwndClient;                               /* client window handle */
     362
     363    HWND   hwndHorzScroll;                /* handle of horizontal scroll bar */
     364    HWND   hwndVertScroll;                  /* handle of vertical scroll bar */
     365    BOOL   fHasVertScroll;            /* indicates if scrollbars are visible */
     366    BOOL   fHasHorzScroll;
     367
     368    HDC    hdcConsole;                             /* console device context */
     369    PFNWP  pfnwpFrameOriginal;            /* original frame window procedure */
     370
     371    HWND     hwndMenuConsole;                          /* console popup menu */
     372    HMODULE  hmodResource;           /* resources are stored in KERNEL32.DLL */
     373    HPOINTER hPtrConsole;                                    /* console icon */
     374
     375    HANDLE hConsoleBuffer;            /* handle of the active console buffer */
     376    HANDLE hConsoleBufferDefault;    /* handle of the default console buffer */
     377
     378    HVPS   hvpsConsole;                   /* console AVIO presentation space */
     379
     380    COORD  coordMaxWindowPels;              /* maximum window size in pixels */
     381    COORD  coordWindowSize;                   /* current console window size */
     382    COORD  coordWindowPos;                           /* scroller's positions */
     383
     384    SHORT  sCellCX; /* height and width of a avio cell with the current font */
     385    SHORT  sCellCY;
     386
     387    BOOL   fUpdateRequired; /* set to TRUE if next WM_TIMER shall update the */
     388                           /* AVIO presentation space from the consolebuffer */
     389
     390    ULONG  idTimer;                                      /* Timer identifier */
     391    ULONG  ulTimerFrequency;             /* cursor + blitter timer frequency */
     392    ULONG  ulTimerCursor;                 /* cursor loop counter for divisor */
     393
     394    ICONSOLEOPTIONS Options;           /* the console's options / properties */
     395
     396} ICONSOLEGLOBALS, *PICONSOLEGLOBALS;
     397
     398
     399typedef struct _iConsoleInput
     400{
     401  INPUT_RECORD arrInputRecord[CONSOLE_INPUTQUEUESIZE];       /* packet queue */
     402  HEV          hevInputQueue;             /* becomes posted if input arrives */
     403
     404  /* HMUTEX hmtxInputQueue; if queue corruption should occur ... */
     405
     406  ULONG        ulIndexFree;              /* index of first free event record */
     407  ULONG        ulIndexEvent;          /* index of first valid event in queue */
     408  ULONG        ulEvents;                        /* number of events in queue */
     409  DWORD        dwConsoleMode;                          /* input console mode */
     410} ICONSOLEINPUT, *PICONSOLEINPUT;
     411
     412
    74413
    75414/*****************************************************************************
     
    82421
    83422
    84 DWORD ConsoleInit(void);       /* creation of the console subsystem */
    85 
    86 DWORD ConsoleDevicesRegister(void);       /* create console devices */
    87 
    88 void  ConsoleWaitClose(void);      /* wait for user to close console */
    89 
    90 BOOL  ConsoleIsActive(void);  /* returns TRUE if console window open */
     423                                                   /* console message thread */
     424VOID   _Optlink iConsoleMsgThread    (void *pParameters);
     425
     426MRESULT EXPENTRY iConsoleWindowProc(HWND   hwnd,   /* window procedure */
     427                                          ULONG  msg,
     428                                          MPARAM mp1,
     429                                          MPARAM mp2);
     430
     431MRESULT EXPENTRY iConsoleFrameWindowProc(HWND   hwnd,
     432                                               ULONG  msg,
     433                                               MPARAM mp1,
     434                                               MPARAM mp2);
     435
     436void   iConsoleBufferMap           (PCONSOLEBUFFER pConsoleBuffer);
     437
     438void   iConsoleBufferScrollUp      (PCONSOLEBUFFER pConsoleBuffer,
     439                                          ULONG          ulLines);
     440
     441void   iConsoleBufferFillLine      (ULONG   ulPattern,
     442                                          PUSHORT pusTarget,
     443                                          ULONG   ulSize);
     444
     445APIRET iConsoleInputEventPush      (PINPUT_RECORD pInputRecord);
     446
     447APIRET iConsoleInputEventPop       (PINPUT_RECORD pInputRecord);
     448
     449APIRET iConsoleInputEventPushKey   (MPARAM mp1,
     450                                          MPARAM mp2);
     451
     452APIRET iConsoleInputEventPushMouse (ULONG  ulMessage,
     453                                          MPARAM mp1,
     454                                          MPARAM mp2);
     455
     456APIRET iConsoleInputEventPushWindow(COORD coordWindowSize);
     457
     458APIRET iConsoleInputEventPushMenu  (DWORD dwCommandId);
     459
     460APIRET iConsoleInputEventPushFocus (BOOL bSetFocus);
     461
     462ULONG  iConsoleInputQueryEvents    (void);
     463
     464void   iConsoleCursorShow          (PCONSOLEBUFFER pConsoleBuffer,
     465                                          ULONG          ulCursorMode);
     466
     467APIRET iConsoleFontQuery           (void);
     468
     469void   iConsoleAdjustWindow        (PCONSOLEBUFFER pConsoleBuffer);
     470
    91471
    92472#ifndef _OS2WIN_H
     
    295675#endif // _OS2WIN_H
    296676
    297 
    298677#ifdef __cplusplus
    299 }
     678  }
    300679#endif
    301680
    302 
    303 /*****************************************************************************
    304  * Forwarders                                                                *
    305  *****************************************************************************/
    306 
    307 #ifdef __cplusplus
    308 
    309 /*****************************************************************************
    310  * Win32 Console Subsystem Pseudo-Devices                                    *
    311  *****************************************************************************/
    312 
    313 
    314 /*****************************************************************************
    315  * ConsoleInput - manages a queue of window events fro keyboard, mouse, etc. *
    316  *****************************************************************************/
    317 
    318 class HMDeviceConsoleInClass : public HMDeviceHandler
    319 {
    320   protected:
    321     /* input queue */
    322     DWORD dwNumberOfInputEvents;   /* number of unread events in input queue */
    323 
    324   public:
    325     HMDeviceConsoleInClass(LPCSTR lpDeviceName)
    326       : HMDeviceHandler(lpDeviceName) {}
    327 
    328                        /* this is a handler method for calls to CreateFile() */
    329   virtual DWORD  CreateFile (LPCSTR        lpFileName,
    330                              PHMHANDLEDATA pHMHandleData,
    331                              PVOID         lpSecurityAttributes,
    332                              PHMHANDLEDATA pHMHandleDataTemplate);
    333 
    334                            /* this is a handler method for calls to ReadFile() */
    335   virtual DWORD  ReadFile   (PHMHANDLEDATA pHMHandleData,
    336                              LPCVOID       lpBuffer,
    337                              DWORD         nNumberOfBytesToRead,
    338                              LPDWORD       lpNumberOfBytesRead,
    339                              LPOVERLAPPED  lpOverlapped);
    340 
    341                         /* this is a handler method for calls to WriteFile() */
    342   virtual DWORD  WriteFile  (PHMHANDLEDATA pHMHandleData,
    343                              LPCVOID       lpBuffer,
    344                              DWORD         nNumberOfBytesToWrite,
    345                              LPDWORD       lpNumberOfBytesWritten,
    346                              LPOVERLAPPED  lpOverlapped);
    347 
    348   virtual DWORD  _DeviceRequest (PHMHANDLEDATA pHMHandleData,
    349                                  ULONG         ulRequestCode,
    350                                  ULONG         arg1,
    351                                  ULONG         arg2,
    352                                  ULONG         arg3,
    353                                  ULONG         arg4);
    354 
    355   /************************************
    356    * non-standard console I/O methods *
    357    ************************************/
    358 
    359   virtual BOOL  FlushConsoleInputBuffer(PHMHANDLEDATA pHMHandleData);
    360 
    361   virtual DWORD GetConsoleMode(PHMHANDLEDATA pHMHandleData,
    362                                LPDWORD       lpMode);
    363 
    364   virtual BOOL  GetNumberOfConsoleInputEvents(PHMHANDLEDATA pHMHandleData,
    365                                               LPDWORD       lpNumberOfEvents);
    366 
    367   virtual DWORD PeekConsoleInputA(PHMHANDLEDATA pHMHandleData,
    368                                   PINPUT_RECORD pirBuffer,
    369                                   DWORD         cInRecords,
    370                                   LPDWORD       lpcRead);
    371 
    372   virtual DWORD PeekConsoleInputW(PHMHANDLEDATA pHMHandleData,
    373                                   PINPUT_RECORD pirBuffer,
    374                                   DWORD         cInRecords,
    375                                   LPDWORD       lpcRead);
    376 
    377   virtual DWORD ReadConsoleA(PHMHANDLEDATA pHMHandleData,
    378                              CONST VOID*   lpvBuffer,
    379                              DWORD         cchToRead,
    380                              LPDWORD       lpcchRead,
    381                              LPVOID        lpvReserved);
    382 
    383   virtual DWORD ReadConsoleW(PHMHANDLEDATA pHMHandleData,
    384                              CONST VOID*   lpvBuffer,
    385                              DWORD         cchToRead,
    386                              LPDWORD       lpcchRead,
    387                              LPVOID        lpvReserved);
    388 
    389   virtual DWORD ReadConsoleInputA(PHMHANDLEDATA pHMHandleData,
    390                                   PINPUT_RECORD pirBuffer,
    391                                   DWORD         cInRecords,
    392                                   LPDWORD       lpcRead);
    393 
    394   virtual DWORD ReadConsoleInputW(PHMHANDLEDATA pHMHandleData,
    395                                   PINPUT_RECORD pirBuffer,
    396                                   DWORD         cInRecords,
    397                                   LPDWORD       lpcRead);
    398 
    399   virtual DWORD SetConsoleMode(PHMHANDLEDATA pHMHandleData,
    400                                DWORD         dwMode);
    401 
    402   virtual DWORD WriteConsoleInputA (PHMHANDLEDATA pHMHandleData,
    403                                     PINPUT_RECORD pirBuffer,
    404                                     DWORD         cInRecords,
    405                                     LPDWORD       lpcWritten);
    406 
    407   virtual DWORD WriteConsoleInputW (PHMHANDLEDATA pHMHandleData,
    408                                     PINPUT_RECORD pirBuffer,
    409                                     DWORD         cInRecords,
    410                                     LPDWORD       lpcWritten);
    411 
    412 };
    413 
    414 
    415 /*****************************************************************************
    416  * ConsoleOutput - redirects requests to the currently active buffer         *
    417  *****************************************************************************/
    418 
    419 class HMDeviceConsoleOutClass : public HMDeviceHandler
    420 {
    421   protected:
    422     HANDLE hConsoleBuffer;            /* handle to the active console buffer */
    423 
    424   public:
    425     HMDeviceConsoleOutClass(LPCSTR lpDeviceName)
    426       : HMDeviceHandler(lpDeviceName) {}
    427 
    428                        /* this is a handler method for calls to CreateFile() */
    429   virtual DWORD  CreateFile (LPCSTR        lpFileName,
    430                              PHMHANDLEDATA pHMHandleData,
    431                              PVOID         lpSecurityAttributes,
    432                              PHMHANDLEDATA pHMHandleDataTemplate);
    433 
    434                            /* this is a handler method for calls to ReadFile() */
    435   virtual DWORD  ReadFile   (PHMHANDLEDATA pHMHandleData,
    436                              LPCVOID       lpBuffer,
    437                              DWORD         nNumberOfBytesToRead,
    438                              LPDWORD       lpNumberOfBytesRead,
    439                              LPOVERLAPPED  lpOverlapped);
    440 
    441                         /* this is a handler method for calls to WriteFile() */
    442   virtual DWORD  WriteFile  (PHMHANDLEDATA pHMHandleData,
    443                              LPCVOID       lpBuffer,
    444                              DWORD         nNumberOfBytesToWrite,
    445                              LPDWORD       lpNumberOfBytesWritten,
    446                              LPOVERLAPPED  lpOverlapped);
    447 
    448 
    449                                                 /* handling non-standard I/O */
    450   virtual DWORD _DeviceRequest (PHMHANDLEDATA pHMHandleData,
    451                                 ULONG         ulRequestCode,
    452                                 ULONG         arg1,
    453                                 ULONG         arg2,
    454                                 ULONG         arg3,
    455                                 ULONG         arg4);
    456 };
    457 
    458 
    459 /*****************************************************************************
    460  * ConsoleBuffer - does all the writing to an internal line buffer array     *
    461  *                 if this buffer is the active one, also does a screen updt *
    462  *****************************************************************************/
    463 
    464 class HMDeviceConsoleBufferClass : public HMDeviceHandler
    465 {
    466   public:
    467     HMDeviceConsoleBufferClass(LPCSTR lpDeviceName)
    468       : HMDeviceHandler(lpDeviceName) {}
    469 
    470                        /* this is a handler method for calls to CreateFile() */
    471   virtual DWORD  CreateFile (LPCSTR        lpFileName,
    472                              PHMHANDLEDATA pHMHandleData,
    473                              PVOID         lpSecurityAttributes,
    474                              PHMHANDLEDATA pHMHandleDataTemplate);
    475 
    476                            /* this is a handler method for calls to ReadFile() */
    477   virtual DWORD  ReadFile   (PHMHANDLEDATA pHMHandleData,
    478                              LPCVOID       lpBuffer,
    479                              DWORD         nNumberOfBytesToRead,
    480                              LPDWORD       lpNumberOfBytesRead,
    481                              LPOVERLAPPED  lpOverlapped);
    482 
    483                         /* this is a handler method for calls to WriteFile() */
    484   virtual DWORD  WriteFile  (PHMHANDLEDATA pHMHandleData,
    485                              LPCVOID       lpBuffer,
    486                              DWORD         nNumberOfBytesToWrite,
    487                              LPDWORD       lpNumberOfBytesWritten,
    488                              LPOVERLAPPED  lpOverlapped);
    489 
    490   virtual DWORD  CloseHandle(PHMHANDLEDATA pHMHandleData);
    491 
    492   virtual DWORD  _DeviceRequest (PHMHANDLEDATA pHMHandleData,
    493                                  ULONG         ulRequestCode,
    494                                  ULONG         arg1,
    495                                  ULONG         arg2,
    496                                  ULONG         arg3,
    497                                  ULONG         arg4);
    498 
    499 
    500   /************************************
    501    * non-standard console I/O methods *
    502    ************************************/
    503 
    504   virtual DWORD  FillConsoleOutputAttribute(PHMHANDLEDATA pHMHandleData,
    505                                             WORD          wAttribute,
    506                                             DWORD         nLength,
    507                                             COORD         dwWriteCoord,
    508                                             LPDWORD       lpNumberOfAttrsWritten);
    509 
    510   virtual DWORD  FillConsoleOutputCharacterA(PHMHANDLEDATA pHMHandleData,
    511                                              UCHAR         ucCharacter,
    512                                              DWORD         nLength,
    513                                              COORD         dwWriteCoord,
    514                                              LPDWORD       lpNumberOfCharsWritten);
    515 
    516   virtual DWORD  FillConsoleOutputCharacterW(PHMHANDLEDATA pHMHandleData,
    517                                              WCHAR         wcCharacter,
    518                                              DWORD         nLength,
    519                                              COORD         dwWriteCoord,
    520                                              LPDWORD       lpNumberOfCharsWritten);
    521 
    522   virtual DWORD  GetConsoleCursorInfo(PHMHANDLEDATA        pHMHandleData,
    523                                       PCONSOLE_CURSOR_INFO pCCI);
    524 
    525   virtual DWORD  GetConsoleMode(PHMHANDLEDATA pHMHandleData,
    526                                 LPDWORD       lpMode);
    527 
    528   virtual DWORD  GetLargestConsoleWindowSize(PHMHANDLEDATA pHMHandleData);
    529 
    530   virtual DWORD  GetConsoleScreenBufferInfo(PHMHANDLEDATA               pHMHandleData,
    531                                             PCONSOLE_SCREEN_BUFFER_INFO pCSBI);
    532 
    533   virtual DWORD  ReadConsoleOutputA(PHMHANDLEDATA pHMHandleData,
    534                                     PCHAR_INFO    pchiDestBuffer,
    535                                     COORD         coordDestBufferSize,
    536                                     COORD         coordDestBufferCoord,
    537                                     PSMALL_RECT   psrctSourceRect);
    538 
    539   virtual DWORD  ReadConsoleOutputW(PHMHANDLEDATA pHMHandleData,
    540                                     PCHAR_INFO    pchiDestBuffer,
    541                                     COORD         coordDestBufferSize,
    542                                     COORD         coordDestBufferCoord,
    543                                     PSMALL_RECT   psrctSourceRect);
    544 
    545   virtual DWORD  ReadConsoleOutputAttribute(PHMHANDLEDATA pHMHandleData,
    546                                             LPWORD        lpwAttribute,
    547                                             DWORD         cReadCells,
    548                                             COORD         dwReadCoord,
    549                                             LPDWORD       lpcNumberRead);
    550 
    551   virtual DWORD  ReadConsoleOutputCharacterA(PHMHANDLEDATA pHMHandleData,
    552                                              LPTSTR        lpwReadBuffer,
    553                                              DWORD         cchRead,
    554                                              COORD         coordReadCoord,
    555                                              LPDWORD       lpcNumberRead);
    556 
    557   virtual DWORD  ReadConsoleOutputCharacterW(PHMHANDLEDATA pHMHandleData,
    558                                              LPWSTR        lpwReadBuffer,
    559                                              DWORD         cchRead,
    560                                              COORD         coordReadCoord,
    561                                              LPDWORD       lpcNumberRead);
    562 
    563   virtual DWORD  ScrollConsoleScreenBufferA(PHMHANDLEDATA pHMHandleData,
    564                                             PSMALL_RECT   psrctSourceRect,
    565                                             PSMALL_RECT   psrctClipRect,
    566                                             COORD         coordDestOrigin,
    567                                             PCHAR_INFO    pchiFill);
    568 
    569   virtual DWORD  ScrollConsoleScreenBufferW(PHMHANDLEDATA pHMHandleData,
    570                                             PSMALL_RECT   psrctSourceRect,
    571                                             PSMALL_RECT   psrctClipRect,
    572                                             COORD         coordDestOrigin,
    573                                             PCHAR_INFO    pchiFill);
    574 
    575   virtual DWORD  SetConsoleScreenBufferSize (PHMHANDLEDATA pHMHandleData,
    576                                              COORD         coordSize);
    577 
    578   virtual DWORD  SetConsoleCursorInfo(PHMHANDLEDATA        pHMHandleData,
    579                                       PCONSOLE_CURSOR_INFO pCCI);
    580 
    581   virtual DWORD  SetConsoleCursorPosition(PHMHANDLEDATA pHMHandleData,
    582                                           COORD         coordCursorPosition);
    583 
    584   virtual DWORD  SetConsoleMode(PHMHANDLEDATA pHMHandleData,
    585                                 DWORD         dwMode);
    586 
    587   virtual DWORD  SetConsoleTextAttribute    (PHMHANDLEDATA pHMHandleData,
    588                                              WORD          wAttr);
    589 
    590   virtual DWORD  SetConsoleActiveScreenBuffer(PHMHANDLEDATA pHMHandleData);
    591 
    592   virtual BOOL   SetConsoleWindowInfo(PHMHANDLEDATA pHMHandleData,
    593                                       BOOL          fAbsolute,
    594                                       PSMALL_RECT   psrctWindowRect);
    595 
    596   virtual DWORD  WriteConsoleA(PHMHANDLEDATA pHMHandleData,
    597                                CONST VOID*   lpvBuffer,
    598                                DWORD         cchToWrite,
    599                                LPDWORD       lpcchWritten,
    600                                LPVOID        lpvReserved);
    601 
    602   virtual DWORD  WriteConsoleW(PHMHANDLEDATA pHMHandleData,
    603                                CONST VOID*   lpvBuffer,
    604                                DWORD         cchToWrite,
    605                                LPDWORD       lpcchWritten,
    606                                LPVOID        lpvReserved);
    607 
    608   virtual DWORD  WriteConsoleOutputA(PHMHANDLEDATA pHMHandleData,
    609                                      PCHAR_INFO    pchiSrcBuffer,
    610                                      COORD         coordSrcBufferSize,
    611                                      COORD         coordSrcBufferCoord,
    612                                      PSMALL_RECT   psrctDestRect);
    613 
    614   virtual DWORD  WriteConsoleOutputW(PHMHANDLEDATA pHMHandleData,
    615                                      PCHAR_INFO    pchiSrcBuffer,
    616                                      COORD         coordSrcBufferSize,
    617                                      COORD         coordSrcBufferCoord,
    618                                      PSMALL_RECT   psrctDestRect);
    619 
    620   virtual DWORD  WriteConsoleOutputAttribute(PHMHANDLEDATA pHMHandleData,
    621                                              LPWORD        lpwAttribute,
    622                                              DWORD         cWriteCells,
    623                                              COORD         dwWriteCoord,
    624                                              LPDWORD       lpcWritten);
    625 
    626   virtual DWORD  WriteConsoleOutputCharacterA(PHMHANDLEDATA pHMHandleData,
    627                                               LPTSTR        lpWriteBuffer,
    628                                               DWORD         cchWrite,
    629                                               COORD         dwWriteCoord,
    630                                               LPDWORD       lpcWritten);
    631 
    632   virtual DWORD  WriteConsoleOutputCharacterW(PHMHANDLEDATA pHMHandleData,
    633                                               LPWSTR        lpWriteBuffer,
    634                                               DWORD         cchWrite,
    635                                               COORD         dwWriteCoord,
    636                                               LPDWORD       lpcWritten);
    637 };
    638 
    639 #endif
    640 
    641 
    642681#endif /* _CONSOLESUBSYSTEM_H_ */
Note: See TracChangeset for help on using the changeset viewer.