Annotation of mstools/samples/console/flush.c, revision 1.1

1.1     ! root        1: #include <windows.h>
        !             2: #include "console.h"
        !             3: 
        !             4: /*********************************************************************
        !             5: * FUNCTION: demoFlush(HANDLE hConOut)                                *
        !             6: *                                                                    *
        !             7: * PURPOSE: demonstrate FlushConsoleInputBuffer. Slowly read from the *
        !             8: *          iput queue, allowing a backlog of input events to start   *
        !             9: *          filling the queue. Flush the input queue after outputting *
        !            10: *          every fifth character.                                    *
        !            11: *                                                                    *
        !            12: * INPUT: the output console handle to write to                       *
        !            13: *********************************************************************/
        !            14: 
        !            15: void demoFlush(HANDLE hConOut)
        !            16: {
        !            17:   HANDLE hStdIn;
        !            18:   INPUT_RECORD InputBuffer;
        !            19:   DWORD dwInputEvents;
        !            20:   int i = 0;
        !            21:   BOOL bSuccess;
        !            22:   DWORD dwBytesWritten;
        !            23: 
        !            24:   setConTitle(__FILE__);
        !            25:   hStdIn = GetStdHandle(STD_INPUT_HANDLE);
        !            26:   PERR((int) hStdIn != -1, "GetStdHandle");
        !            27:   myPuts(hConOut, "Type a number of characters quickly. I will read 5\n"
        !            28:                   "characters from the input buffer with a Sleep() delay\n"
        !            29:                   "which will allow it to fill with characters. After 5\n"
        !            30:                   "characters I will flush the input buffer with\n"
        !            31:                   "FlushConsoleInputBuffer and restart the sequence. Note\n"
        !            32:                   "that any characters you've typed that haven't been read\n"
        !            33:                   "yet are lost due to the flush.\n"
        !            34:                   "Enter characters (hit ESC to return):");
        !            35:   for(;;)
        !            36:     {
        !            37:     bSuccess = ReadConsoleInput(hStdIn, &InputBuffer, 1, &dwInputEvents);
        !            38:     PERR(bSuccess, "ReadConsoleInput");
        !            39:     /* is it a key down event? */
        !            40:     if (InputBuffer.EventType == KEY_EVENT && 
        !            41:         InputBuffer.Event.KeyEvent.bKeyDown)
        !            42:       {
        !            43:       if (InputBuffer.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)
        !            44:         return;
        !            45:       /* write the ascii character out to the console */
        !            46:       bSuccess = WriteFile(hConOut,
        !            47:           &InputBuffer.Event.KeyEvent.uChar.AsciiChar,
        !            48:           1, &dwBytesWritten, NULL);
        !            49:       PERR(bSuccess, "WriteFile");
        !            50:       Sleep(1000); /* pause for 1s */
        !            51:       i++;
        !            52:       if (i > 5)
        !            53:         {
        !            54:         /* flush the input buffer */
        !            55:         bSuccess = FlushConsoleInputBuffer(hStdIn);
        !            56:         PERR(bSuccess, "FlushConsoleInputBuffer");
        !            57:         i = 0;
        !            58:         }
        !            59:       } /* if */
        !            60:     } /* while */
        !            61:   return;
        !            62: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.