An outstanding formatting bug.
[AROS.git] / rom / hidds / hidd.pci / pcitool / main.c
blob5961a9dd563fbcb114c8e5f5d53b269d914b9ad7
1 /*
2 Copyright (C) 2003-2010, The AROS Development Team.
3 $Id$
4 */
6 #include <exec/types.h>
7 #include <exec/memory.h>
8 #include <libraries/mui.h>
9 #include <hidd/hidd.h>
10 #include <hidd/pci.h>
11 #include <utility/tagitem.h>
12 #include <utility/hooks.h>
14 #include <proto/exec.h>
15 #include <proto/muimaster.h>
16 #include <proto/oop.h>
17 #include <proto/utility.h>
18 #include <proto/intuition.h>
19 #include "pciids.h"
21 #include <aros/debug.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include "locale.h"
26 #include "support.h"
27 #include "saveinfo.h"
29 #define APPNAME "PCITool"
30 #define VERSION "PCITool 0.6 (9.8.2010)"
31 #define IDB_SAVE 10001
32 #define IDB_SAVEALL 10002
33 const char version[] = "$VER: " VERSION "\n";
35 struct Library *OOPBase = NULL;
36 struct Library *MUIMasterBase = NULL;
37 struct UtilityBase *UtilityBase = NULL;
38 struct PCIInfo SaveDeviceInfo;
40 OOP_AttrBase __IHidd_PCIDev;
41 OOP_AttrBase __IHidd_PCIDrv;
42 OOP_AttrBase HiddAttrBase;
44 OOP_Object *pci;
46 int openLibs()
48 if ((OOPBase=OpenLibrary("oop.library", 0)) != NULL)
50 __IHidd_PCIDev = OOP_ObtainAttrBase(IID_Hidd_PCIDevice);
51 __IHidd_PCIDrv = OOP_ObtainAttrBase(IID_Hidd_PCIDriver);
52 HiddAttrBase = OOP_ObtainAttrBase(IID_Hidd);
54 if ((MUIMasterBase=OpenLibrary("muimaster.library", 0)) != NULL)
56 if ((UtilityBase=(struct UtilityBase*)OpenLibrary("utility.library", 0)) != NULL)
58 pciids_Open();
59 return 1;
63 return 0;
66 void closeLibs()
68 pciids_Close();
70 if (pci)
71 OOP_DisposeObject(pci);
73 OOP_ReleaseAttrBase(IID_Hidd_PCIDevice);
74 OOP_ReleaseAttrBase(IID_Hidd_PCIDriver);
75 OOP_ReleaseAttrBase(IID_Hidd);
77 if (OOPBase != NULL)
78 CloseLibrary(OOPBase);
80 if (UtilityBase != NULL)
81 CloseLibrary((struct Library *)UtilityBase);
83 if (MUIMasterBase != NULL)
84 CloseLibrary(MUIMasterBase);
86 MUIMasterBase = NULL;
87 UtilityBase = NULL;
88 OOPBase = NULL;
91 void cleanup(CONST_STRPTR message)
93 Locale_Deinitialize();
95 if (message != NULL)
97 ShowError(NULL, NULL, message, TRUE);
98 exit(RETURN_FAIL);
100 else
102 exit(RETURN_OK);
106 Object *MakeLabel(STRPTR str)
108 return (MUI_MakeObject(MUIO_Label, str, 0));
111 LONG xget(Object * obj, ULONG attr)
113 LONG x = 0;
114 get(obj, attr, &x);
115 return x;
118 Object *app;
119 Object *MainWindow;
120 Object *DriverList;
121 Object *StrDriverName, *StrDriverHWName, *StrDriverDirect;
123 Object *StrDescription, *VendorID, *ProductID, *RevisionID;
124 Object *VendorName, *ProductName, *SubsystemName;
125 Object *_Class, *SubClass, *Interface, *IRQLine;
126 Object *ROMBase, *ROMSize;
127 Object *RangeList;
128 Object *Status;
129 Object *SaveInfo, *SaveAllInfo;
131 struct Hook pci_hook;
132 struct Hook display_hook;
133 struct Hook select_hook;
134 struct Hook save_hook;
135 struct Hook saveall_hook;
137 AROS_UFH3(void, pci_callback,
138 AROS_UFHA(struct Hook *, hook, A0),
139 AROS_UFHA(OOP_Object *, obj, A2),
140 AROS_UFHA(APTR, msg, A1))
142 AROS_USERFUNC_INIT
144 DoMethod(DriverList, MUIM_List_InsertSingle, (IPTR)obj, MUIV_List_Insert_Bottom);
146 AROS_USERFUNC_EXIT
149 AROS_UFH3(void, save_function,
150 AROS_UFHA(struct Hook *, hook, A0),
151 AROS_UFHA(Object *, obj, A2),
152 AROS_UFHA(APTR, msg, A1))
154 AROS_USERFUNC_INIT
156 LONG active = xget(DriverList, MUIA_List_Active);
157 if (active != MUIV_List_Active_Off)
159 /*Saves the Info of the Displayed Device to RamDisk*/
160 SaveToDisk(&SaveDeviceInfo);
162 else
164 // TODO: requester
165 PutStr("No active entry\n");
168 AROS_USERFUNC_EXIT
171 AROS_UFH3(void, saveall_function,
172 AROS_UFHA(struct Hook *, hook, A0),
173 AROS_UFHA(Object *, obj, A2),
174 AROS_UFHA(APTR, msg, A1))
176 AROS_USERFUNC_INIT
178 LONG entries, i;
180 /*Saves All PCITool Info to RamDisk*/
181 if (OpenPCIInfoFile())
183 entries = XGET(DriverList, MUIA_List_Entries);
184 for(i = 0 ; i < entries ; i++)
186 set(DriverList, MUIA_List_Active, i);
187 WriteToPCIInfoFile(&SaveDeviceInfo);
189 ClosePCIInfoFile();
192 AROS_USERFUNC_EXIT
195 AROS_UFH3(void, display_function,
196 AROS_UFHA(struct Hook *, h, A0),
197 AROS_UFHA(char **, strings, A2),
198 AROS_UFHA(OOP_Object *, obj, A1))
200 AROS_USERFUNC_INIT
202 static char buf[20];
203 IPTR bus, dev, sub;
205 if (obj)
207 OOP_GetAttr(obj, aHidd_PCIDevice_Bus, (APTR)&bus);
208 OOP_GetAttr(obj, aHidd_PCIDevice_Dev, (APTR)&dev);
209 OOP_GetAttr(obj, aHidd_PCIDevice_Sub, (APTR)&sub);
211 snprintf(buf, 19, "%02lx.%02lx.%01lx", bus, dev, sub);
212 strings[0] = buf;
215 AROS_USERFUNC_EXIT
218 void memoryPrint(STRPTR buffer, unsigned int bar, unsigned int base, unsigned int size, unsigned int type)
220 if(type & ADDRF_IO)
222 snprintf(buffer, 59, "Bar%d: %s%s at 0x%04x (size 0x%x)", bar,
223 (type & ADDRF_PREFETCH) ? "Prefetchable " :"",
224 (type & ADDRF_IO)?"I/O":"Memory",
225 base, size);
227 else
229 snprintf(buffer, 59, "Bar%d: %s%s at 0x%08x (size 0x%x)", bar,
230 (type & ADDRF_PREFETCH) ? "Prefetchable " :"",
231 (type & ADDRF_IO)?"I/O":"Memory",
232 base, size);
236 AROS_UFH3(void, select_function,
237 AROS_UFHA(struct Hook *, h, A0),
238 AROS_UFHA(Object *, object, A2),
239 AROS_UFHA(APTR, msg, A1))
241 AROS_USERFUNC_INIT
243 ULONG active;
244 OOP_Object *obj, *drv;
245 STRPTR class, subclass, interface, str;
246 UWORD vendor, product, subvendor, subdevice;
248 active = xget(object, MUIA_List_Active);
249 if (active != MUIV_List_Active_Off)
251 IPTR val, val2, val3;
252 static char buf[80];
254 static char ranges[6][60];
255 DoMethod(object, MUIM_List_GetEntry, active, (IPTR)&obj);
257 OOP_GetAttr(obj, aHidd_PCIDevice_Driver, (APTR)&drv);
258 OOP_GetAttr(drv, aHidd_Name, (APTR)&str);
259 set(StrDriverName, MUIA_Text_Contents, str);
260 strcpy(SaveDeviceInfo.Driver_name, str); //Save Debug Info
261 OOP_GetAttr(drv, aHidd_HardwareName, (APTR)&str);
262 set(StrDriverHWName, MUIA_Text_Contents, str);
263 strcpy(SaveDeviceInfo.Hardware_info, str); //Save Debug Info
264 OOP_GetAttr(drv, aHidd_PCIDriver_DirectBus, (APTR)&val);
265 set(StrDriverDirect, MUIA_Text_Contents, (IPTR)((val)?_(MSG_YES):_(MSG_NO)));
266 strcpy(SaveDeviceInfo.Direct_bus, (val)?_(MSG_YES):_(MSG_NO)); //Save Debug Info
267 OOP_GetAttr(obj, aHidd_PCIDevice_ClassDesc, (APTR)&class);
268 OOP_GetAttr(obj, aHidd_PCIDevice_SubClassDesc, (APTR)&subclass);
269 OOP_GetAttr(obj, aHidd_PCIDevice_InterfaceDesc, (APTR)&interface);
270 snprintf(buf, 79, "%s %s %s", class, subclass, interface);
271 set(StrDescription, MUIA_Text_Contents, buf);
272 strcpy(SaveDeviceInfo.Description, buf); //Save Debug Info
273 OOP_GetAttr(obj, aHidd_PCIDevice_VendorID, (APTR)&val);
274 snprintf(buf, 79, "0x%04lx", val);
275 set(VendorID, MUIA_Text_Contents, buf);
276 strcpy(SaveDeviceInfo.VendorID, buf);
277 set(VendorName, MUIA_Text_Contents, pciids_GetVendorName(val, buf, 79));
278 vendor = val;
279 strcpy(SaveDeviceInfo.Vendor_name, pciids_GetVendorName(val, buf, 79)); //Save Debug Info
280 OOP_GetAttr(obj, aHidd_PCIDevice_ProductID, (APTR)&val);
281 snprintf(buf, 79, "0x%04lx", val);
282 set(ProductID, MUIA_Text_Contents, buf);
283 strcpy(SaveDeviceInfo.ProductID, buf); //Save Debug Info
284 set(ProductName, MUIA_Text_Contents, pciids_GetDeviceName(vendor, val, buf, 79));
285 product = val;
286 strcpy(SaveDeviceInfo.Product_name, pciids_GetDeviceName(vendor, val, buf, 79));
288 OOP_GetAttr(obj, aHidd_PCIDevice_SubsystemVendorID, (APTR)&val);
289 subvendor = val;
290 OOP_GetAttr(obj, aHidd_PCIDevice_SubsystemID, (APTR)&val);
291 subdevice = val;
292 set(SubsystemName, MUIA_Text_Contents,
293 pciids_GetSubDeviceName(vendor, product, subvendor, subdevice, buf, 79));
294 strcpy(SaveDeviceInfo.Subsystem, pciids_GetSubDeviceName(vendor, product, subvendor, subdevice, buf, 79));
296 OOP_GetAttr(obj, aHidd_PCIDevice_RevisionID, (APTR)&val);
297 snprintf(buf, 79, "0x%02lx", val);
298 set(RevisionID, MUIA_Text_Contents, buf);
299 strcpy(SaveDeviceInfo.RevisionID, buf); //Save Debug Info
301 OOP_GetAttr(obj, aHidd_PCIDevice_Interface, (APTR)&val);
302 snprintf(buf, 79, "0x%02lx", val);
303 set(Interface, MUIA_Text_Contents, buf);
304 strcpy(SaveDeviceInfo.Interface, buf); //Save Debug Info
306 OOP_GetAttr(obj, aHidd_PCIDevice_Class, (APTR)&val);
307 snprintf(buf, 79, "0x%02lx", val);
308 set(_Class, MUIA_Text_Contents, buf);
309 strcpy(SaveDeviceInfo.Class, buf); //Save Debug Info
311 OOP_GetAttr(obj, aHidd_PCIDevice_SubClass, (APTR)&val);
312 snprintf(buf, 79, "0x%02lx", val);
313 set(SubClass, MUIA_Text_Contents, buf);
314 strcpy(SaveDeviceInfo.Subclass, buf); //Save Debug Info
316 OOP_GetAttr(obj, aHidd_PCIDevice_IRQLine, (APTR)&val);
317 OOP_GetAttr(obj, aHidd_PCIDevice_INTLine, (APTR)&val2);
318 if (val)
320 snprintf(buf, 79, "%ld (%lc)", val2, val + 'A' - 1);
322 else snprintf(buf, 79, _(MSG_NA));
323 set(IRQLine, MUIA_Text_Contents, buf);
324 strcpy(SaveDeviceInfo.IRQ, buf); //Save Debug Info
326 OOP_GetAttr(obj, aHidd_PCIDevice_RomBase, (APTR)&val);
327 OOP_GetAttr(obj, aHidd_PCIDevice_RomSize, (APTR)&val2);
328 snprintf(buf, 79, "0x%08lx", val2);
329 if (val2)
331 set(ROMSize, MUIA_Text_Contents, buf);
332 strcpy(SaveDeviceInfo.ROM_Size, buf); //Save Debug Info
333 if (val)
335 snprintf(buf, 79, "0x%08lx", val);
336 set(ROMBase, MUIA_Text_Contents, buf);
337 strcpy(SaveDeviceInfo.ROM_Base, buf); //Save Debug Info
339 else set(ROMBase, MUIA_Text_Contents, _(MSG_UNUSED));
341 else
343 set(ROMBase, MUIA_Text_Contents, _(MSG_NA));
344 strcpy(SaveDeviceInfo.ROM_Base, _(MSG_NA));
345 set(ROMSize, MUIA_Text_Contents, _(MSG_NA));
346 strcpy(SaveDeviceInfo.ROM_Size, _(MSG_NA));
349 DoMethod(RangeList, MUIM_List_Clear);
351 OOP_GetAttr(obj, aHidd_PCIDevice_Base0, (APTR)&val);
352 OOP_GetAttr(obj, aHidd_PCIDevice_Size0, (APTR)&val2);
353 OOP_GetAttr(obj, aHidd_PCIDevice_Type0, (APTR)&val3);
355 if (val)
357 memoryPrint(ranges[0], 0, val, val2, val3);
358 DoMethod(RangeList, MUIM_List_InsertSingle, (IPTR)ranges[0], MUIV_List_Insert_Bottom);
359 strcpy(SaveDeviceInfo.Rangelist_0, ranges[0]);
362 OOP_GetAttr(obj, aHidd_PCIDevice_Base1, (APTR)&val);
363 OOP_GetAttr(obj, aHidd_PCIDevice_Size1, (APTR)&val2);
364 OOP_GetAttr(obj, aHidd_PCIDevice_Type1, (APTR)&val3);
366 if (val)
368 memoryPrint(ranges[1], 1, val, val2, val3);
369 DoMethod(RangeList, MUIM_List_InsertSingle, (IPTR)ranges[1], MUIV_List_Insert_Bottom);
370 strcpy(SaveDeviceInfo.Rangelist_1, ranges[1]);
373 OOP_GetAttr(obj, aHidd_PCIDevice_isBridge, (APTR)&val);
374 if (!val)
377 OOP_GetAttr(obj, aHidd_PCIDevice_Base2, (APTR)&val);
378 OOP_GetAttr(obj, aHidd_PCIDevice_Size2, (APTR)&val2);
379 OOP_GetAttr(obj, aHidd_PCIDevice_Type2, (APTR)&val3);
381 if (val)
383 memoryPrint(ranges[2], 2, val, val2, val3);
384 DoMethod(RangeList, MUIM_List_InsertSingle, (IPTR)ranges[2], MUIV_List_Insert_Bottom);
385 strcpy(SaveDeviceInfo.Rangelist_2, ranges[2]);
388 OOP_GetAttr(obj, aHidd_PCIDevice_Base3, (APTR)&val);
389 OOP_GetAttr(obj, aHidd_PCIDevice_Size3, (APTR)&val2);
390 OOP_GetAttr(obj, aHidd_PCIDevice_Type3, (APTR)&val3);
392 if (val)
394 memoryPrint(ranges[3], 3, val, val2, val3);
395 DoMethod(RangeList, MUIM_List_InsertSingle, (IPTR)ranges[3], MUIV_List_Insert_Bottom);
396 strcpy(SaveDeviceInfo.Rangelist_3, ranges[3]);
399 OOP_GetAttr(obj, aHidd_PCIDevice_Base4, (APTR)&val);
400 OOP_GetAttr(obj, aHidd_PCIDevice_Size4, (APTR)&val2);
401 OOP_GetAttr(obj, aHidd_PCIDevice_Type4, (APTR)&val3);
403 if (val)
405 memoryPrint(ranges[4], 4, val, val2, val3);
406 DoMethod(RangeList, MUIM_List_InsertSingle, (IPTR)ranges[4], MUIV_List_Insert_Bottom);
407 strcpy(SaveDeviceInfo.Rangelist_4, ranges[4]);
410 OOP_GetAttr(obj, aHidd_PCIDevice_Base5, (APTR)&val);
411 OOP_GetAttr(obj, aHidd_PCIDevice_Size5, (APTR)&val2);
412 OOP_GetAttr(obj, aHidd_PCIDevice_Type5, (APTR)&val3);
414 if (val)
416 memoryPrint(ranges[5], 5, val, val2, val3);
417 DoMethod(RangeList, MUIM_List_InsertSingle, (IPTR)ranges[5], MUIV_List_Insert_Bottom);
418 strcpy(SaveDeviceInfo.Rangelist_5, ranges[5]);
421 else
423 OOP_GetAttr(obj, aHidd_PCIDevice_SubBus, (APTR)&val);
424 OOP_GetAttr(obj, aHidd_PCIDevice_ISAEnable, (APTR)&val2);
425 OOP_GetAttr(obj, aHidd_PCIDevice_VGAEnable, (APTR)&val3);
427 snprintf(ranges[2], 59, _(MSG_BRIDGE),
428 val, (val2) ? (CONST_STRPTR)" " : _(MSG_NOT),
429 (val3) ? (CONST_STRPTR)" " : _(MSG_NOT));
430 DoMethod(RangeList, MUIM_List_InsertSingle, (IPTR)ranges[2], MUIV_List_Insert_Bottom);
431 strcpy(SaveDeviceInfo.Rangelist_2, ranges[2]);
432 OOP_GetAttr(obj, aHidd_PCIDevice_MemoryBase, (APTR)&val);
433 OOP_GetAttr(obj, aHidd_PCIDevice_MemoryLimit, (APTR)&val2);
435 snprintf(ranges[3], 59, _(MSG_MEMORY_RANGE), val, val2);
436 DoMethod(RangeList, MUIM_List_InsertSingle, (IPTR)ranges[3], MUIV_List_Insert_Bottom);
437 strcpy(SaveDeviceInfo.Rangelist_3, ranges[3]);
438 OOP_GetAttr(obj, aHidd_PCIDevice_PrefetchableBase, (APTR)&val);
439 OOP_GetAttr(obj, aHidd_PCIDevice_PrefetchableLimit, (APTR)&val2);
441 snprintf(ranges[4], 59, _(MSG_PREFETCHABLE_MEMORY), val, val2);
442 DoMethod(RangeList, MUIM_List_InsertSingle, (IPTR)ranges[4], MUIV_List_Insert_Bottom);
443 strcpy(SaveDeviceInfo.Rangelist_4, ranges[4]);
444 OOP_GetAttr(obj, aHidd_PCIDevice_IOBase, (APTR)&val);
445 OOP_GetAttr(obj, aHidd_PCIDevice_IOLimit, (APTR)&val2);
447 snprintf(ranges[5], 59, _(MSG_IO_RANGE), val, val2);
448 DoMethod(RangeList, MUIM_List_InsertSingle, (IPTR)ranges[5], MUIV_List_Insert_Bottom);
449 strcpy(SaveDeviceInfo.Rangelist_5, ranges[5]);
452 IPTR io, mem, master, snoop, is66;
454 OOP_GetAttr(obj, aHidd_PCIDevice_isIO, (APTR)&io);
455 OOP_GetAttr(obj, aHidd_PCIDevice_isMEM, (APTR)&mem);
456 OOP_GetAttr(obj, aHidd_PCIDevice_isMaster, (APTR)&master);
457 OOP_GetAttr(obj, aHidd_PCIDevice_paletteSnoop, (APTR)&snoop);
458 OOP_GetAttr(obj, aHidd_PCIDevice_is66MHz, (APTR)&is66);
460 snprintf(buf, 79, _(MSG_IO_MSG),
461 io ? _(MSG_YES):_(MSG_NO),
462 mem ? _(MSG_YES):_(MSG_NO),
463 master ? _(MSG_YES):_(MSG_NO),
464 snoop ? _(MSG_YES):_(MSG_NO),
465 is66 ? _(MSG_YES):_(MSG_NO));
466 set(Status, MUIA_Text_Contents, buf);
467 strcpy(SaveDeviceInfo.Status, buf);
471 AROS_USERFUNC_EXIT
474 BOOL GUIinit()
476 BOOL retval = FALSE;
478 app = ApplicationObject,
479 MUIA_Application_Title, (IPTR)APPNAME,
480 MUIA_Application_Version, (IPTR)VERSION,
481 MUIA_Application_Copyright, (IPTR)"(C) 2004-2010, The AROS Development Team",
482 MUIA_Application_Author, (IPTR)"Michal Schulz",
483 MUIA_Application_Base, (IPTR)APPNAME,
484 MUIA_Application_Description, __(MSG_DESCRIPTION),
486 SubWindow, MainWindow = WindowObject,
487 MUIA_Window_Title, __(MSG_WINTITLE),
488 // MUIA_Window_Height, MUIV_Window_Height_Visible(50),
489 // MUIA_Window_Width, MUIV_Window_Width_Visible(60),
491 WindowContents, HGroup,
492 MUIA_Group_SameWidth, FALSE,
494 Child, ListviewObject,
495 MUIA_Listview_List, DriverList = ListObject,
496 ReadListFrame,
497 MUIA_List_AdjustWidth, TRUE,
498 MUIA_List_DisplayHook, &display_hook,
499 End, // List
500 End, // ListView
501 Child, VGroup,
502 Child, VGroup, GroupFrameT(_(MSG_DRIVER_INFO)),
503 Child, ColGroup(2),
504 Child, Label(_(MSG_DRIVER_NAME)),
505 Child, HGroup,
506 Child, StrDriverName = TextObject,
507 TextFrame,
508 MUIA_Background, MUII_TextBack,
509 MUIA_Text_SetMax, FALSE,
510 MUIA_Text_Contents, "",
511 End,
512 Child, Label(_(MSG_DIRECT_BUS)),
513 Child, StrDriverDirect = TextObject,
514 TextFrame,
515 MUIA_Background, MUII_TextBack,
516 MUIA_Text_SetMax, FALSE,
517 MUIA_Text_Contents, "",
518 End,
519 End,
520 Child, Label(_(MSG_HARDWARE_INFO)),
521 Child, StrDriverHWName = TextObject,
522 TextFrame,
523 MUIA_Background, MUII_TextBack,
524 MUIA_Text_SetMax, FALSE,
525 MUIA_Text_Contents, "",
526 End,
527 End,
528 End, // HGroup
529 Child, VGroup, GroupFrameT(_(MSG_PCI_DEVICE_INFO)),
530 Child, ColGroup(2),
531 Child, Label(_(MSG_DEVICE_DESCRIPTION)),
532 Child, StrDescription = TextObject,
533 TextFrame,
534 MUIA_Background, MUII_TextBack,
535 MUIA_Text_SetMax, FALSE,
536 MUIA_Text_Contents, "",
537 End,
538 Child, Label(_(MSG_VENDORNAME)),
539 Child, VendorName = TextObject,
540 TextFrame,
541 MUIA_Background, MUII_TextBack,
542 MUIA_Text_SetMax, FALSE,
543 MUIA_Text_Contents, "",
544 End,
545 Child, Label(_(MSG_PRODUCTNAME)),
546 Child, ProductName = TextObject,
547 TextFrame,
548 MUIA_Background, MUII_TextBack,
549 MUIA_Text_SetMax, FALSE,
550 MUIA_Text_Contents, "",
551 End,
552 Child, Label(_(MSG_SUBSYSTEM)),
553 Child, SubsystemName = TextObject,
554 TextFrame,
555 MUIA_Background, MUII_TextBack,
556 MUIA_Text_SetMax, FALSE,
557 MUIA_Text_Contents, "",
558 End,
559 End,
560 Child, ColGroup(6),
561 Child, Label(_(MSG_VENDORID)),
562 Child, VendorID = TextObject,
563 TextFrame,
564 MUIA_Background, MUII_TextBack,
565 MUIA_Text_SetMax, FALSE,
566 MUIA_Text_Contents, "0x0000",
567 End,
568 Child, Label(_(MSG_PRODUCTID)),
569 Child, ProductID = TextObject,
570 TextFrame,
571 MUIA_Background, MUII_TextBack,
572 MUIA_Text_SetMax, FALSE,
573 MUIA_Text_Contents, "0x0000",
574 End,
575 Child, Label(_(MSG_REVISIONID)),
576 Child, RevisionID = TextObject,
577 TextFrame,
578 MUIA_Background, MUII_TextBack,
579 MUIA_Text_SetMax, FALSE,
580 MUIA_Text_Contents, "0x0000",
581 End,
582 Child, Label(_(MSG_CLASS)),
583 Child, _Class = TextObject,
584 TextFrame,
585 MUIA_Background, MUII_TextBack,
586 MUIA_Text_SetMax, FALSE,
587 MUIA_Text_Contents, "0x00",
588 End,
589 Child, Label(_(MSG_SUBCLASS)),
590 Child, SubClass = TextObject,
591 TextFrame,
592 MUIA_Background, MUII_TextBack,
593 MUIA_Text_SetMax, FALSE,
594 MUIA_Text_Contents, "0x00",
595 End,
596 Child, Label(_(MSG_INTERFACE)),
597 Child, Interface = TextObject,
598 TextFrame,
599 MUIA_Background, MUII_TextBack,
600 MUIA_Text_SetMax, FALSE,
601 MUIA_Text_Contents, "0x00",
602 End,
603 Child, Label(_(MSG_ROM_BASE)),
604 Child, ROMBase = TextObject,
605 TextFrame,
606 MUIA_Background, MUII_TextBack,
607 MUIA_Text_SetMax, FALSE,
608 MUIA_Text_Contents, "0x00000000",
609 End,
610 Child, Label(_(MSG_ROM_SIZE)),
611 Child, ROMSize = TextObject,
612 TextFrame,
613 MUIA_Background, MUII_TextBack,
614 MUIA_Text_SetMax, FALSE,
615 MUIA_Text_Contents, "0x00000000",
616 End,
617 Child, Label(_(MSG_IRQ)),
618 Child, IRQLine = TextObject,
619 TextFrame,
620 MUIA_Background, MUII_TextBack,
621 MUIA_Text_SetMax, FALSE,
622 MUIA_Text_Contents, "15",
623 End,
624 End,
625 Child, HGroup,
626 Child, RangeList = ListviewObject,
627 MUIA_Listview_List, ListObject,
628 ReadListFrame,
629 MUIA_List_AdjustWidth, FALSE,
630 End, // List
631 End, // ListView
632 End,
633 Child, Status = TextObject,
634 TextFrame,
635 MUIA_Background, MUII_TextBack,
636 MUIA_Text_SetMax, FALSE,
637 End,
638 End,
639 /*Save the displayed info into a text file in RAM:*/
640 Child, SaveInfo = SimpleButton(_(MSG_SAVETORAMDISK) ),
641 Child, SaveAllInfo = SimpleButton(_(MSG_SAVEALLTORAMDISK) ),
642 End,
643 End, // WindowContents
644 End, // MainWindow
645 End; // ApplicationObject
647 if (app)
649 /* Quit application if the windowclosegadget or the esc key is pressed. */
650 DoMethod(MainWindow, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
651 (IPTR)app, 2,
652 MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
654 DoMethod(DriverList, MUIM_Notify, MUIA_List_Active, MUIV_EveryTime,
655 (IPTR)DriverList, 2,
656 MUIM_CallHook, (IPTR)&select_hook);
658 DoMethod(SaveInfo, MUIM_Notify, MUIA_Pressed, FALSE,
659 (IPTR)app, 2,
660 MUIM_CallHook, (IPTR)&save_hook);
662 DoMethod(SaveAllInfo, MUIM_Notify, MUIA_Pressed, FALSE,
663 (IPTR)app, 2,
664 MUIM_CallHook, (IPTR)&saveall_hook);
666 retval=TRUE;
669 return retval;
672 int main(void)
674 pci_hook.h_Entry = (APTR)pci_callback;
675 display_hook.h_Entry = (APTR)display_function;
676 select_hook.h_Entry = (APTR)select_function;
677 save_hook.h_Entry = (APTR)save_function;
678 saveall_hook.h_Entry = (APTR)saveall_function;
680 if (!Locale_Initialize())
681 cleanup(_(MSG_ERROR_LOCALE));
683 if(openLibs())
685 if(GUIinit())
687 pci = OOP_NewObject(NULL, CLID_Hidd_PCI, NULL);
688 if (pci)
690 HIDD_PCI_EnumDevices(pci, &pci_hook, NULL);
693 set(MainWindow, MUIA_Window_Open, TRUE);
695 if(xget(MainWindow, MUIA_Window_Open))
697 DoMethod(app, MUIM_Application_Execute);
698 set(MainWindow, MUIA_Window_Open, FALSE);
701 DisposeObject(app);
705 closeLibs();
707 cleanup(NULL);
709 return 0;
710 } /* main(int argc, char *argv[]) */