|
|
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.