|
|
1.1 ! root 1: /*----------------------------------------- ! 2: AVIO2.C -- Advanced VIO Display of Text ! 3: -----------------------------------------*/ ! 4: ! 5: #define INCL_WIN ! 6: #define INCL_VIO ! 7: #define INCL_AVIO ! 8: #include <os2.h> ! 9: ! 10: #define VIDEOWIDTH 40 ! 11: ! 12: typedef struct ! 13: { ! 14: CHAR ch ; ! 15: CHAR attr ; ! 16: } ! 17: VIDEO [][VIDEOWIDTH] ; ! 18: ! 19: typedef VIDEO FAR *PVIDEO ; ! 20: ! 21: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ; ! 22: ! 23: HAB hab ; ! 24: ! 25: int main (void) ! 26: { ! 27: static CHAR szClientClass [] = "Avio2" ; ! 28: static ULONG flFrameFlags = FCF_TITLEBAR | FCF_SYSMENU | ! 29: FCF_SIZEBORDER | FCF_MINMAX | ! 30: FCF_SHELLPOSITION | FCF_TASKLIST ; ! 31: HMQ hmq ; ! 32: HWND hwndFrame, hwndClient ; ! 33: QMSG qmsg ; ! 34: ! 35: hab = WinInitialize (0) ; ! 36: hmq = WinCreateMsgQueue (hab, 0) ; ! 37: ! 38: WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ; ! 39: ! 40: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE, ! 41: &flFrameFlags, szClientClass, NULL, ! 42: 0L, NULL, 0, &hwndClient) ; ! 43: ! 44: WinSendMsg (hwndFrame, WM_SETICON, ! 45: WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE), ! 46: NULL) ; ! 47: ! 48: while (WinGetMsg (hab, &qmsg, NULL, 0, 0)) ! 49: WinDispatchMsg (hab, &qmsg) ; ! 50: ! 51: WinDestroyWindow (hwndFrame) ; ! 52: WinDestroyMsgQueue (hmq) ; ! 53: WinTerminate (hab) ; ! 54: return 0 ; ! 55: } ! 56: ! 57: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2) ! 58: { ! 59: static CHAR *aszAlice [] = { ! 60: "Alice was beginning to get very tired of", ! 61: "sitting by her sister on the bank and of", ! 62: "having nothing to do: once or twice she", ! 63: "had peeped into the book her sister was", ! 64: "reading, but it had no pictures or", ! 65: "conversations in it, \"and what is the", ! 66: "use of a book,\" thought Alice, \"without", ! 67: "pictures or conversations?\"" ! 68: } ; ! 69: static HPS hps ; ! 70: static HVPS hvps ; ! 71: static PVIDEO pvideo ; ! 72: static SHORT sNumLines = sizeof aszAlice / sizeof aszAlice[0] ; ! 73: static USHORT usVideoLength ; ! 74: HDC hdc ; ! 75: RECTL rcl ; ! 76: SHORT sRow, sCol ; ! 77: SIZEL sizl ; ! 78: ULONG ulVideoBuffer ; ! 79: ! 80: switch (msg) ! 81: { ! 82: case WM_CREATE: ! 83: hdc = WinOpenWindowDC (hwnd) ; ! 84: ! 85: sizl.cx = sizl.cy = 0 ; ! 86: hps = GpiCreatePS (hab, hdc, &sizl, PU_PELS | GPIF_DEFAULT | ! 87: GPIT_MICRO | GPIA_ASSOC) ; ! 88: ! 89: VioCreatePS (&hvps, sNumLines, VIDEOWIDTH, 0, 1, NULL) ; ! 90: VioAssociate (hdc, hvps) ; ! 91: ! 92: VioGetBuf (&ulVideoBuffer, &usVideoLength, hvps) ; ! 93: pvideo = (PVIDEO) ulVideoBuffer ; ! 94: ! 95: for (sRow = 0 ; sRow < sNumLines ; sRow++) ! 96: for (sCol = 0 ; sCol < VIDEOWIDTH ; sCol++) ! 97: (*pvideo) [sRow][sCol].attr = '\x1E' ; ! 98: ! 99: for (sRow = 0 ; sRow < sNumLines ; sRow++) ! 100: for (sCol = 0 ; aszAlice [sRow][sCol] ; sCol++) ! 101: (*pvideo) [sRow][sCol].ch = aszAlice [sRow][sCol] ; ! 102: ! 103: return 0 ; ! 104: ! 105: case WM_SIZE: ! 106: WinDefAVioWindowProc (hwnd, msg, mp1, mp2) ; ! 107: return 0 ; ! 108: ! 109: case WM_PAINT: ! 110: WinBeginPaint (hwnd, hps, NULL) ; ! 111: ! 112: WinQueryWindowRect (hwnd, &rcl) ; ! 113: WinFillRect (hps, &rcl, CLR_DARKBLUE) ; ! 114: ! 115: VioShowBuf (0, usVideoLength, hvps) ; ! 116: ! 117: WinEndPaint (hps) ; ! 118: return 0 ; ! 119: ! 120: case WM_DESTROY: ! 121: VioAssociate (NULL, hvps) ; ! 122: VioDestroyPS (hvps) ; ! 123: GpiDestroyPS (hps) ; ! 124: return 0 ; ! 125: } ! 126: return WinDefWindowProc (hwnd, msg, mp1, mp2) ; ! 127: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.