source: trunk/dll/sysinfo.c@ 47

Last change on this file since 47 was 47, checked in by root, 23 years ago

Enable display

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 17.6 KB
Line 
1
2/***********************************************************************
3
4 $Id: sysinfo.c 47 2003-02-12 20:15:30Z root $
5
6 System Info Display
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2002, 2003 Steven H.Levine
10
11 Revisions 16 Oct 02 SHL - Baseline
12 08 Feb 03 SHL - Enable display
13
14***********************************************************************/
15
16#define INCL_DOS
17#define INCL_WIN
18
19#include <os2.h>
20#include <stdlib.h>
21#include <stdio.h>
22#include <string.h>
23#include "fm3dll.h"
24#include "fm3dlg.h"
25
26#pragma data_seg(DATA1)
27#pragma alloc_text(SYSINFO,SysInfoDlgProc,RunRmview)
28
29
30VOID RunRmview (VOID *arg) {
31
32 HWND hwnd = (HWND)arg;
33 CHAR s[2048],*p;
34 HAB thab;
35 HMQ thmq;
36 FILE *fp;
37 HFILE oldstdout,newstdout;
38
39 DosError(FERR_DISABLEHARDERR);
40
41 thab = WinInitialize(0);
42 thmq = WinCreateMsgQueue(thab,0);
43 WinCancelShutdown(thmq,TRUE);
44 if(thab && thmq) {
45 if(!WinIsWindow(thab,hwnd))
46 goto Abort;
47 unlinkf("%s","$RMVIEW.#$#");
48 fp = fopen("$RMVIEW.#$#","w");
49 if(fp) {
50 newstdout = -1;
51 if(DosDupHandle(fileno(stdout),&newstdout)) {
52 fclose(fp);
53 goto Abort;
54 }
55 oldstdout = fileno(stdout);
56 DosDupHandle(fileno(fp),&oldstdout);
57 runemf2(SEPARATE | INVISIBLE | FULLSCREEN | BACKGROUND | WAIT,
58 hwnd,NULL,NULL,"%s","RMVIEW.EXE");
59 oldstdout = fileno(stdout);
60 DosDupHandle(newstdout,&oldstdout);
61 DosClose(newstdout);
62 fclose(fp);
63 }
64 else
65 goto Abort;
66 if(!WinIsWindow(thab,hwnd))
67 goto Abort;
68 fp = fopen("$RMVIEW.#$#","r");
69 if(fp) {
70 fgets(s,2048,fp);
71 fgets(s,2048,fp);
72 if(!feof(fp) && WinIsWindow(thab,hwnd))
73 WinSendDlgItemMsg(hwnd,SYS_LISTBOX,LM_INSERTITEM,
74 MPFROM2SHORT(LIT_END,0),
75 MPFROMP(" -= RMView Physical Info =-"));
76 while(!feof(fp)) {
77 strset(s,0);
78 if(!fgets(s,2048,fp))
79 break;
80 s[2048] = 0;
81 stripcr(s);
82 rstrip(s);
83 p = s;
84 while(*p == '\r' || *p == '\n')
85 p++;
86 if(!WinIsWindow(thab,hwnd))
87 break;
88 WinSendDlgItemMsg(hwnd,SYS_LISTBOX,LM_INSERTITEM,
89 MPFROM2SHORT(LIT_END,0),
90 MPFROMP(p));
91 }
92 fclose(fp);
93 }
94Abort:
95 WinDestroyMsgQueue(thmq);
96 WinTerminate(thab);
97 }
98 DosForceDelete("$RMVIEW.#$#");
99}
100
101MRESULT EXPENTRY SysInfoDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
102{
103
104 static HWND me = (HWND)0;
105 static LONG ypos = 0;
106 static HPOINTER hptrIcon = (HPOINTER)0;
107
108 switch(msg) {
109 case WM_INITDLG:
110 if(me) {
111 WinSetWindowPos(me,HWND_TOP,0,0,0,0,SWP_ACTIVATE |
112 SWP_SHOW | SWP_RESTORE | SWP_ZORDER);
113 WinDismissDlg(hwnd,0);
114 break;
115 }
116 hptrIcon = WinLoadPointer(HWND_DESKTOP,FM3ModHandle,SYS_FRAME);
117 WinDefDlgProc(hwnd,WM_SETICON,MPFROMLONG(hptrIcon),MPVOID);
118 {
119 static CHAR *names[] = {"Max. Path Length", /* 1 */
120 "Max. Text Sessions", /* 2 */
121 "Max. PM Sessions", /* 3 */
122 "Max. VDM Sessions", /* 4 */
123 "Boot Drive", /* 5 */
124 "Dynamic Priority", /* 6 */
125 "Max. Wait", /* 7 */
126 "Min. Timeslice", /* 8 */
127 "Max. Timeslice", /* 9 */
128 "Page Size", /* 10 */
129 "Version Major", /* 11 */
130 "Version Minor", /* 12 */
131 "Version Revision", /* 13 */
132 "Millisecs Up", /* 14 */
133 "Unixtime Low", /* 15 */
134 "Unixtime High", /* 16 */
135 "Physical Memory", /* 17 */
136 "Resident Memory", /* 18 */
137 "Total Available Memory", /* 19 */
138 "Max. Private Memory", /* 20 */
139 "Max. Shared Memory", /* 21 */
140 "Timer Interval", /* 22 */
141 "Max. Path Comp. Length", /* 23 */
142 "Foreground FS Session ID", /* 24 */
143 "Foreground Process PID", /* 25 */
144 NULL};
145 static CHAR *pnames[] = {"Swap button",
146 "Dblclk time",
147 "CX dblclk",
148 "CY dblclk",
149 "CX sizeborder",
150 "CY sizeborder",
151 "Alarm",
152 "",
153 "",
154 "Cursor rate",
155 "First scroll rate",
156 "Scroll rate",
157 "Numbered lists",
158 "Warning freq",
159 "Note freq",
160 "Error freq",
161 "Warning duration",
162 "Note duration",
163 "Error duration",
164 "",
165 "CX screen",
166 "CY screen",
167 "CX vscroll",
168 "CY hscroll",
169 "CY vscroll arrow",
170 "CX hscroll arrow",
171 "CX border",
172 "CY border",
173 "CX dlgframe",
174 "CY dlgframe",
175 "CY titlebar",
176 "CY vslider",
177 "CX hslider",
178 "CX minmaxbutton",
179 "CY minmaxbutton",
180 "CY menu",
181 "CX fullscreen",
182 "CY fullscreen",
183 "CX icon",
184 "CY icon",
185 "CX pointer",
186 "CY pointer",
187 "Debug",
188 "# Mouse buttons",
189 "Pointer level",
190 "Cursor level",
191 "Track rect level",
192 "# timers",
193 "Mouse present",
194 "CX bytealign",
195 "CY bytealign",
196 "",
197 "",
198 "",
199 "",
200 "",
201 "Not reserved",
202 "Extra key beep",
203 "Set lights",
204 "Insert mode",
205 "",
206 "",
207 "",
208 "",
209 "Menu rolldown delay",
210 "Menu rollup delay",
211 "Alt mnemonic",
212 "Tasklist mouse access",
213 "CX icon text width",
214 "# Icon text lines",
215 "Chord time",
216 "CX chord",
217 "CY chord",
218 "CX motion",
219 "CY motion",
220 "Begin drag",
221 "End drag",
222 "Single select",
223 "Open",
224 "Context menu",
225 "Context help",
226 "Text edit",
227 "Begin select",
228 "End select",
229 "Begin drag kb",
230 "End drag kb",
231 "Select kb",
232 "Open kb",
233 "Context menu kb",
234 "Context help kb",
235 "Text edit kb",
236 "Begin select kb",
237 "End select kb",
238 "Animation",
239 "Animation speed",
240 "Mono icons",
241 "Kbd id",
242 "Print screen",
243 NULL};
244 static CHAR *dnames[] = {"# printers",
245 "# RS232 ports",
246 "# diskette drives",
247 "Coprocessor present",
248 "PC submodel",
249 "PC model",
250 "Display",
251 NULL};
252 ULONG vals[26],val,x;
253 CHAR s[134],dev;
254
255 if(DosQuerySysInfo(QSV_MAX_PATH_LENGTH,QSV_MAX_COMP_LENGTH + 2L,
256 (PVOID)vals,(ULONG)sizeof(vals))) {
257 WinDismissDlg(hwnd,0);
258 break;
259 }
260 me = hwnd;
261 WinSendDlgItemMsg(hwnd,SYS_LISTBOX,LM_INSERTITEM,
262 MPFROMLONG(LIT_END),
263 MPFROMP(" -= Base OS Info =-"));
264 for(x = 0;names[x];x++) {
265 switch(x) {
266 case 0:
267 case 9:
268 case 22:
269 sprintf(s,"%-28.28s%lu bytes",names[x],vals[x]);
270 break;
271 case 16:
272 case 17:
273 case 18:
274 case 19:
275 case 20:
276 sprintf(s,"%-28.28s%lu bytes (%lu mb)",names[x],vals[x],
277 vals[x] / (1024 * 1024));
278 break;
279 case 4:
280 sprintf(s,"%-28.28s%c:",names[x],(CHAR)vals[x] + '@');
281 break;
282 case 5:
283 sprintf(s,"%-28.28s%s",names[x],(vals[x]) ? "On" : "Off");
284 break;
285 case 6:
286 sprintf(s,"%-28.28s%lu seconds",names[x],vals[x]);
287 break;
288 case 7:
289 case 8:
290 sprintf(s,"%-28.28s%lu milliseconds",names[x],vals[x]);
291 break;
292 case 13:
293 {
294 ULONG numdays,nummins;
295
296 sprintf(s,"%-28.28s%lu (",names[x],vals[x]);
297 vals[x] /= 60000L;
298 numdays = vals[x] / (60L * 24L);
299 if(numdays)
300 sprintf(s + strlen(s),"%lu day%s, ",numdays,&"s"[numdays == 1L]);
301 nummins = vals[x] % (60L * 24L);
302 sprintf(s + strlen(s),"%luh:%02lum)",nummins / 60,nummins % 60);
303 }
304 break;
305 case 21:
306 sprintf(s,"%-28.28s%lu.%01lu milliseconds",names[x],
307 vals[x] / 10,vals[x] % 10);
308 break;
309 default:
310 sprintf(s,"%-28.28s%lu",names[x],vals[x]);
311 break;
312 }
313 if(*s)
314 WinSendDlgItemMsg(hwnd,SYS_LISTBOX,LM_INSERTITEM,
315 MPFROMLONG(LIT_END),MPFROMP(s));
316 }
317 WinSendDlgItemMsg(hwnd,SYS_LISTBOX,LM_INSERTITEM,
318 MPFROMLONG(LIT_END),
319 MPFROMP(" -= PM Info =-"));
320 for(x = 0;pnames[x];x++) {
321 if(*pnames[x]) {
322 val = WinQuerySysValue(HWND_DESKTOP,x);
323 switch(x) {
324 case SV_CXBYTEALIGN:
325 case SV_CYBYTEALIGN:
326 case SV_CYMOTIONSTART:
327 case SV_CXMOTIONSTART:
328 case SV_CYDBLCLK:
329 case SV_CXDBLCLK:
330 case SV_CYPOINTER:
331 case SV_CXPOINTER:
332 case SV_CYICON:
333 case SV_CXICON:
334 case SV_CXFULLSCREEN:
335 case SV_CYFULLSCREEN:
336 case SV_CYMENU:
337 case SV_CYMINMAXBUTTON:
338 case SV_CXMINMAXBUTTON:
339 case SV_CXHSLIDER:
340 case SV_CYVSLIDER:
341 case SV_CXDLGFRAME:
342 case SV_CYDLGFRAME:
343 case SV_CXSIZEBORDER:
344 case SV_CYSIZEBORDER:
345 case SV_CXBORDER:
346 case SV_CYBORDER:
347 case SV_CYTITLEBAR:
348 case SV_CXHSCROLLARROW:
349 case SV_CYVSCROLLARROW:
350 case SV_CXVSCROLL:
351 case SV_CYHSCROLL:
352 case SV_CYSCREEN:
353 case SV_CXSCREEN:
354 case SV_CXICONTEXTWIDTH:
355 case SV_CXCHORD:
356 case SV_CYCHORD:
357 sprintf(s,"%-28.28s%lu pels",pnames[x],val);
358 break;
359 case SV_CONTEXTMENU:
360 case SV_OPEN:
361 case SV_TEXTEDIT:
362 case SV_BEGINSELECT:
363 case SV_ENDSELECT:
364 case SV_BEGINDRAG:
365 case SV_ENDDRAG:
366 case SV_CONTEXTHELP:
367 case SV_SINGLESELECT:
368 sprintf(s,"%-28.28sWM: %04xh KC: %04xh",pnames[x],
369 LOUSHORT(val),HIUSHORT(val));
370 break;
371 case SV_TASKLISTMOUSEACCESS:
372 sprintf(s,"%-28.28sWM: %04xh",pnames[x],LOUSHORT(val));
373 break;
374 case SV_CONTEXTMENUKB:
375 case SV_TEXTEDITKB:
376 case SV_BEGINDRAGKB:
377 case SV_ENDDRAGKB:
378 case SV_SELECTKB:
379 case SV_OPENKB:
380 case SV_CONTEXTHELPKB:
381 case SV_BEGINSELECTKB:
382 case SV_ENDSELECTKB:
383 sprintf(s,"%-28.28sVK: %04xh KC: %04xh",pnames[x],
384 LOUSHORT(val),HIUSHORT(val));
385 break;
386 case SV_CHORDTIME:
387 case SV_DBLCLKTIME:
388 case SV_CURSORRATE:
389 case SV_FIRSTSCROLLRATE:
390 case SV_SCROLLRATE:
391 case SV_MENUROLLDOWNDELAY:
392 case SV_MENUROLLUPDELAY:
393 case SV_ANIMATIONSPEED:
394 case SV_WARNINGDURATION:
395 case SV_NOTEDURATION:
396 case SV_ERRORDURATION:
397 sprintf(s,"%-28.28s%lu milliseconds",pnames[x],val);
398 break;
399 case SV_MOUSEPRESENT:
400 sprintf(s,"%-28.28s%s",pnames[x],(val) ? "True" : "False");
401 break;
402 case SV_ALARM:
403 case SV_ANIMATION:
404 case SV_MONOICONS:
405 case SV_PRINTSCREEN:
406 case SV_SETLIGHTS:
407 case SV_INSERTMODE:
408 case SV_SWAPBUTTON:
409 case SV_DEBUG:
410 sprintf(s,"%-28.28s%s",pnames[x],(val) ? "On" : "Off");
411 break;
412 default:
413 sprintf(s,"%-28.28s%lu",pnames[x],val);
414 break;
415 }
416 WinSendDlgItemMsg(hwnd,SYS_LISTBOX,LM_INSERTITEM,
417 MPFROMLONG(LIT_END),MPFROMP(s));
418 }
419 }
420 WinSendDlgItemMsg(hwnd,SYS_LISTBOX,LM_INSERTITEM,
421 MPFROMLONG(LIT_END),
422 MPFROMP(" -= Hardware info =-"));
423 for(x = 0;dnames[x];x++) {
424 if(*dnames[x]) {
425 if(!DosDevConfig(&dev,x)) {
426 switch(x) {
427 case DEVINFO_COPROCESSOR:
428 sprintf(s,"%-28.28s%s",dnames[x],(dev) ? "True" : "False");
429 break;
430 case DEVINFO_ADAPTER:
431 sprintf(s,"%-28.28s%sMonochrome or printer",dnames[x],
432 (dev) ? "Not " : NullStr);
433 break;
434 default:
435 sprintf(s,"%-28.28s%lu",dnames[x],dev);
436 break;
437 }
438 }
439 WinSendDlgItemMsg(hwnd,SYS_LISTBOX,LM_INSERTITEM,
440 MPFROMLONG(LIT_END),MPFROMP(s));
441 }
442 }
443 }
444# ifdef NEVER // fixme
445 _beginthread(RunRmview,NULL,65536,(PVOID)hwnd);
446# endif
447 break;
448
449 case WM_ADJUSTWINDOWPOS:
450 PostMsg(hwnd,UM_STRETCH,MPVOID,MPVOID);
451 break;
452
453 case UM_STRETCH:
454 {
455 SWP swpC,swp;
456
457 WinQueryWindowPos(hwnd,&swp);
458 if(!(swp.fl & (SWP_HIDE | SWP_MINIMIZE))) {
459 WinQueryWindowPos(WinWindowFromID(hwnd,SYS_LISTBOX),&swpC);
460 if(!ypos)
461 ypos = swpC.y;
462 WinSetWindowPos(WinWindowFromID(hwnd,SYS_LISTBOX),HWND_TOP,
463 SysVal(SV_CXSIZEBORDER),
464 ypos,
465 swp.cx - (SysVal(SV_CXSIZEBORDER) * 2),
466 (swp.cy - ypos) - (SysVal(SV_CYTITLEBAR) +
467 SysVal(SV_CYSIZEBORDER)),
468 SWP_MOVE | SWP_SIZE);
469 }
470 }
471 return 0;
472
473 case WM_COMMAND:
474 WinDismissDlg(hwnd,0);
475 return 0;
476
477 case WM_DESTROY:
478 if(me == hwnd) {
479 me = (HWND)0;
480 if(hptrIcon)
481 WinDestroyPointer(hptrIcon);
482 hptrIcon = (HPOINTER)0;
483 }
484 break;
485 }
486
487 return WinDefDlgProc(hwnd,msg,mp1,mp2);
488}
489
Note: See TracBrowser for help on using the repository browser.