source: trunk/dll/sysinfo.c@ 326

Last change on this file since 326 was 326, checked in by root, 19 years ago

Comments

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