2 Copyright © 2005-2009, 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/exec.h>
18 #include <proto/dos.h>
19 #include <proto/intuition.h>
20 #include <proto/utility.h>
21 #include <proto/icon.h>
22 #include <proto/muimaster.h>
23 #include <proto/workbench.h>
27 #include <zune/iconimage.h>
39 #define ID_FAT12_DISK (0x46415400L)
40 #define ID_FAT16_DISK (0x46415401L)
41 #define ID_FAT32_DISK (0x46415402L)
44 #define ID_CDFS_DISK (0x43444653L)
47 static LONG dt
[]={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
, ID_NOT_REALLY_DOS
,
50 ID_KICKSTART_DISK
, ID_MSDOS_DISK
, ID_SFS_BE_DISK
, ID_SFS_LE_DISK
,
51 ID_FAT12_DISK
, ID_FAT16_DISK
, ID_FAT32_DISK
, ID_CDFS_DISK
};
53 /*** Instance data **********************************************************/
57 Object
*dki_VolumeIcon
;
58 Object
*dki_VolumeName
;
59 Object
*dki_VolumeUseGauge
;
60 Object
*dki_VolumeUsed
;
61 Object
*dki_VolumeFree
;
63 struct MsgPort
*dki_NotifyPort
;
66 struct MUI_InputHandlerNode dki_NotifyIHN
;
67 struct NotifyRequest dki_FSNotifyRequest
;
70 /*** Methods ****************************************************************/
71 Object
*DiskInfo__OM_NEW
73 Class
*CLASS
, Object
*self
, struct opSet
*message
76 struct DiskInfo_DATA
*data
= NULL
;
77 const struct TagItem
*tstate
= message
->ops_AttrList
;
78 struct TagItem
*tag
= NULL
;
81 *volnameobj
, *voliconobj
, *volusegaugeobj
, *volusedobj
, *volfreeobj
,
84 LONG disktype
= ID_NO_DISK_PRESENT
;
92 STRPTR dosdevname
= NULL
;
93 STRPTR filesystem
= NULL
;
95 STRPTR fshandler
= NULL
;
96 STRPTR volicon
= NULL
;
97 STRPTR handlertype
= "";
98 STRPTR deviceinfo
= "";
100 struct DosList
*dl
, *dn
;
101 BOOL disktypefound
= FALSE
;
103 static struct InfoData id
;
105 static STRPTR disktypelist
[] =
126 /* Parse initial taglist -----------------------------------------------*/
127 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
129 while ((tag
= NextTagItem(&tstate
)) != NULL
)
133 case MUIA_DiskInfo_Initial
:
134 initial
= (BPTR
) tag
->ti_Data
;
135 D(bug("[DiskInfo] %s: initial lock @ 0x%p\n", __PRETTY_FUNCTION__
, initial
));
137 #warning "TODO: Remove MUIA_DiskInfo_Aspect"
138 case MUIA_DiskInfo_Aspect
:
139 aspect
= tag
->ti_Data
;
140 D(bug("[DiskInfo] %s: aspect: %d\n", __PRETTY_FUNCTION__
, aspect
));
145 /* Initial lock is required */
151 /* obtain volume's name from the lock */
152 if (!NameFromLock(initial
, volname
, sizeof(volname
))) {
153 SetIoErr(ERROR_DEVICE_NOT_MOUNTED
);
156 int volname_len
= strlen(volname
);
157 if ((volicon
= AllocVec(volname_len
+ 5, MEMF_CLEAR
)) == NULL
)
159 SetIoErr(ERROR_DEVICE_NOT_MOUNTED
);
162 strcpy(volicon
, volname
);
163 strcat(volicon
, "disk");
164 volname
[strlen(volname
)-1] = '\0';
165 D(bug("[DiskInfo] %s: Volume '%s'\n", __PRETTY_FUNCTION__
, volname
));
167 /* find the volumes doslist information .. */
169 filesystem
= _(MSG_UNKNOWN
);
170 dl
= LockDosList(LDF_VOLUMES
|LDF_READ
);
172 dn
= FindDosEntry(dl
, volname
, LDF_VOLUMES
);
176 volunit
= (IPTR
)dn
->dol_Ext
.dol_AROS
.dol_Unit
;
178 D(bug("[DiskInfo] %s: Volume's unit @ %p\n", __PRETTY_FUNCTION__
, volunit
));
180 if (dn
->dol_Task
!= NULL
)
182 handlertype
= _(MSG_PACKETDEVICE
);
184 else if (dn
->dol_Ext
.dol_AROS
.dol_Device
!= NULL
)
186 handlertype
= _(MSG_IOFSDEVICE
);
189 disktype
= dn
->dol_misc
.dol_volume
.dol_DiskType
;
190 for (i
= 0; i
< sizeof(dt
) / sizeof(LONG
); ++i
)
192 if (disktype
== dt
[i
])
194 fstype
= disktypelist
[i
];
195 fshandler
= dn
->dol_Ext
.dol_AROS
.dol_Device
->dd_Library
.lib_Node
.ln_Name
;
196 disktypefound
= TRUE
;
200 D(bug("[DiskInfo] %s: Disk Type: %s\n", __PRETTY_FUNCTION__
, filesystem
));
202 UnLockDosList(LDF_VOLUMES
|LDF_READ
);
204 /* If we know the volumes unit - find its device information .. */
207 dl
= LockDosList(LDF_DEVICES
|LDF_READ
);
209 while((dl
= NextDosEntry(dl
, LDF_DEVICES
)))
211 if ((IPTR
)dl
->dol_Ext
.dol_AROS
.dol_Unit
== volunit
)
213 struct FileSysStartupMsg
*fsstartup
= (struct FileSysStartupMsg
*)BADDR(dl
->dol_misc
.dol_handler
.dol_Startup
);
214 dosdevname
= (UBYTE
*)AROS_BSTR_ADDR(dl
->dol_Name
);
215 fshandler
= (UBYTE
*)AROS_BSTR_ADDR(dl
->dol_misc
.dol_handler
.dol_Handler
);
217 D(bug("[DiskInfo] %s: Found Volumes device @ %p, '%s'\n", __PRETTY_FUNCTION__
, dl
, dosdevname
));
218 if (fsstartup
!= NULL
)
220 deviceinfo
= AllocVec(strlen((UBYTE
*)AROS_BSTR_ADDR(fsstartup
->fssm_Device
)) + (fsstartup
->fssm_Unit
/10 + 1) + 7, MEMF_CLEAR
);
221 sprintf(deviceinfo
,"%s %s %d", (UBYTE
*)AROS_BSTR_ADDR(fsstartup
->fssm_Device
), _(MSG_UNIT
), fsstartup
->fssm_Unit
);
223 D(bug("[DiskInfo] %s: Handler '%s'\n", __PRETTY_FUNCTION__
, fshandler
));
227 UnLockDosList(LDF_VOLUMES
|LDF_READ
);
231 if (fstype
&& fshandler
)
233 filesystem
= AllocVec(strlen(fstype
) + strlen(fshandler
) + 4, MEMF_CLEAR
);
234 sprintf(filesystem
, "%s (%s)", fstype
, fshandler
);
237 volname
[strlen(volname
)] = ':';
239 /* Extract volume info from InfoData */
240 if (Info(initial
, &id
) == DOSTRUE
)
242 if (!disktypefound
) /* Workaround for FFS-Intl having 0 as dol_DiskType */
245 filesystem
= _(MSG_UNKNOWN
);
246 disktype
= id
.id_DiskType
;
248 for (i
= 0; i
< sizeof(dt
) / sizeof(LONG
); ++i
)
250 if (disktype
== dt
[i
])
252 filesystem
= disktypelist
[i
];
258 FormatSize(size
, id
.id_NumBlocks
, id
.id_NumBlocks
, id
.id_BytesPerBlock
, FALSE
);
259 percent
= FormatSize(used
, id
.id_NumBlocksUsed
, id
.id_NumBlocks
, id
.id_BytesPerBlock
, TRUE
);
260 FormatSize(free
, id
.id_NumBlocks
- id
.id_NumBlocksUsed
, id
.id_NumBlocks
, id
.id_BytesPerBlock
, TRUE
);
261 sprintf(blocksize
, "%d %s", id
.id_BytesPerBlock
, _(MSG_BYTES
));
263 switch (id
.id_DiskState
)
265 case (ID_WRITE_PROTECTED
):
266 status
= _(MSG_READABLE
);
268 case (ID_VALIDATING
):
269 status
= _(MSG_VALIDATING
);
272 status
= _(MSG_READABLE_WRITABLE
);
275 status
= _(MSG_UNKNOWN
);
279 /* Create application and window objects -------------------------------*/
280 self
= (Object
*) DoSuperNewTags
284 MUIA_Application_Title
, __(MSG_TITLE
),
285 MUIA_Application_Version
, (IPTR
) "$VER: DiskInfo 0.5 ("ADATE
") ©2006-2009 AROS Dev Team",
286 MUIA_Application_Copyright
, __(MSG_COPYRIGHT
),
287 MUIA_Application_Author
, __(MSG_AUTHOR
),
288 MUIA_Application_Description
, __(MSG_DESCRIPTION
),
289 MUIA_Application_Base
, (IPTR
) "DISKINFO",
290 SubWindow
, (IPTR
) (window
= (Object
*)WindowObject
,
291 MUIA_Window_Title
, (IPTR
) volname
,
292 MUIA_Window_Activate
, TRUE
,
293 MUIA_Window_NoMenus
, TRUE
,
294 MUIA_Window_CloseGadget
, TRUE
,
296 WindowContents
, (IPTR
) VGroup
,
297 Child
, (IPTR
) HGroup
,
298 Child
, (IPTR
) VGroup
,
300 Child
, (IPTR
) HGroup
,
302 Child
, (IPTR
)(voliconobj
= (Object
*)IconImageObject
,
303 MUIA_InputMode
, MUIV_InputMode_Toggle
,
304 MUIA_IconImage_File
, (IPTR
) volicon
,
310 Child
, (IPTR
) (grp
= (Object
*)VGroup
,
312 Child
, (IPTR
) ColGroup(2),
313 #warning "TODO: Build this list only when data is realy available, and localise"
314 Child
, (IPTR
) TextObject
,
315 MUIA_Text_PreParse
, (IPTR
) "\33r",
316 MUIA_Text_Contents
, (IPTR
) __(MSG_DOSDEVICE
),
318 Child
, (IPTR
) TextObject
,
319 MUIA_Text_PreParse
, (IPTR
) "\33l",
320 MUIA_Text_Contents
, (IPTR
) dosdevname
,
322 Child
, (IPTR
) TextObject
,
323 MUIA_Text_PreParse
, (IPTR
) "\33r",
324 MUIA_Text_Contents
, (IPTR
) __(MSG_DEVICEINFO
),
326 Child
, (IPTR
) TextObject
,
327 MUIA_Text_PreParse
, (IPTR
) "\33l",
328 MUIA_Text_Contents
, (IPTR
) deviceinfo
,
330 Child
, (IPTR
) TextObject
,
331 MUIA_Text_PreParse
, (IPTR
) "\33r",
332 MUIA_Text_Contents
, (IPTR
) __(MSG_FILESYSTEM
),
334 Child
, (IPTR
) TextObject
,
335 MUIA_Text_PreParse
, (IPTR
) "\33I[6:24] \33l",
336 MUIA_Text_Contents
, (IPTR
) filesystem
,
338 Child
, (IPTR
) HVSpace
,
339 Child
, (IPTR
) TextObject
,
340 MUIA_Text_PreParse
, (IPTR
) "\33l",
341 MUIA_Text_Contents
, (IPTR
) handlertype
,
348 Child
, (IPTR
) VGroup
,
349 Child
, (IPTR
) HGroup
,
353 Child
, (IPTR
) ColGroup(2),
354 Child
, (IPTR
) TextObject
,
355 MUIA_Text_PreParse
, (IPTR
) "\33r",
356 MUIA_Text_Contents
, __(MSG_NAME
),
358 Child
, (IPTR
)(volnameobj
= (Object
*)TextObject
, TextFrame
,
359 MUIA_Background
, MUII_TextBack
,
360 MUIA_Text_PreParse
, (IPTR
) "\33b\33l",
361 MUIA_Text_Contents
, (IPTR
) volname
,
363 Child
, (IPTR
) VGroup
,
364 Child
, (IPTR
) TextObject
, TextFrame
,
365 MUIA_FramePhantomHoriz
, (IPTR
)TRUE
,
366 MUIA_Text_PreParse
, (IPTR
) "\33r",
367 MUIA_Text_Contents
, __(MSG_SIZE
),
369 Child
, (IPTR
) TextObject
, TextFrame
,
370 MUIA_FramePhantomHoriz
, (IPTR
)TRUE
,
371 MUIA_Text_PreParse
, (IPTR
) "\33r",
372 MUIA_Text_Contents
, __(MSG_USED
),
374 Child
, (IPTR
) TextObject
, TextFrame
,
375 MUIA_FramePhantomHoriz
, (IPTR
)TRUE
,
376 MUIA_Text_PreParse
, (IPTR
) "\33r",
377 MUIA_Text_Contents
, __(MSG_FREE
),
380 Child
, (IPTR
) HGroup
,
381 Child
, (IPTR
) VGroup
,
382 Child
, (IPTR
) TextObject
, TextFrame
,
383 MUIA_Background
, MUII_TextBack
,
384 MUIA_Text_PreParse
, (IPTR
) "\33l",
385 MUIA_Text_Contents
, (IPTR
) size
,
387 Child
, (IPTR
)(volusedobj
= (Object
*)TextObject
, TextFrame
,
388 MUIA_Background
, MUII_TextBack
,
389 MUIA_Text_PreParse
, (IPTR
) "\33l",
390 MUIA_Text_Contents
, (IPTR
) used
,
392 Child
, (IPTR
)(volfreeobj
= (Object
*)TextObject
, TextFrame
,
393 MUIA_Background
, MUII_TextBack
,
394 MUIA_Text_PreParse
, (IPTR
) "\33l",
395 MUIA_Text_Contents
, (IPTR
) free
,
398 Child
, (IPTR
)(volusegaugeobj
= (Object
*)GaugeObject
, GaugeFrame
,
399 MUIA_Gauge_InfoText
, "",
400 MUIA_Gauge_Horiz
, FALSE
,
401 MUIA_Gauge_Current
, percent
,
404 Child
, (IPTR
) TextObject
,
405 MUIA_Text_PreParse
, (IPTR
) "\33r",
406 MUIA_Text_Contents
, __(MSG_BLOCK_SIZE
),
408 Child
, (IPTR
) TextObject
, TextFrame
,
409 MUIA_Background
, MUII_TextBack
,
410 MUIA_Text_PreParse
, (IPTR
) "\33l",
411 MUIA_Text_Contents
, (IPTR
) blocksize
,
413 Child
, (IPTR
) TextObject
,
414 MUIA_Text_PreParse
, (IPTR
) "\33r",
415 MUIA_Text_Contents
, __(MSG_STATUS
),
417 Child
, (IPTR
) TextObject
, TextFrame
,
418 MUIA_Background
, MUII_TextBack
,
419 MUIA_Text_PreParse
, (IPTR
) "\33l",
420 MUIA_Text_Contents
, (IPTR
) status
,
427 Child
, (IPTR
) (grpformat
= (Object
*)HGroup
,
428 // grpformat object userlevel sensitive
437 /* Check if object creation succeeded */
441 /* Store instance data -------------------------------------------------*/
442 data
= INST_DATA(CLASS
, self
);
444 data
->dki_NotifyPort
= CreateMsgPort();
446 data
->dki_Window
= window
;
448 data
->dki_VolumeName
= volnameobj
;
449 data
->dki_VolumeIcon
= voliconobj
;
450 data
->dki_VolumeUseGauge
= volusegaugeobj
;
451 data
->dki_VolumeUsed
= volusedobj
;
452 data
->dki_VolumeFree
= volfreeobj
;
454 data
->dki_DOSDev
= AllocVec(strlen(dosdevname
) +2, MEMF_CLEAR
);
455 sprintf(data
->dki_DOSDev
, "%s:", dosdevname
);
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 if (data
->dki_DOSDev
) FreeVec(data
->dki_DOSDev
);
507 return DoSuperMethodA(CLASS
, self
, message
);
510 IPTR
DiskInfo__MUIM_Application_Execute(Class
*CLASS
, Object
*self
, Msg message
)
512 struct DiskInfo_DATA
*data
= INST_DATA(CLASS
, self
);
514 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
516 SET(data
->dki_Window
, MUIA_Window_Open
, TRUE
);
518 DoSuperMethodA(CLASS
, self
, message
);
520 SET(data
->dki_Window
, MUIA_Window_Open
, FALSE
);
525 IPTR DiskInfo__MUIM_DiskInfo_HandleNotify
527 Class
*CLASS
, Object
*self
, Msg message
530 struct DiskInfo_DATA
*data
= INST_DATA(CLASS
, self
);
531 struct NotifyMessage
*npMessage
= NULL
;
532 static struct InfoData id
;
533 BPTR fsdevlock
= NULL
;
534 BOOL di_Quit
= FALSE
;
536 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
538 if (data
->dki_NotifyPort
)
540 while ((npMessage
= (struct NotifyMessage
*)GetMsg(data
->dki_NotifyPort
)) != NULL
)
542 D(bug("[DiskInfo] %s: FS notification recieved\n", __PRETTY_FUNCTION__
));
544 if ((fsdevlock
= Lock(data
->dki_DOSDev
, SHARED_LOCK
)) != NULL
)
546 /* Extract volume info from InfoData */
547 if (Info(fsdevlock
, &id
) == DOSTRUE
)
549 if (id
.id_DiskType
!= ID_NO_DISK_PRESENT
)
554 //TEXT blocksize[16];
556 D(bug("[DiskInfo] %s: Updating Window from DOS Device '%s'\n", __PRETTY_FUNCTION__
, data
->dki_DOSDev
));
558 //FormatSize(size, id.id_NumBlocks, id.id_NumBlocks, id.id_BytesPerBlock, FALSE);
559 percent
= FormatSize(used
, id
.id_NumBlocksUsed
, id
.id_NumBlocks
, id
.id_BytesPerBlock
, TRUE
);
560 FormatSize(free
, id
.id_NumBlocks
- id
.id_NumBlocksUsed
, id
.id_NumBlocks
, id
.id_BytesPerBlock
, TRUE
);
561 //sprintf(blocksize, "%d %s", id.id_BytesPerBlock, _(MSG_BYTES));
563 //data->dki_VolumeName = volnameobj;
564 SET(data
->dki_VolumeUsed
, MUIA_Text_Contents
, used
);
565 SET(data
->dki_VolumeFree
, MUIA_Text_Contents
, free
);
566 SET(data
->dki_VolumeUseGauge
, MUIA_Gauge_Current
, percent
);
570 D(bug("[DiskInfo] %s: Volume no longer available on DOS Device '%s'\n", __PRETTY_FUNCTION__
, data
->dki_DOSDev
));
576 D(bug("[DiskInfo] %s: Failed to obtain Info for DOS Device '%s'\n", __PRETTY_FUNCTION__
, data
->dki_DOSDev
));
584 D(bug("[DiskInfo] %s: Failed to lock DOS Device '%s'\n", __PRETTY_FUNCTION__
, data
->dki_DOSDev
));
587 ReplyMsg((struct Message
*)npMessage
);
592 #warning "TODO: set MUIV_Application_ReturnID_Quit"
597 IPTR
DiskInfo__OM_GET(Class
*CLASS
, Object
*self
, struct opGet
*msg
)
599 struct DiskInfo_DATA
*data
= INST_DATA(CLASS
, self
);
602 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
604 switch(msg
->opg_AttrID
)
606 case MUIA_DiskInfo_Volname
:
607 retval
= (IPTR
)XGET(data
->dki_VolumeName
, MUIA_Text_Contents
);
609 case MUIA_DiskInfo_Percent
:
610 retval
= (ULONG
)XGET(data
->dki_VolumeUseGauge
, MUIA_Gauge_Current
);
612 case MUIA_DiskInfo_Aspect
:
613 retval
= (ULONG
) data
->dki_Aspect
;
616 retval
= DoSuperMethodA(CLASS
, self
, (Msg
)msg
);
622 ULONG
DiskInfo__OM_SET(Class
*CLASS
, Object
*self
, struct opSet
*msg
)
624 struct DiskInfo_DATA
*data
= INST_DATA(CLASS
, self
);
625 const struct TagItem
*tags
= msg
->ops_AttrList
;
628 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
630 while ((tag
= NextTagItem((const struct TagItem
**)&tags
)) != NULL
)
634 case MUIA_DiskInfo_Aspect
:
635 data
->dki_Aspect
= tag
->ti_Data
;
639 return DoSuperMethodA(CLASS
, self
, (Msg
)msg
);
642 /*** Dispatcher *************************************************************/
643 BOOPSI_DISPATCHER(IPTR
, DiskInfo_Dispatcher
, CLASS
, self
, message
)
645 switch (message
->MethodID
)
647 case OM_NEW
: return (IPTR
) DiskInfo__OM_NEW(CLASS
, self
, (struct opSet
*) message
);
648 case OM_DISPOSE
: return DiskInfo__OM_DISPOSE(CLASS
, self
, message
);
649 case OM_GET
: return (IPTR
) DiskInfo__OM_GET(CLASS
, self
, (struct opGet
*)message
);
650 case OM_SET
: return (IPTR
) DiskInfo__OM_SET(CLASS
, self
, (struct opSet
*)message
);
651 case MUIM_DiskInfo_HandleNotify
: return DiskInfo__MUIM_DiskInfo_HandleNotify(CLASS
, self
, message
);
652 case MUIM_Application_Execute
: return DiskInfo__MUIM_Application_Execute(CLASS
, self
, message
);
653 default: return DoSuperMethodA(CLASS
, self
, message
);
657 BOOPSI_DISPATCHER_END
659 /*** Setup ******************************************************************/
660 struct MUI_CustomClass
*DiskInfo_CLASS
;
662 BOOL
DiskInfo_Initialize()
664 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
666 DiskInfo_CLASS
= MUI_CreateCustomClass(
667 NULL
, MUIC_Application
, NULL
,
668 sizeof(struct DiskInfo_DATA
), DiskInfo_Dispatcher
);
670 return DiskInfo_CLASS
? TRUE
: FALSE
;
673 VOID
DiskInfo_Deinitialize()
675 D(bug("[DiskInfo] %s()\n", __PRETTY_FUNCTION__
));
677 if (DiskInfo_CLASS
!= NULL
)
679 MUI_DeleteCustomClass(DiskInfo_CLASS
);