2 Copyright © 2005-2019, The AROS Development Team. All rights reserved.
6 #define MUIMASTER_YES_INLINE_STDARG
9 #include <aros/debug.h>
11 #include <exec/types.h>
12 #include <utility/tagitem.h>
13 #include <libraries/mui.h>
14 #include <libraries/asl.h>
15 #include <dos/filehandler.h>
17 #include <proto/alib.h>
18 #include <proto/exec.h>
19 #include <proto/dos.h>
20 #include <proto/intuition.h>
21 #include <proto/utility.h>
22 #include <proto/icon.h>
23 #include <proto/muimaster.h>
24 #include <proto/workbench.h>
28 #include <zune/iconimage.h>
34 #define ID_FAT12_DISK (0x46415400L)
35 #define ID_FAT16_DISK (0x46415401L)
36 #define ID_FAT32_DISK (0x46415402L)
39 #define ID_CDFS_DISK (0x43444653L)
42 #define ID_NTFS_DISK (0x4E544653L)
47 ID_NO_DISK_PRESENT
, ID_UNREADABLE_DISK
,
48 ID_DOS_DISK
, ID_FFS_DISK
, ID_INTER_DOS_DISK
, ID_INTER_FFS_DISK
,
49 ID_FASTDIR_DOS_DISK
, ID_FASTDIR_FFS_DISK
,
50 ID_DOS_muFS_DISK
, ID_FFS_muFS_DISK
, ID_INTER_DOS_muFS_DISK
, ID_INTER_FFS_muFS_DISK
,
51 ID_FASTDIR_DOS_muFS_DISK
, ID_FASTDIR_FFS_muFS_DISK
,
52 ID_SFS_BE_DISK
, ID_SFS_LE_DISK
,
53 ID_NOT_REALLY_DOS
, ID_KICKSTART_DISK
,
54 ID_MSDOS_DISK
, ID_FAT12_DISK
, ID_FAT16_DISK
, ID_FAT32_DISK
, ID_NTFS_DISK
,
58 /*** Instance data **********************************************************/
62 Object
*dki_VolumeIcon
;
63 Object
*dki_VolumeName
;
64 Object
*dki_VolumeUseGauge
;
65 Object
*dki_VolumeUsed
;
66 Object
*dki_VolumeFree
;
68 STRPTR dki_DOSDevInfo
;
70 struct MsgPort
*dki_NotifyPort
;
73 struct MUI_InputHandlerNode dki_NotifyIHN
;
74 struct NotifyRequest dki_FSNotifyRequest
;
77 /*** Methods ****************************************************************/
78 Object
*DiskInfo__OM_NEW
80 Class
*CLASS
, Object
*self
, struct opSet
*message
84 struct DiskInfo_DATA
*data
= NULL
;
85 struct TagItem
*tstate
= message
->ops_AttrList
;
86 struct TagItem
*tag
= NULL
;
89 *volnameobj
, *voliconobj
, *volusegaugeobj
,
90 *volusedobj
, *volfreeobj
,
93 LONG disktype
= ID_NO_DISK_PRESENT
;
100 STRPTR status
= NULL
;
101 STRPTR dosdevname
= NULL
;
102 STRPTR deviceinfo
= NULL
;
104 STRPTR filesystem
= NULL
;
105 STRPTR volicon
= NULL
;
106 STRPTR handlertype
= "";
108 static struct InfoData id
;
110 static STRPTR disktypelist
[] =
141 /* Parse initial taglist -----------------------------------------------*/
142 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
144 while ((tag
= NextTagItem(&tstate
)) != NULL
)
148 case MUIA_DiskInfo_Initial
:
149 initial
= (BPTR
) tag
->ti_Data
;
150 D(bug("[DiskInfo] %s: initial lock @ 0x%p\n", __PRETTY_FUNCTION__
, initial
));
152 /* TODO: Remove MUIA_DiskInfo_Aspect */
153 case MUIA_DiskInfo_Aspect
:
154 aspect
= tag
->ti_Data
;
155 D(bug("[DiskInfo] %s: aspect: %d\n", __PRETTY_FUNCTION__
, aspect
));
160 /* Initial lock is required */
161 if (initial
== BNULL
)
166 /* obtain volume's name from the lock */
167 if (!NameFromLock(initial
, volname
, sizeof(volname
))) {
168 SetIoErr(ERROR_DEVICE_NOT_MOUNTED
);
171 int volname_len
= strlen(volname
);
172 if ((volicon
= AllocVec(volname_len
+ 5, MEMF_CLEAR
)) == NULL
)
174 SetIoErr(ERROR_DEVICE_NOT_MOUNTED
);
177 strcpy(volicon
, volname
);
178 strcat(volicon
, "disk");
179 volname
[strlen(volname
)-1] = '\0';
180 D(bug("[DiskInfo] %s: Volume '%s'\n", __PRETTY_FUNCTION__
, volname
));
182 /* find the volumes doslist information .. */
183 filesystem
= _(MSG_UNKNOWN
);
185 volname
[strlen(volname
)] = ':';
187 /* Extract volume info from InfoData */
188 if (Info(initial
, &id
) == DOSTRUE
)
191 disktype
= id
.id_DiskType
;
193 for (i
= 0; i
< sizeof(dt
) / sizeof(LONG
); ++i
)
195 if (disktype
== dt
[i
])
197 filesystem
= AllocVec(strlen(disktypelist
[i
]) + 1, MEMF_ANY
|MEMF_CLEAR
);
198 CopyMem(disktypelist
[i
], filesystem
, strlen(disktypelist
[i
]));
204 filesystem
= AllocVec(strlen(_(MSG_UNKNOWN
)) + 1, MEMF_ANY
|MEMF_CLEAR
);
205 CopyMem(_(MSG_UNKNOWN
), filesystem
, strlen(_(MSG_UNKNOWN
)));
208 FormatSize(size
, id
.id_NumBlocks
, id
.id_NumBlocks
, id
.id_BytesPerBlock
, FALSE
);
209 percent
= FormatSize(used
, id
.id_NumBlocksUsed
, id
.id_NumBlocks
, id
.id_BytesPerBlock
, TRUE
);
210 FormatSize(free
, id
.id_NumBlocks
- id
.id_NumBlocksUsed
, id
.id_NumBlocks
, id
.id_BytesPerBlock
, TRUE
);
211 sprintf(blocksize
, "%d %s", (int)id
.id_BytesPerBlock
, _(MSG_BYTES
));
213 switch (id
.id_DiskState
)
215 case (ID_WRITE_PROTECTED
):
216 status
= _(MSG_READABLE
);
218 case (ID_VALIDATING
):
219 status
= _(MSG_VALIDATING
);
222 status
= _(MSG_READABLE_WRITABLE
);
225 status
= _(MSG_UNKNOWN
);
228 dl
= LockDosList(LDF_VOLUMES
| LDF_READ
);
229 dl
= FindDosEntry(dl
, volname
, LDF_VOLUMES
| LDF_READ
);
230 UnLockDosList(LDF_VOLUMES
| LDF_READ
);
234 APTR voltask
= dl
->dol_Task
;
235 dl
= LockDosList(LDF_DEVICES
|LDF_READ
);
237 while((dl
= NextDosEntry(dl
, LDF_DEVICES
)))
239 if (dl
->dol_Task
== voltask
)
241 struct FileSysStartupMsg
*fsstartup
= (struct FileSysStartupMsg
*)BADDR(dl
->dol_misc
.dol_handler
.dol_Startup
);
242 dosdevname
= (UBYTE
*)AROS_BSTR_ADDR(dl
->dol_Name
);
243 if (dl
->dol_misc
.dol_handler
.dol_Handler
)
245 char *fscur
= filesystem
;
246 filesystem
= AllocVec(strlen(fscur
) + AROS_BSTR_strlen(dl
->dol_misc
.dol_handler
.dol_Handler
) + 4, MEMF_ANY
);
247 sprintf(filesystem
,"%s (%s)", fscur
, AROS_BSTR_ADDR(dl
->dol_misc
.dol_handler
.dol_Handler
));
249 if (fsstartup
!= NULL
)
251 deviceinfo
= AllocVec(strlen((UBYTE
*)AROS_BSTR_ADDR(fsstartup
->fssm_Device
)) + (fsstartup
->fssm_Unit
/10 + 1) + 7, MEMF_CLEAR
);
252 sprintf(deviceinfo
,"%s %s %d", (UBYTE
*)AROS_BSTR_ADDR(fsstartup
->fssm_Device
), _(MSG_UNIT
), (int)fsstartup
->fssm_Unit
);
257 UnLockDosList(LDF_VOLUMES
|LDF_READ
);
263 filesystem
= AllocVec(strlen(_(MSG_UNKNOWN
)) + 1, MEMF_ANY
);
264 CopyMem(_(MSG_UNKNOWN
), filesystem
, strlen(_(MSG_UNKNOWN
)));
267 /* Create application and window objects -------------------------------*/
268 self
= (Object
*) DoSuperNewTags
272 MUIA_Application_Title
, __(MSG_TITLE
),
273 MUIA_Application_Version
, (IPTR
) "$VER: DiskInfo 0.5 ("ADATE
") ©2006-2009 AROS Dev Team",
274 MUIA_Application_Copyright
, __(MSG_COPYRIGHT
),
275 MUIA_Application_Author
, __(MSG_AUTHOR
),
276 MUIA_Application_Description
, __(MSG_DESCRIPTION
),
277 MUIA_Application_Base
, (IPTR
) "DISKINFO",
278 SubWindow
, (IPTR
) (window
= (Object
*)WindowObject
,
279 MUIA_Window_Title
, (IPTR
) volname
,
280 MUIA_Window_Activate
, TRUE
,
281 MUIA_Window_NoMenus
, TRUE
,
282 MUIA_Window_CloseGadget
, TRUE
,
284 WindowContents
, (IPTR
) VGroup
,
285 Child
, (IPTR
) HGroup
,
286 Child
, (IPTR
) VGroup
,
287 Child
, (IPTR
) HVSpace
,
288 Child
, (IPTR
) HGroup
,
289 Child
, (IPTR
) HVSpace
,
290 Child
, (IPTR
)(voliconobj
= (Object
*)IconImageObject
,
291 MUIA_InputMode
, MUIV_InputMode_Toggle
,
292 MUIA_IconImage_File
, (IPTR
) volicon
,
294 Child
, (IPTR
) HVSpace
,
296 Child
, (IPTR
) HVSpace
,
298 Child
, (IPTR
) (grp
= (Object
*)VGroup
,
299 Child
, (IPTR
) HVSpace
,
300 Child
, (IPTR
) ColGroup(2),
301 /* TODO: Build this list only when data is realy available, and localise */
302 (dosdevname
) ? Child
: TAG_IGNORE
, (IPTR
) TextObject
,
303 MUIA_Text_PreParse
, (IPTR
) "\33r",
304 MUIA_Text_Contents
, __(MSG_DOSDEVICE
),
306 (dosdevname
) ? Child
: TAG_IGNORE
, (IPTR
) TextObject
,
307 MUIA_Text_PreParse
, (IPTR
) "\33l",
308 MUIA_Text_Contents
, (IPTR
) dosdevname
,
310 (deviceinfo
) ? Child
: TAG_IGNORE
, (IPTR
) TextObject
,
311 MUIA_Text_PreParse
, (IPTR
) "\33r",
312 MUIA_Text_Contents
, __(MSG_DEVICEINFO
),
314 (deviceinfo
) ? Child
: TAG_IGNORE
, (IPTR
) TextObject
,
315 MUIA_Text_PreParse
, (IPTR
) "\33l",
316 MUIA_Text_Contents
, (IPTR
) deviceinfo
,
318 Child
, (IPTR
) TextObject
,
319 MUIA_Text_PreParse
, (IPTR
) "\33r",
320 MUIA_Text_Contents
, __(MSG_FILESYSTEM
),
322 Child
, (IPTR
) TextObject
,
323 MUIA_Text_PreParse
, (IPTR
) "\33I[6:24] \33l",
324 MUIA_Text_Contents
, (IPTR
) filesystem
,
326 Child
, (IPTR
) HVSpace
,
327 Child
, (IPTR
) TextObject
,
328 MUIA_Text_PreParse
, (IPTR
) "\33l",
329 MUIA_Text_Contents
, (IPTR
) handlertype
,
332 Child
, (IPTR
) HVSpace
,
334 Child
, (IPTR
) HVSpace
,
336 Child
, (IPTR
) VGroup
,
337 Child
, (IPTR
) HGroup
,
340 Child
, (IPTR
) HVSpace
,
341 Child
, (IPTR
) ColGroup(2),
342 Child
, (IPTR
) TextObject
,
343 MUIA_Text_PreParse
, (IPTR
) "\33r",
344 MUIA_Text_Contents
, __(MSG_NAME
),
346 Child
, (IPTR
)(volnameobj
= (Object
*)TextObject
,
348 MUIA_Background
, MUII_TextBack
,
349 MUIA_Text_PreParse
, (IPTR
) "\33b\33l",
350 MUIA_Text_Contents
, (IPTR
) volname
,
352 Child
, (IPTR
) VGroup
,
353 Child
, (IPTR
) TextObject
,
355 MUIA_FramePhantomHoriz
, (IPTR
)TRUE
,
356 MUIA_Text_PreParse
, (IPTR
) "\33r",
357 MUIA_Text_Contents
, __(MSG_SIZE
),
359 Child
, (IPTR
) TextObject
,
361 MUIA_FramePhantomHoriz
, (IPTR
)TRUE
,
362 MUIA_Text_PreParse
, (IPTR
) "\33r",
363 MUIA_Text_Contents
, __(MSG_USED
),
365 Child
, (IPTR
) TextObject
,
367 MUIA_FramePhantomHoriz
, (IPTR
)TRUE
,
368 MUIA_Text_PreParse
, (IPTR
) "\33r",
369 MUIA_Text_Contents
, __(MSG_FREE
),
372 Child
, (IPTR
) HGroup
,
373 Child
, (IPTR
) VGroup
,
374 Child
, (IPTR
) TextObject
,
376 MUIA_Background
, MUII_TextBack
,
377 MUIA_Text_PreParse
, (IPTR
) "\33l",
378 MUIA_Text_Contents
, (IPTR
) size
,
380 Child
, (IPTR
)(volusedobj
= (Object
*)TextObject
,
382 MUIA_Background
, MUII_TextBack
,
383 MUIA_Text_PreParse
, (IPTR
) "\33l",
384 MUIA_Text_Contents
, (IPTR
) used
,
386 Child
, (IPTR
)(volfreeobj
= (Object
*)TextObject
,
388 MUIA_Background
, MUII_TextBack
,
389 MUIA_Text_PreParse
, (IPTR
) "\33l",
390 MUIA_Text_Contents
, (IPTR
) free
,
393 Child
, (IPTR
)(volusegaugeobj
= (Object
*)GaugeObject
,
395 MUIA_Gauge_InfoText
, (IPTR
) "",
396 MUIA_Gauge_Horiz
, FALSE
,
397 MUIA_Gauge_Current
, percent
,
400 Child
, (IPTR
) TextObject
,
401 MUIA_Text_PreParse
, (IPTR
) "\33r",
402 MUIA_Text_Contents
, __(MSG_BLOCK_SIZE
),
404 Child
, (IPTR
) TextObject
,
406 MUIA_Background
, MUII_TextBack
,
407 MUIA_Text_PreParse
, (IPTR
) "\33l",
408 MUIA_Text_Contents
, (IPTR
) blocksize
,
410 Child
, (IPTR
) TextObject
,
411 MUIA_Text_PreParse
, (IPTR
) "\33r",
412 MUIA_Text_Contents
, __(MSG_STATUS
),
414 Child
, (IPTR
) TextObject
,
416 MUIA_Background
, MUII_TextBack
,
417 MUIA_Text_PreParse
, (IPTR
) "\33l",
418 MUIA_Text_Contents
, (IPTR
) status
,
420 Child
, (IPTR
) HVSpace
,
421 Child
, (IPTR
) HVSpace
,
423 Child
, (IPTR
) HVSpace
,
425 Child
, (IPTR
) (grpformat
= (Object
*)HGroup
,
426 // grpformat object userlevel sensitive
427 Child
, (IPTR
) HVSpace
,
429 Child
, (IPTR
) HVSpace
,
435 /* Check if object creation succeeded */
439 /* Store instance data -------------------------------------------------*/
440 data
= INST_DATA(CLASS
, self
);
442 data
->dki_NotifyPort
= CreateMsgPort();
444 data
->dki_Window
= window
;
446 data
->dki_VolumeName
= volnameobj
;
447 data
->dki_VolumeIcon
= voliconobj
;
448 data
->dki_VolumeUseGauge
= volusegaugeobj
;
449 data
->dki_VolumeUsed
= volusedobj
;
450 data
->dki_VolumeFree
= volfreeobj
;
452 data
->dki_DOSDev
= AllocVec(strlen(dosdevname
) +2, MEMF_CLEAR
);
453 sprintf(data
->dki_DOSDev
, "%s:", dosdevname
);
455 data
->dki_DOSDevInfo
= deviceinfo
;
456 data
->dki_FileSys
= filesystem
;
457 data
->dki_Aspect
= aspect
;
459 /* Setup notifications -------------------------------------------------*/
460 DoMethod( window
, MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
,
461 (IPTR
) self
, 2, MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
);
463 if (data
->dki_NotifyPort
)
465 /* Setup filesystem notification handler ---------------------------*/
466 data
->dki_NotifyIHN
.ihn_Signals
= 1UL << data
->dki_NotifyPort
->mp_SigBit
;
467 data
->dki_NotifyIHN
.ihn_Object
= self
;
468 data
->dki_NotifyIHN
.ihn_Method
= MUIM_DiskInfo_HandleNotify
;
470 DoMethod(self
, MUIM_Application_AddInputHandler
, (IPTR
)&data
->dki_NotifyIHN
);
472 data
->dki_FSNotifyRequest
.nr_Name
= volname
;
473 data
->dki_FSNotifyRequest
.nr_Flags
= NRF_SEND_MESSAGE
;
474 data
->dki_FSNotifyRequest
.nr_stuff
.nr_Msg
.nr_Port
= data
->dki_NotifyPort
;
475 if (StartNotify(&data
->dki_FSNotifyRequest
))
477 D(bug("[DiskInfo] %s: FileSystem-Notification setup for '%s'\n", __PRETTY_FUNCTION__
, data
->dki_FSNotifyRequest
.nr_Name
));
481 D(bug("[DiskInfo] %s: FAILED to setup FileSystem-Notification for '%s'\n", __PRETTY_FUNCTION__
, data
->dki_FSNotifyRequest
.nr_Name
));
482 DoMethod(self
, MUIM_Application_RemInputHandler
, (IPTR
)&data
->dki_NotifyIHN
);
483 DeleteMsgPort(data
->dki_NotifyPort
);
484 data
->dki_NotifyPort
= NULL
;
490 IPTR
DiskInfo__OM_DISPOSE(Class
*CLASS
, Object
*self
, Msg message
)
492 struct DiskInfo_DATA
*data
= INST_DATA(CLASS
, self
);
494 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
496 if (data
->dki_NotifyPort
)
498 DoMethod(self
, MUIM_Application_RemInputHandler
, (IPTR
) &data
->dki_NotifyIHN
);
500 EndNotify(&data
->dki_FSNotifyRequest
);
502 DeleteMsgPort(data
->dki_NotifyPort
);
505 FreeVec(data
->dki_DOSDev
);
506 FreeVec(data
->dki_DOSDevInfo
);
507 FreeVec(data
->dki_FileSys
);
509 return DoSuperMethodA(CLASS
, self
, message
);
512 IPTR
DiskInfo__MUIM_Application_Execute(Class
*CLASS
, Object
*self
, Msg message
)
514 struct DiskInfo_DATA
*data
= INST_DATA(CLASS
, self
);
516 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
518 SET(data
->dki_Window
, MUIA_Window_Open
, TRUE
);
520 DoSuperMethodA(CLASS
, self
, message
);
522 SET(data
->dki_Window
, MUIA_Window_Open
, FALSE
);
527 IPTR DiskInfo__MUIM_DiskInfo_HandleNotify
529 Class
*CLASS
, Object
*self
, Msg message
532 struct DiskInfo_DATA
*data
= INST_DATA(CLASS
, self
);
533 struct NotifyMessage
*npMessage
= NULL
;
534 static struct InfoData id
;
535 BPTR fsdevlock
= BNULL
;
536 BOOL di_Quit
= FALSE
;
538 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
540 if (data
->dki_NotifyPort
)
542 while ((npMessage
= (struct NotifyMessage
*)GetMsg(data
->dki_NotifyPort
)) != NULL
)
544 D(bug("[DiskInfo] %s: FS notification received\n", __PRETTY_FUNCTION__
));
546 if ((fsdevlock
= Lock((STRPTR
)XGET(data
->dki_VolumeName
, MUIA_Text_Contents
), SHARED_LOCK
)) != BNULL
)
548 /* Extract volume info from InfoData */
549 if (Info(fsdevlock
, &id
) == DOSTRUE
)
551 if (id
.id_DiskType
!= ID_NO_DISK_PRESENT
)
557 D(bug("[DiskInfo] %s: Updating Window from DOS Device '%s'\n", __PRETTY_FUNCTION__
, (STRPTR
)XGET(data
->dki_VolumeName
, MUIA_Text_Contents
)));
559 //FormatSize(size, id.id_NumBlocks, id.id_NumBlocks, id.id_BytesPerBlock, FALSE);
560 percent
= FormatSize(used
, id
.id_NumBlocksUsed
, id
.id_NumBlocks
, id
.id_BytesPerBlock
, TRUE
);
561 FormatSize(free
, id
.id_NumBlocks
- id
.id_NumBlocksUsed
, id
.id_NumBlocks
, id
.id_BytesPerBlock
, TRUE
);
562 //sprintf(blocksize, "%d %s", id.id_BytesPerBlock, _(MSG_BYTES));
564 //data->dki_VolumeName = volnameobj;
565 SET(data
->dki_VolumeUsed
, MUIA_Text_Contents
, used
);
566 SET(data
->dki_VolumeFree
, MUIA_Text_Contents
, free
);
567 SET(data
->dki_VolumeUseGauge
, MUIA_Gauge_Current
, percent
);
571 D(bug("[DiskInfo] %s: Volume no longer available on DOS Device '%s'\n", __PRETTY_FUNCTION__
, data
->dki_DOSDev
));
577 D(bug("[DiskInfo] %s: Failed to obtain Info for DOS Device '%s'\n", __PRETTY_FUNCTION__
, data
->dki_DOSDev
));
585 D(bug("[DiskInfo] %s: Failed to lock DOS Device '%s'\n", __PRETTY_FUNCTION__
, data
->dki_DOSDev
));
588 ReplyMsg((struct Message
*)npMessage
);
593 /* TODO: set MUIV_Application_ReturnID_Quit */
598 IPTR
DiskInfo__OM_GET(Class
*CLASS
, Object
*self
, struct opGet
*msg
)
600 struct DiskInfo_DATA
*data
= INST_DATA(CLASS
, self
);
603 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
605 switch(msg
->opg_AttrID
)
607 case MUIA_DiskInfo_Volname
:
608 retval
= (IPTR
)XGET(data
->dki_VolumeName
, MUIA_Text_Contents
);
610 case MUIA_DiskInfo_Percent
:
611 retval
= (ULONG
)XGET(data
->dki_VolumeUseGauge
, MUIA_Gauge_Current
);
613 case MUIA_DiskInfo_Aspect
:
614 retval
= (ULONG
) data
->dki_Aspect
;
617 retval
= DoSuperMethodA(CLASS
, self
, (Msg
)msg
);
623 IPTR
DiskInfo__OM_SET(Class
*CLASS
, Object
*self
, struct opSet
*msg
)
625 struct DiskInfo_DATA
*data
= INST_DATA(CLASS
, self
);
626 struct TagItem
*tags
= msg
->ops_AttrList
;
629 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
631 while ((tag
= NextTagItem(&tags
)) != NULL
)
635 case MUIA_DiskInfo_Aspect
:
636 data
->dki_Aspect
= tag
->ti_Data
;
640 return DoSuperMethodA(CLASS
, self
, (Msg
)msg
);
643 /*** Dispatcher *************************************************************/
644 BOOPSI_DISPATCHER(IPTR
, DiskInfo_Dispatcher
, CLASS
, self
, message
)
646 switch (message
->MethodID
)
648 case OM_NEW
: return (IPTR
) DiskInfo__OM_NEW(CLASS
, self
, (struct opSet
*) message
);
649 case OM_DISPOSE
: return DiskInfo__OM_DISPOSE(CLASS
, self
, message
);
650 case OM_GET
: return (IPTR
) DiskInfo__OM_GET(CLASS
, self
, (struct opGet
*)message
);
651 case OM_SET
: return (IPTR
) DiskInfo__OM_SET(CLASS
, self
, (struct opSet
*)message
);
652 case MUIM_DiskInfo_HandleNotify
: return DiskInfo__MUIM_DiskInfo_HandleNotify(CLASS
, self
, message
);
653 case MUIM_Application_Execute
: return DiskInfo__MUIM_Application_Execute(CLASS
, self
, message
);
654 default: return DoSuperMethodA(CLASS
, self
, message
);
658 BOOPSI_DISPATCHER_END
660 /*** Setup ******************************************************************/
661 struct MUI_CustomClass
*DiskInfo_CLASS
;
663 BOOL
DiskInfo_Initialize()
665 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
667 DiskInfo_CLASS
= MUI_CreateCustomClass(
668 NULL
, MUIC_Application
, NULL
,
669 sizeof(struct DiskInfo_DATA
), DiskInfo_Dispatcher
);
671 return DiskInfo_CLASS
? TRUE
: FALSE
;
674 VOID
DiskInfo_Deinitialize()
676 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
678 if (DiskInfo_CLASS
!= NULL
)
680 MUI_DeleteCustomClass(DiskInfo_CLASS
);