2 Copyright © 1995-2014, The AROS Development Team. All rights reserved.
6 /* "TODO: fs support" */
8 #define __CONSOLE_NOLIBBASE__
10 #include <proto/alib.h>
11 #include <proto/exec.h>
12 #include <proto/dos.h>
13 #include <proto/console.h>
14 #include <proto/icon.h>
15 #include <proto/intuition.h>
16 #include <proto/muimaster.h>
18 #include <exec/memory.h>
19 #include <devices/rawkeycodes.h>
20 #include <intuition/gadgetclass.h>
21 #include <intuition/icclass.h>
22 #include <intuition/intuition.h>
23 #include <intuition/sghooks.h>
24 #include <libraries/asl.h>
25 #include <libraries/locale.h>
26 #include <libraries/mui.h>
27 #include <resources/filesysres.h>
28 #include <workbench/workbench.h>
29 #ifdef HAVE_COOLIMAGES
30 #include <libraries/coolimages.h>
43 #include "harddisks.h"
44 #include "hdtoolbox_support.h"
50 #undef CATCOMP_STRINGS
51 #undef CATCOMP_NUMBERS
52 #define CATCOMP_NUMBERS
55 #define SIMPLEBUTTON(text) SimpleButton(MSG(text))
57 #ifdef HAVE_COOLIMAGES
58 #define IMAGEBUTTON(text,imgid) CoolImageIDButton(MSG(text),imgid)
60 #define IMAGEBUTTON(text,imgid) SIMPLEBUTTON(text)
63 struct Library
*MUIMasterBase
= NULL
;
64 struct Library
*ConsoleDevice
= NULL
;
71 Object
*createml_item
;
72 struct GUIGadgets gadgets
;
74 struct Hook hook_display
;
75 struct Hook hook_buttons
;
76 struct Hook hook_createml
;
77 struct Hook hook_lv_doubleclick
;
78 struct Hook hook_lv_click
;
80 struct AddDeviceGadgets
{
90 struct AddPartitionGadgets
{
95 } addpartitiongadgets
;
97 struct PartitionTypeGadgets
{
99 struct TableTypeNode
*ttn
;
102 struct Hook hook_hexidedit
;
104 struct PartitionType type
;
105 struct ListNode
*iln
;
108 } partitiontypegadgets
;
110 struct PartitionTableTypeGadgets
{
113 struct ListNode
*iln
;
116 } partitiontabletypegadgets
;
118 struct ResizeMoveGadgets
{
129 struct RenameGadgets
{
132 struct ListNode
*iln
;
137 struct DosEnvecGadgets
{
143 Object
*reservedblocksstart
;
144 Object
*reservedblocksend
;
147 struct ListNode
*iln
;
152 struct MountBootGadgets
{
158 struct ListNode
*iln
;
163 char *editcycleentries
[] = {"0x", NULL
};
164 char *blocksizecycleentries
[] = {"512","1024","2048","4096", NULL
};
166 void setChanged(struct ListNode
*iln
)
168 struct ListNode
*parent
= iln
;
170 D(bug("[HDToolBox] setChanged()\n"));
174 parent
->change_count
++;
175 parent
= parent
->parent
;
177 DoMethod(gadgets
.leftlv
, MUIM_List_Redraw
, MUIV_List_Redraw_All
);
178 set(gadgets
.leftlv
, MUIA_Listview_SelectChange
, TRUE
);
181 void unsetChanged(struct ListNode
*iln
)
183 struct ListNode
*sub
= iln
;
184 struct ListNode
*parent
;
186 D(bug("[HDToolBox] unsetChanged()\n"));
188 /* remove changed from all first generation child partitions */
189 sub
= (struct ListNode
*)iln
->list
.lh_Head
;
190 while (sub
->ln
.ln_Succ
)
192 if (sub
->change_count
)
194 parent
= sub
->parent
;
197 parent
->change_count
-= sub
->change_count
;
198 parent
= parent
->parent
;
200 sub
->change_count
= 0;
202 sub
= (struct ListNode
*)sub
->ln
.ln_Succ
;
204 if (iln
->flags
& LNF_ToSave
)
206 iln
->flags
&= ~LNF_ToSave
;
207 /* we saved it so there can't be a change_count */
208 if (iln
->change_count
)
210 parent
= iln
->parent
;
213 parent
->change_count
-= iln
->change_count
;
214 parent
= parent
->parent
;
216 iln
->change_count
= 0;
219 DoMethod(gadgets
.leftlv
, MUIM_List_Redraw
, MUIV_List_Redraw_Active
);
222 AROS_UFH3(void, hexidedit_function
,
223 AROS_UFHA(struct Hook
*, h
, A0
),
224 AROS_UFHA(struct SGWork
*, sgwork
, A2
),
225 AROS_UFHA(ULONG
*, msg
, A1
))
229 D(bug("[HDToolBox] hexidedit_function()\n"));
233 D(bug("[HDToolBox] hexidedit_function: KEY PRESS\n"));
239 AROS_UFH3(void, display_function
,
240 AROS_UFHA(struct Hook
*, h
, A0
),
241 AROS_UFHA(const char **, strings
, A2
),
242 AROS_UFHA(struct ListNode
*, entry
, A1
))
249 D(bug("[HDToolBox] display_function()\n"));
254 if (entry
->change_count
)
256 if (entry
->flags
& LNF_ToSave
)
260 if ((entry
->flags
& LNF_Listable
) || (entry
->ln
.ln_Type
== LNT_Parent
))
262 sprintf(bu2
,"\0333%s",entry
->ln
.ln_Name
);
266 strings
[1] = entry
->ln
.ln_Name
;
270 strings
[0] = MSG(WORD_Changed
);
271 strings
[1] = MSG(WORD_Name
);
277 void setTypeString(struct PartitionType
*type
, Object
*strgad
)
283 D(bug("[HDToolBox] setTypeString()\n"));
285 while (len
!=type
->id_len
)
287 sprintf(cur
, "%02x ", type
->id
[len
]);
292 set(strgad
, MUIA_String_Contents
, str
);
295 LONG
askSave(STRPTR name
)
297 struct EasyStruct es
=
299 sizeof(struct EasyStruct
), 0,
306 D(bug("[HDToolBox] askSave('%s')\n", name
));
308 sprintf(yesno
, "%s|%s|%s", MSG_STD(YESSTR
), MSG(WORD_All
), MSG_STD(NOSTR
));
309 es
.es_GadgetFormat
= yesno
;
310 return EasyRequestArgs(0, &es
, 0, &name
);
314 LONG
saveChanges(struct ListNode
*iln
, LONG asksave
)
316 struct ListNode
*sub
;
318 D(bug("[HDToolBox] saveChanges()\n"));
320 if (iln
->change_count
)
322 sub
= (struct ListNode
*)iln
->list
.lh_Head
;
323 while (sub
->ln
.ln_Succ
)
325 asksave
= saveChanges(sub
, asksave
);
326 sub
= (struct ListNode
*)sub
->ln
.ln_Succ
;
328 if (iln
->flags
& LNF_ToSave
)
330 struct HDTBPartition
*partition
;
331 partition
= (struct HDTBPartition
*)iln
;
332 if (partition
->table
)
336 result
= askSave(iln
->ln
.ln_Name
);
341 if (WritePartitionTable(partition
->ph
) == 0)
344 set(gadgets
.text
, MUIA_Text_Contents
, MSG(MSG_WriteTableError
));
352 AROS_UFH3(void, buttons_function
,
353 AROS_UFHA(struct Hook
*, h
, A0
),
354 AROS_UFHA(Object
*, object
, A2
),
355 AROS_UFHA(ULONG
*, arg
, A1
))
359 LONG active
= MUIV_List_Active_Off
;
360 struct ListNode
*iln
;
363 D(bug("[HDToolBox] buttons_function()\n"));
365 for (i
=GB_FIRST
;i
<=GB_LAST
;i
++)
366 if (object
== gadgets
.buttons
[i
])
371 if (object
== gadgets
.leftlv
)
374 else if (object
== adddevicegadgets
.ok
)
377 struct HDTBDevice
*dn
;
379 get(adddevicegadgets
.file
, MUIA_String_Contents
, &str
);
381 dn
= addDeviceName(str
);
384 /* FIXME: Should we fail here? */
387 else if (object
== addpartitiongadgets
.ok
)
389 struct DosEnvec
*de
= NULL
;
391 get(addpartitiongadgets
.pt
, PTCT_ActivePartition
, &de
);
394 struct HDTBPartition
*table
;
395 struct HDTBPartition
*partition
;
397 get(addpartitiongadgets
.pt
, PTCT_PartitionTable
, &iln
);
398 table
= (struct HDTBPartition
*)iln
;
399 partition
= addPartition(table
, de
);
402 setChanged(&partition
->listnode
);
403 partition
->listnode
.parent
->flags
|= LNF_ToSave
;
404 InsertList(gadgets
.leftlv
, &partition
->listnode
);
407 set(gadgets
.text
, MUIA_Text_Contents
, MSG(MSG_NO_MEMORY
));
410 else if (object
== addpartitiongadgets
.pt
);
411 else if (object
== partitiontypegadgets
.hexid
)
415 DoMethod(gadgets
.leftlv
, MUIM_List_GetEntry
, active
, (IPTR
)&iln
);
416 get(object
, MUIA_String_Contents
, &str
);
417 partitiontypegadgets
.type
.id_len
=strcpyESC(partitiontypegadgets
.type
.id
, str
);
419 else if (object
== partitiontypegadgets
.lv
)
421 get(partitiontypegadgets
.lv
, MUIA_List_Active
, &active
);
422 if (active
!= MUIV_List_Active_Off
)
426 DoMethod(partitiontypegadgets
.lv
, MUIM_List_GetEntry
, active
, (IPTR
)&name
);
427 tn
= (struct TypeNode
*)FindName(partitiontypegadgets
.ttn
->typelist
, name
);
428 setTypeString(&tn
->type
, partitiontypegadgets
.hexid
);
429 CopyMem(&tn
->type
, &partitiontypegadgets
.type
, sizeof(struct PartitionType
));
432 else if (object
== partitiontypegadgets
.ok
)
434 struct HDTBPartition
*partition
;
435 partition
= (struct HDTBPartition
*)partitiontypegadgets
.iln
;
436 CopyMem(&partitiontypegadgets
.type
, &partition
->type
, sizeof(struct PartitionType
));
437 SetPartitionAttrsA(partition
->ph
, PT_TYPE
, &partition
->type
, TAG_DONE
);
438 GetPartitionAttrsA(partition
->ph
, PT_DOSENVEC
, &partition
->de
, TAG_DONE
);
439 partitiontypegadgets
.iln
->parent
->flags
|= LNF_ToSave
;
440 setChanged(partitiontypegadgets
.iln
);
442 else if (object
== partitiontabletypegadgets
.ok
)
444 get(partitiontabletypegadgets
.lv
, MUIA_List_Active
, &active
);
445 if (active
!= MUIV_List_Active_Off
)
447 struct TableTypeNode
*ttn
;
448 struct HDTBPartition
*table
;
450 DoMethod(partitiontabletypegadgets
.lv
, MUIM_List_GetEntry
, active
, (IPTR
)&name
);
451 ttn
= findTableTypeNodeName(name
);
452 table
= (struct HDTBPartition
*)partitiontabletypegadgets
.iln
;
454 (table
->table
== NULL
) ||
455 (ttn
->pti
->pti_Type
!= table
->table
->type
)
458 if (makePartitionTable(table
, ttn
->pti
->pti_Type
))
460 table
->listnode
.flags
|= LNF_Listable
;
461 table
->listnode
.flags
|= LNF_ToSave
;
462 setChanged(partitiontabletypegadgets
.iln
);
465 set(gadgets
.text
, MUIA_Text_Contents
, MSG(MSG_CreateTableError
));
469 else if (object
== resizemovegadgets
.ok
)
471 struct HDTBPartition
*table
= NULL
;
472 struct HDTBPartition
*partition
;
474 get(resizemovegadgets
.pt
, PTCT_PartitionTable
, &table
);
475 partition
= (struct HDTBPartition
*)table
->listnode
.list
.lh_Head
;
476 table
->listnode
.flags
|= LNF_ToSave
;
477 while (partition
->listnode
.ln
.ln_Succ
)
479 if (partition
->listnode
.flags
& LNF_IntermedChange
)
481 partition
->listnode
.flags
&= ~LNF_IntermedChange
;
482 setChanged(&partition
->listnode
);
483 SetPartitionAttrsA(partition
->ph
, PT_DOSENVEC
, &partition
->de
, TAG_DONE
);
485 partition
= (struct HDTBPartition
*)partition
->listnode
.ln
.ln_Succ
;
488 else if (object
== resizemovegadgets
.cancel
)
490 struct HDTBPartition
*table
= NULL
;
491 struct HDTBPartition
*partition
;
493 get(resizemovegadgets
.pt
, PTCT_PartitionTable
, &table
);
494 partition
= (struct HDTBPartition
*)table
->listnode
.list
.lh_Head
;
495 while (partition
->listnode
.ln
.ln_Succ
)
497 if (partition
->listnode
.flags
& LNF_IntermedChange
)
499 partition
->listnode
.flags
&= ~LNF_IntermedChange
;
500 GetPartitionAttrsA(partition
->ph
, PT_DOSENVEC
, &partition
->de
, TAG_DONE
);
502 partition
= (struct HDTBPartition
*)partition
->listnode
.ln
.ln_Succ
;
505 else if (object
== resizemovegadgets
.pt
)
508 struct DosEnvec
*de
= NULL
;
511 D(bug("[HDToolBox] buttons_function() - Resize/Move Partition Display:\n"));
512 get(resizemovegadgets
.pt
, PTCT_ActiveType
, &type
);
513 if (type
== PTS_EMPTY_AREA
)
515 get(resizemovegadgets
.pt
, PTCT_ActivePartition
, &de
);
519 struct HDTBPartition
*partition
= NULL
;
521 get(resizemovegadgets
.pt
, PTCT_ActivePartition
, &partition
);
523 if (*arg
== PTCT_PartitionMove
)
525 partition
->listnode
.flags
|= LNF_IntermedChange
;
528 nnset(resizemovegadgets
.lowcyl
, MUIA_String_Integer
, de
->de_LowCyl
);
529 nnset(resizemovegadgets
.highcyl
, MUIA_String_Integer
, de
->de_HighCyl
);
530 nnset(resizemovegadgets
.totalcyl
, MUIA_String_Integer
, de
->de_HighCyl
-de
->de_LowCyl
+1);
531 getSizeStr(str
, (((de
->de_HighCyl
- de
->de_LowCyl
+ 1) * de
->de_Surfaces
* de
->de_BlocksPerTrack
)-1)/2);
532 nnset(resizemovegadgets
.size
, MUIA_String_Contents
, str
);
533 D(bug("[HDToolBox] buttons_function() - Resize/Move Partition Display successful\n"));
535 else if (object
== resizemovegadgets
.lowcyl
)
540 D(bug("[HDToolBox] buttons_function() - Resize/Move Lowcyl:\n"));
541 get(object
, MUIA_String_Integer
, &value
);
542 get(resizemovegadgets
.pt
, PTCT_ActiveType
, &type
);
543 if (type
== PTS_PARTITION
)
545 struct HDTBPartition
*table
= NULL
;
546 struct HDTBPartition
*partition
= NULL
;
549 get(resizemovegadgets
.pt
, PTCT_PartitionTable
, &table
);
550 get(resizemovegadgets
.pt
, PTCT_ActivePartition
, &partition
);
551 D(bug("[HDToolBox] - Type : Partition\n"));
552 D(bug("[HDToolBox] - Old value : %ld\n", partition
->de
.de_LowCyl
));
553 D(bug("[HDToolBox] - New value : %ld\n", value
));
554 D(bug("[HDToolBox] - Partition table : %p\n", table
));
555 D(bug("[HDToolBox] - Active partition : %p\n", partition
));
556 if (value
!= partition
->de
.de_LowCyl
)
559 value
*partition
->de
.de_Surfaces
*partition
->de
.de_BlocksPerTrack
;
560 if (validValue(table
, partition
, block
))
563 partition
->listnode
.flags
|= LNF_IntermedChange
;
564 partition
->de
.de_LowCyl
= value
;
565 set(resizemovegadgets
.totalcyl
, MUIA_String_Integer
, partition
->de
.de_HighCyl
-partition
->de
.de_LowCyl
+1);
566 set(resizemovegadgets
.pt
, PTCT_PartitionTable
, table
);
572 (partition
->de
.de_HighCyl
-partition
->de
.de_LowCyl
+1)*
573 partition
->de
.de_Surfaces
*partition
->de
.de_BlocksPerTrack
577 set(resizemovegadgets
.size
, MUIA_String_Contents
, str
);
580 set(object
, MUIA_String_Integer
, partition
->de
.de_LowCyl
);
583 else if (type
== PTS_EMPTY_AREA
)
585 struct DosEnvec
*de
= NULL
;
587 get(resizemovegadgets
.pt
, PTCT_ActivePartition
, &de
);
588 if (value
!= de
->de_LowCyl
)
589 set(object
, MUIA_String_Integer
, de
->de_LowCyl
);
592 set(object
, MUIA_String_Integer
, 0);
594 else if (object
== resizemovegadgets
.highcyl
)
599 D(bug("[HDToolBox] buttons_function() - Resize/Move Highcyl:\n"));
600 get(object
, MUIA_String_Integer
, &value
);
601 get(resizemovegadgets
.pt
, PTCT_ActiveType
, &type
);
602 if (type
== PTS_PARTITION
)
604 struct HDTBPartition
*table
= NULL
;
605 struct HDTBPartition
*partition
= NULL
;
608 get(resizemovegadgets
.pt
, PTCT_PartitionTable
, &table
);
609 get(resizemovegadgets
.pt
, PTCT_ActivePartition
, &partition
);
610 D(bug("[HDToolBox] - Type : Partition\n"));
611 D(bug("[HDToolBox] - Old value : %ld\n", partition
->de
.de_HighCyl
));
612 D(bug("[HDToolBox] - New value : %ld\n", value
));
613 D(bug("[HDToolBox] - Partition table : %p\n", table
));
614 D(bug("[HDToolBox] - Active partition : %p\n", partition
));
615 if (value
!= partition
->de
.de_HighCyl
)
620 partition
->de
.de_Surfaces
*partition
->de
.de_BlocksPerTrack
622 if (validValue(table
, partition
, block
))
625 partition
->listnode
.flags
|= LNF_IntermedChange
;
626 partition
->de
.de_HighCyl
= value
;
627 nnset(resizemovegadgets
.totalcyl
, MUIA_String_Integer
, partition
->de
.de_HighCyl
-partition
->de
.de_LowCyl
+1);
628 nnset(resizemovegadgets
.pt
, PTCT_PartitionTable
, table
);
634 (partition
->de
.de_HighCyl
-partition
->de
.de_LowCyl
+1)*
635 partition
->de
.de_Surfaces
*partition
->de
.de_BlocksPerTrack
639 nnset(resizemovegadgets
.size
, MUIA_String_Contents
, str
);
642 nnset(object
, MUIA_String_Integer
, partition
->de
.de_HighCyl
);
645 else if (type
== PTS_EMPTY_AREA
)
647 struct DosEnvec
*de
= NULL
;
649 D(bug("[HDToolBox] - Type : Empty Area\n"));
650 get(resizemovegadgets
.pt
, PTCT_ActivePartition
, &de
);
651 if (value
!= de
->de_HighCyl
)
652 set(object
, MUIA_String_Integer
, de
->de_HighCyl
);
655 nnset(object
, MUIA_String_Integer
, 0);
657 else if (object
== resizemovegadgets
.totalcyl
)
662 get(object
, MUIA_String_Integer
, &value
);
663 get(resizemovegadgets
.pt
, PTCT_ActiveType
, &type
);
664 if (type
== PTS_PARTITION
)
666 struct HDTBPartition
*table
= NULL
;
667 struct HDTBPartition
*partition
= NULL
;
670 get(resizemovegadgets
.pt
, PTCT_PartitionTable
, &table
);
671 get(resizemovegadgets
.pt
, PTCT_ActivePartition
, &partition
);
672 if (value
!= (partition
->de
.de_HighCyl
-partition
->de
.de_LowCyl
+1))
676 (partition
->de
.de_LowCyl
+value
)*
677 partition
->de
.de_Surfaces
*partition
->de
.de_BlocksPerTrack
679 if (validValue(table
, partition
, block
))
682 partition
->listnode
.flags
|= LNF_IntermedChange
;
683 partition
->de
.de_HighCyl
= partition
->de
.de_LowCyl
+value
-1;
684 set(resizemovegadgets
.highcyl
, MUIA_String_Integer
, partition
->de
.de_HighCyl
);
685 set(resizemovegadgets
.pt
, PTCT_PartitionTable
, table
);
691 (partition
->de
.de_HighCyl
-partition
->de
.de_LowCyl
+1)*
692 partition
->de
.de_Surfaces
*partition
->de
.de_BlocksPerTrack
696 set(resizemovegadgets
.size
, MUIA_String_Contents
, str
);
699 set(object
, MUIA_String_Integer
, partition
->de
.de_HighCyl
-partition
->de
.de_LowCyl
+1);
702 else if (type
== PTS_EMPTY_AREA
)
704 struct DosEnvec
*de
= NULL
;
706 get(resizemovegadgets
.pt
, PTCT_ActivePartition
, &de
);
707 if (value
!= (de
->de_HighCyl
-de
->de_LowCyl
+1))
708 set(object
, MUIA_String_Integer
, de
->de_HighCyl
-de
->de_LowCyl
+1);
711 set(object
, MUIA_String_Integer
, 0);
713 else if (object
== resizemovegadgets
.size
)
716 struct DosEnvec
*de
= NULL
;
721 get(resizemovegadgets
.pt
, PTCT_ActiveType
, &type
);
722 if (type
== PTS_PARTITION
)
724 struct HDTBPartition
*partition
= NULL
;
726 get(resizemovegadgets
.pt
, PTCT_ActivePartition
, &partition
);
728 get(object
, MUIA_String_Contents
, &str
);
729 size
= sizeStrToUL((STRPTR
)str
);
730 size
= (size
*2+1)/partition
->de
.de_BlocksPerTrack
/partition
->de
.de_Surfaces
+1;
732 else if (type
== PTS_EMPTY_AREA
)
734 get(resizemovegadgets
.pt
, PTCT_ActivePartition
, &de
);
736 set(resizemovegadgets
.totalcyl
, MUIA_String_Integer
, size
);
737 set(resizemovegadgets
.totalcyl
, MUIA_String_Acknowledge
, TRUE
);
743 (de
->de_HighCyl
-de
->de_LowCyl
+1)*
744 de
->de_Surfaces
*de
->de_BlocksPerTrack
748 set(resizemovegadgets
.size
, MUIA_String_Contents
, val
);
750 else if (object
== renamegadgets
.ok
)
752 struct HDTBPartition
*partition
;
755 partition
= (struct HDTBPartition
*)renamegadgets
.iln
;
756 get(renamegadgets
.name
, MUIA_String_Contents
, &name
);
757 if (strcmp(name
, partition
->listnode
.ln
.ln_Name
) != 0)
759 SetPartitionAttrsA(partition
->ph
, PT_NAME
, name
, TAG_DONE
);
760 strcpy(partition
->listnode
.ln
.ln_Name
, name
);
761 renamegadgets
.iln
->parent
->flags
|= LNF_ToSave
;
762 setChanged(renamegadgets
.iln
);
765 else if (object
== dosenvecgadgets
.ok
)
767 BOOL changed
= FALSE
;
772 struct HDTBPartition
*partition
;
774 partition
= (struct HDTBPartition
*)dosenvecgadgets
.iln
;
775 get(dosenvecgadgets
.mask
, MUIA_String_Integer
, &value
);
776 if (value
!= partition
->de
.de_Mask
)
778 partition
->de
.de_Mask
= value
;
781 get(dosenvecgadgets
.maxtransfer
, MUIA_String_Contents
, &str
);
782 value
= strtoul(str
, &end
, 0);
785 if (value
!= partition
->de
.de_MaxTransfer
)
787 partition
->de
.de_MaxTransfer
= value
;
791 get(dosenvecgadgets
.custboot
, MUIA_Selected
, &check
);
794 if (partition
->de
.de_TableSize
<(DE_BOOTBLOCKS
+1))
796 partition
->de
.de_TableSize
= DE_BOOTBLOCKS
+1;
799 get(dosenvecgadgets
.numcustboot
, MUIA_String_Integer
, &value
);
800 if (value
!= partition
->de
.de_BootBlocks
)
802 partition
->de
.de_BootBlocks
= value
;
808 if (partition
->de
.de_TableSize
>=(DE_BOOTBLOCKS
+1))
810 partition
->de
.de_TableSize
= DE_BOOTBLOCKS
;
811 partition
->de
.de_BootBlocks
= 0;
815 get(dosenvecgadgets
.reservedblocksstart
, MUIA_String_Integer
, &value
);
816 if (value
!= partition
->de
.de_Reserved
)
818 partition
->de
.de_Reserved
= value
;
821 get(dosenvecgadgets
.reservedblocksend
, MUIA_String_Integer
, &value
);
822 if (value
!= partition
->de
.de_PreAlloc
)
824 partition
->de
.de_PreAlloc
= value
;
827 get(dosenvecgadgets
.blocksize
, MUIA_Cycle_Active
, &value
);
828 value
= 1<<(value
+7);
829 if (value
!= partition
->de
.de_SizeBlock
)
831 partition
->de
.de_SizeBlock
= value
;
834 get(dosenvecgadgets
.buffers
, MUIA_String_Integer
, &value
);
835 if (value
!= partition
->de
.de_NumBuffers
)
837 partition
->de
.de_NumBuffers
= value
;
842 SetPartitionAttrsA(partition
->ph
, PT_DOSENVEC
, &partition
->de
, TAG_DONE
);
843 dosenvecgadgets
.iln
->parent
->flags
|= LNF_ToSave
;
844 setChanged(dosenvecgadgets
.iln
);
847 else if (object
== mountbootgadgets
.ok
)
849 struct HDTBPartition
*partition
;
850 BOOL changeda
= FALSE
;
851 BOOL changed
= FALSE
;
855 partition
= (struct HDTBPartition
*)mountbootgadgets
.iln
;
856 get(mountbootgadgets
.active
, MUIA_Selected
, &check
);
859 if (!(partition
->flags
& PNF_ACTIVE
))
861 partition
->flags
|= PNF_ACTIVE
;
867 if (partition
->flags
& PNF_ACTIVE
)
869 partition
->flags
&= ~PNF_ACTIVE
;
875 if (partition
->flags
& PNF_ACTIVE
)
877 struct HDTBPartition
*other
;
878 other
= (struct HDTBPartition
*)partition
->listnode
.ln
.ln_Pred
;
879 while (other
->listnode
.ln
.ln_Pred
)
881 if (other
->listnode
.ln
.ln_Type
== LNT_Partition
)
883 if (other
->flags
& PNF_ACTIVE
)
885 other
->flags
&= ~PNF_ACTIVE
;
886 SetPartitionAttrsA(other
->ph
, PT_ACTIVE
, FALSE
, TAG_DONE
);
887 setChanged(&other
->listnode
);
890 other
= (struct HDTBPartition
*)other
->listnode
.ln
.ln_Pred
;
892 other
= (struct HDTBPartition
*)partition
->listnode
.ln
.ln_Succ
;
893 while (other
->listnode
.ln
.ln_Succ
)
895 if (other
->listnode
.ln
.ln_Type
== LNT_Partition
)
897 if (other
->flags
& PNF_ACTIVE
)
899 other
->flags
&= ~PNF_ACTIVE
;
900 SetPartitionAttrsA(other
->ph
, PT_ACTIVE
, FALSE
, TAG_DONE
);
901 setChanged(&other
->listnode
);
904 other
= (struct HDTBPartition
*)other
->listnode
.ln
.ln_Succ
;
907 SetPartitionAttrsA(partition
->ph
, PT_ACTIVE
, check
, TAG_DONE
);
911 get(mountbootgadgets
.automount
, MUIA_Selected
, &check
);
914 if (!(partition
->flags
& PNF_AUTOMOUNT
))
916 partition
->flags
|= PNF_AUTOMOUNT
;
922 if (partition
->flags
& PNF_AUTOMOUNT
)
924 partition
->flags
&= ~PNF_AUTOMOUNT
;
930 SetPartitionAttrsA(partition
->ph
, PT_AUTOMOUNT
, check
, TAG_DONE
);
934 get(mountbootgadgets
.bootable
, MUIA_Selected
, &check
);
937 if (!(partition
->flags
& PNF_BOOTABLE
))
939 partition
->flags
|= PNF_BOOTABLE
;
942 get(mountbootgadgets
.bootpri
, MUIA_String_Integer
, &value
);
943 if (value
!= partition
->de
.de_BootPri
)
945 partition
->de
.de_BootPri
= value
;
951 if (partition
->flags
& PNF_BOOTABLE
)
953 partition
->flags
&= ~PNF_BOOTABLE
;
954 partition
->de
.de_BootPri
= 0;
960 SetPartitionAttrsA(partition
->ph
, PT_BOOTABLE
, check
, PT_DOSENVEC
, &partition
->de
, TAG_DONE
);
965 mountbootgadgets
.iln
->parent
->flags
|= LNF_ToSave
;
966 setChanged(mountbootgadgets
.iln
);
975 DoMethod(gadgets
.leftlv
, MUIM_List_GetEntry
, 0, (IPTR
)&iln
);
978 ((iln
) && (iln
->parent
->parent
== NULL
))
981 set(adddevicegadgets
.win
, MUIA_Window_Open
, TRUE
);
983 else if ((iln
->parent
->ln
.ln_Type
== LNT_Harddisk
) || (iln
->parent
->ln
.ln_Type
== LNT_Partition
))
985 struct HDTBPartition
*table
;
986 table
= (struct HDTBPartition
*)iln
->parent
;
989 (table
->table
->max_partitions
) &&
990 (countNodes(&table
->listnode
.list
, LNT_Partition
)<table
->table
->max_partitions
)
992 (table
->table
->max_partitions
== 0)
997 addpartitiongadgets
.win
,
998 MUIM_Notify
, MUIA_Window_Open
, TRUE
, (IPTR
)addpartitiongadgets
.pt
, 3,
999 MUIM_Set
, PTCT_PartitionTable
, (IPTR
)table
1001 set(addpartitiongadgets
.win
, MUIA_Window_Open
, TRUE
);
1004 set(gadgets
.text
, MUIA_Text_Contents
, MSG(MSG_PARTITION_TABLE_FULL
));
1007 case GB_REMOVE_ENTRY
:
1008 get(gadgets
.leftlv
, MUIA_List_Active
, &active
);
1009 if (active
!= MUIV_List_Active_Off
)
1011 DoMethod(gadgets
.leftlv
, MUIM_List_GetEntry
, active
, (IPTR
)&iln
);
1012 switch (iln
->ln
.ln_Type
)
1015 DoMethod(gadgets
.leftlv
, MUIM_List_Remove
, active
);
1017 freeDeviceNode((struct HDTBDevice
*)iln
);
1021 struct HDTBPartition
*partition
;
1022 partition
= (struct HDTBPartition
*)iln
;
1023 iln
->parent
->flags
|= LNF_ToSave
;
1025 DoMethod(gadgets
.leftlv
, MUIM_List_Remove
, active
);
1027 DeletePartition(partition
->ph
);
1028 freePartitionNode(partition
);
1033 case GB_CREATE_TABLE
:
1034 case GB_CHANGE_TYPE
:
1035 get(gadgets
.leftlv
, MUIA_List_Active
, &active
);
1036 if (active
!= MUIV_List_Active_Off
)
1038 DoMethod(gadgets
.leftlv
, MUIM_List_GetEntry
, active
, (IPTR
)&iln
);
1040 (iln
->ln
.ln_Type
== LNT_Harddisk
) ||
1041 ((i
==2) && (iln
->ln
.ln_Type
== LNT_Partition
))
1044 struct HDTBPartition
*table
;
1046 partitiontabletypegadgets
.iln
= iln
;
1047 table
= (struct HDTBPartition
*)iln
;
1049 type
= table
->table
->type
;
1050 DoMethod(partitiontabletypegadgets
.lv
, MUIM_List_Clear
);
1051 for (i
=0;PartitionBase
->tables
[i
] != NULL
;i
++)
1055 partitiontabletypegadgets
.lv
,
1056 MUIM_List_InsertSingle
, (IPTR
)PartitionBase
->tables
[i
]->pti_Name
, MUIV_List_Insert_Bottom
1058 if (type
== PartitionBase
->tables
[i
]->pti_Type
)
1059 set(partitiontabletypegadgets
.lv
, MUIA_List_Active
, i
);
1061 set(partitiontabletypegadgets
.win
, MUIA_Window_Open
, TRUE
);
1063 else if ((i
==3) && (iln
->ln
.ln_Type
== LNT_Partition
))
1065 struct TypeNode
*tn
;
1066 struct HDTBPartition
*partition
;
1067 partitiontypegadgets
.iln
= iln
;
1069 DoMethod(partitiontypegadgets
.lv
, MUIM_List_Clear
);
1070 partition
= (struct HDTBPartition
*)iln
;
1071 partitiontypegadgets
.ttn
= findTableTypeNode(partition
->root
->table
->type
);
1072 if (partitiontypegadgets
.ttn
)
1074 tn
= (struct TypeNode
*)partitiontypegadgets
.ttn
->typelist
->lh_Head
;
1075 while (tn
->ln
.ln_Succ
)
1079 partitiontypegadgets
.lv
,
1080 MUIM_List_InsertSingle
, (IPTR
)tn
->ln
.ln_Name
, MUIV_List_Insert_Bottom
1082 if (tn
->type
.id_len
== partition
->type
.id_len
)
1083 if (memcmp(tn
->type
.id
, partition
->type
.id
, tn
->type
.id_len
) == 0)
1084 set(partitiontypegadgets
.lv
, MUIA_List_Active
, i
);
1085 tn
= (struct TypeNode
*)tn
->ln
.ln_Succ
;
1089 setTypeString(&partition
->type
, partitiontypegadgets
.hexid
);
1090 set(partitiontypegadgets
.win
, MUIA_Window_Open
, TRUE
);
1094 case GB_RESIZE_MOVE
:
1097 DoMethod(gadgets
.leftlv
, MUIM_List_GetEntry
, 0, (IPTR
)&iln
);
1098 if (iln
->ln
.ln_Type
== LNT_Parent
)
1100 set(gadgets
.leftlv
, MUIA_List_Active
, 0);
1101 set(gadgets
.leftlv
, MUIA_Listview_DoubleClick
, TRUE
);
1105 get(gadgets
.leftlv
, MUIA_List_Active
, &active
);
1106 if (active
!= MUIV_List_Active_Off
)
1108 DoMethod(gadgets
.leftlv
, MUIM_List_GetEntry
, active
, (IPTR
)&iln
);
1109 if (iln
->ln
.ln_Type
== LNT_Partition
)
1111 struct HDTBPartition
*partition
;
1112 partition
= (struct HDTBPartition
*)iln
;
1113 if (getAttrInfo(partition
->root
->table
->pattrlist
, PTA_NAME
) & PLAM_READ
)
1115 renamegadgets
.iln
= iln
;
1116 set(renamegadgets
.name
, MUIA_String_Contents
, iln
->ln
.ln_Name
);
1117 set(renamegadgets
.win
, MUIA_Window_Open
, TRUE
);
1123 get(gadgets
.leftlv
, MUIA_List_Active
, &active
);
1124 if (active
!= MUIV_List_Active_Off
)
1126 DoMethod(gadgets
.leftlv
, MUIM_List_GetEntry
, active
, (IPTR
)&iln
);
1127 if (iln
->ln
.ln_Type
== LNT_Partition
)
1129 struct HDTBPartition
*partition
;
1130 partition
= (struct HDTBPartition
*)iln
;
1131 if (getAttrInfo(partition
->root
->table
->pattrlist
, PTA_DOSENVEC
) & PLAM_READ
)
1134 dosenvecgadgets
.iln
= iln
;
1135 set(dosenvecgadgets
.mask
, MUIA_String_Integer
, partition
->de
.de_Mask
);
1136 sprintf(str
, "0x%08lx", partition
->de
.de_MaxTransfer
);
1137 set(dosenvecgadgets
.maxtransfer
, MUIA_String_Contents
, str
);
1138 if (partition
->de
.de_TableSize
>=(DE_BOOTBLOCKS
+1))
1140 set(dosenvecgadgets
.custboot
, MUIA_Selected
, TRUE
);
1141 set(dosenvecgadgets
.numcustboot
, MUIA_String_Integer
, partition
->de
.de_BootBlocks
);
1144 set(dosenvecgadgets
.custboot
, MUIA_Selected
, FALSE
);
1145 set(dosenvecgadgets
.reservedblocksstart
, MUIA_String_Integer
, partition
->de
.de_Reserved
);
1146 set(dosenvecgadgets
.reservedblocksend
, MUIA_String_Integer
, partition
->de
.de_PreAlloc
);
1147 set(dosenvecgadgets
.blocksize
, MUIA_Cycle_Active
, getBitNum(partition
->de
.de_SizeBlock
>>7));
1148 set(dosenvecgadgets
.buffers
, MUIA_String_Integer
, partition
->de
.de_NumBuffers
);
1149 set(dosenvecgadgets
.win
, MUIA_Window_Open
, TRUE
);
1155 get(gadgets
.leftlv
, MUIA_List_Active
, &active
);
1156 if (active
!= MUIV_List_Active_Off
)
1158 DoMethod(gadgets
.leftlv
, MUIM_List_GetEntry
, active
, (IPTR
)&iln
);
1159 if (iln
->ln
.ln_Type
== LNT_Partition
)
1161 struct HDTBPartition
*partition
;
1165 partition
= (struct HDTBPartition
*)iln
;
1166 active
= getAttrInfo(partition
->root
->table
->pattrlist
, PTA_ACTIVE
);
1167 automount
= getAttrInfo(partition
->root
->table
->pattrlist
, PTA_AUTOMOUNT
);
1168 bootable
= getAttrInfo(partition
->root
->table
->pattrlist
, PTA_BOOTABLE
);
1169 if ((active
| automount
| bootable
) & PLAM_READ
)
1171 mountbootgadgets
.iln
= iln
;
1172 set(mountbootgadgets
.active
, MUIA_Disabled
, !(active
& PLAM_READ
));
1173 set(mountbootgadgets
.automount
, MUIA_Disabled
, !(automount
& PLAM_READ
));
1174 set(mountbootgadgets
.bootable
, MUIA_Disabled
, !(bootable
& PLAM_READ
));
1175 set(mountbootgadgets
.bootpri
, MUIA_Disabled
, !(bootable
& PLAM_READ
));
1176 set(mountbootgadgets
.active
, MUIA_Selected
, (partition
->flags
& PNF_ACTIVE
) ? TRUE
: FALSE
);
1177 set(mountbootgadgets
.automount
, MUIA_Selected
, (partition
->flags
& PNF_AUTOMOUNT
) ? TRUE
: FALSE
);
1178 if (partition
->flags
& PNF_BOOTABLE
)
1180 set(mountbootgadgets
.bootable
, MUIA_Selected
, TRUE
);
1181 set(mountbootgadgets
.bootpri
, MUIA_String_Integer
, partition
->de
.de_BootPri
);
1184 set(mountbootgadgets
.bootable
, MUIA_Selected
, FALSE
);
1185 set(mountbootgadgets
.win
, MUIA_Window_Open
, TRUE
);
1190 case GB_SAVE_CHANGES
:
1191 get(gadgets
.leftlv
, MUIA_List_Active
, &active
);
1192 if (active
!= MUIV_List_Active_Off
)
1194 DoMethod(gadgets
.leftlv
, MUIM_List_GetEntry
, active
, (IPTR
)&iln
);
1195 saveChanges(iln
, TRUE
);
1205 * DosEnvec of all partitions holds cylinder numbers relative to partition start.
1206 * This function returns absolute start cylinder number for the partition.
1208 static ULONG
GetStartCyl(struct HDTBPartition
*part
)
1210 ULONG blockspercyl
= part
->de
.de_Surfaces
* part
->de
.de_BlocksPerTrack
;
1213 while (part
->listnode
.parent
)
1215 part
= (struct HDTBPartition
*)part
->listnode
.parent
;
1217 if (part
->listnode
.ln
.ln_Type
!= LNT_Partition
)
1221 * Calculate start offset in blocks. This can be done because theoretically
1222 * partitions can have different virtual geometries.
1224 ret
+= part
->de
.de_LowCyl
* part
->de
.de_Surfaces
* part
->de
.de_BlocksPerTrack
;
1228 * FIXME: What if this can't be divided in interegs?
1229 * This can happen for example if the disk was partitioned on another machine where
1230 * disk driver reported different (virtual) geometry. In this case we should be able
1231 * to adjust mountlist geometry (Surfaces and BlocksPerTrack) so that division works
1232 * correctly and CHS-LBA relationship is still not broken.
1234 return ret
/ blockspercyl
;
1237 static struct FileSysEntry
*FindFileSysEntry(ULONG dostype
)
1239 struct FileSysEntry
*fse
;
1240 struct FileSysResource
*fsr
= OpenResource("FileSystem.resource");
1245 ForeachNode(&fsr
->fsr_FileSysEntries
, fse
)
1247 if (fse
->fse_DosType
== dostype
)
1254 AROS_UFH3(void, createml_function
,
1255 AROS_UFHA(struct Hook
*, h
, A0
),
1256 AROS_UFHA(Object
*, object
, A2
),
1257 AROS_UFHA(ULONG
*, arg
, A1
))
1261 IPTR active
= MUIA_List_Active
;
1262 struct HDTBPartition
*partition
= NULL
;
1264 get(gadgets
.leftlv
, MUIA_List_Active
, &active
);
1265 if (active
!= MUIV_List_Active_Off
)
1267 struct FileRequester
*req
;
1268 struct TagItem asltags
[] =
1270 {ASLFR_InitialDrawer
, (IPTR
)"SYS:Storage/DOSDrivers"},
1271 {ASLFR_InitialFile
, 0},
1272 {ASLFR_DoSaveMode
, TRUE
},
1276 DoMethod(gadgets
.leftlv
, MUIM_List_GetEntry
, active
, &partition
);
1277 asltags
[1].ti_Data
= (IPTR
)partition
->listnode
.ln
.ln_Name
;
1279 req
= MUI_AllocAslRequest(ASL_FileRequest
, asltags
);
1284 if (MUI_AslRequest(req
, NULL
))
1286 ULONG len
= strlen(req
->fr_Drawer
) + strlen(req
->fr_File
) + 2;
1287 STRPTR pathname
= AllocMem(len
, MEMF_ANY
);
1293 strcpy(pathname
, req
->fr_Drawer
);
1294 AddPart(pathname
, req
->fr_File
, len
);
1296 file
= Open(pathname
, MODE_NEWFILE
);
1297 FreeMem(pathname
, len
);
1301 struct DiskObject
*icon
;
1303 struct FileSysEntry
*fse
;
1304 ULONG startcyl
= GetStartCyl(partition
);
1306 args
[ 0] = (IPTR
)"";
1307 args
[ 1] = (IPTR
)partition
->ph
->bd
->ioreq
->iotd_Req
.io_Device
->dd_Library
.lib_Node
.ln_Name
;
1308 args
[ 2] = ((struct HDNode
*)partition
->root
)->unit
;
1309 args
[ 3] = partition
->de
.de_SizeBlock
* 4; /* block size in longs */
1310 args
[ 4] = partition
->de
.de_Surfaces
;
1311 args
[ 5] = partition
->de
.de_SectorPerBlock
;
1312 args
[ 6] = partition
->de
.de_BlocksPerTrack
;
1313 args
[ 7] = partition
->de
.de_Reserved
;
1314 args
[ 8] = partition
->de
.de_PreAlloc
;
1315 args
[ 9] = partition
->de
.de_Interleave
;
1316 args
[10] = partition
->de
.de_MaxTransfer
;
1317 args
[11] = partition
->de
.de_Mask
;
1318 args
[12] = partition
->de
.de_LowCyl
+ startcyl
;
1319 args
[13] = partition
->de
.de_HighCyl
+ startcyl
;
1320 args
[14] = partition
->de
.de_NumBuffers
;
1321 args
[15] = partition
->de
.de_BufMemType
;
1325 args
[19] = partition
->de
.de_DosType
;
1328 * Some things can be fetched only from FileSystem.resource.
1329 * Let's try to do it.
1331 fse
= FindFileSysEntry(partition
->de
.de_DosType
);
1334 if (fse
->fse_PatchFlags
& FSEF_HANDLER
)
1335 args
[0] = (IPTR
)AROS_BSTR_ADDR(fse
->fse_Handler
);
1337 if (fse
->fse_PatchFlags
& FSEF_STACKSIZE
)
1338 args
[16] = fse
->fse_StackSize
;
1340 if (fse
->fse_PatchFlags
& FSEF_PRIORITY
)
1341 args
[17] = fse
->fse_Priority
;
1343 if (fse
->fse_PatchFlags
& FSEF_GLOBALVEC
)
1344 args
[18] = (IPTR
)fse
->fse_GlobalVec
;
1347 VFPrintf(file
, "FileSystem = %s\n"
1352 "SectorsPerBlock = %ld\n"
1353 "BlocksPerTrack = %ld\n"
1356 "Interleave = %ld\n"
1357 "MaxTransfer = 0x%08lx\n"
1362 "BufMemType = %ld\n"
1366 "DosType = 0x%08lx\n"
1372 icon
= GetDiskObject("ENVARC:Sys/def_Mountlist");
1375 PutDiskObject(pathname
, icon
);
1376 FreeDiskObject(icon
);
1382 MUI_FreeAslRequest(req
);
1388 /************************* general List functions ***************************/
1390 LONG
InitListNode(struct ListNode
*node
, struct ListNode
*parent
)
1392 struct ListNode
*new;
1394 D(bug("[HDToolBox] InitListNode()\n"));
1396 NEWLIST(&node
->list
);
1397 new = AllocMem(sizeof(struct ListNode
), MEMF_PUBLIC
| MEMF_CLEAR
);
1400 node
->parent
= parent
;
1401 new->ln
.ln_Name
= "..";
1402 new->ln
.ln_Type
= LNT_Parent
;
1403 new->ln
.ln_Pri
= 127;
1405 AddTail(&node
->list
, &new->ln
);
1411 void UninitListNode(struct ListNode
*node
)
1413 struct ListNode
*parent
, *next
;
1415 D(bug("[HDToolBox] UninitListNode()\n"));
1417 /* free parent entry */
1418 parent
= (struct ListNode
*)node
->list
.lh_Head
;
1419 while (parent
->ln
.ln_Succ
)
1421 next
= (struct ListNode
*)parent
->ln
.ln_Succ
;
1422 if (parent
->ln
.ln_Type
== LNT_Parent
)
1424 Remove(&parent
->ln
);
1425 FreeMem(parent
, sizeof(struct ListNode
));
1432 void InsertList(Object
*list
, struct ListNode
*node
)
1434 D(bug("[HDToolBox] InsertList()\n"));
1436 DoMethod(list
, MUIM_List_InsertSingle
, (IPTR
)node
, MUIV_List_Insert_Bottom
);
1439 void ShowList(Object
*list
, struct List
*lh
)
1441 struct ListNode
*lnode
;
1443 D(bug("[HDToolBox] ShowList()\n"));
1445 DoMethod(list
, MUIM_List_Clear
);
1446 lnode
= (struct ListNode
*)lh
->lh_Head
;
1447 while (lnode
->ln
.ln_Succ
)
1451 ((lnode
->ln
.ln_Type
== LNT_Parent
) && (lnode
->parent
->parent
!= NULL
)) ||
1452 (lnode
->ln
.ln_Type
!= LNT_Parent
)
1454 (!(lnode
->flags
& LNF_Invalid
))
1457 DoMethod(list
, MUIM_List_InsertSingle
, (IPTR
)lnode
, MUIV_List_Insert_Bottom
);
1459 lnode
= (struct ListNode
*)lnode
->ln
.ln_Succ
;
1463 void disableObject(Object
*object
)
1465 LONG disabled
= FALSE
;
1467 D(bug("[HDToolBox] disableObject()\n"));
1469 get(object
, MUIA_Disabled
, &disabled
);
1470 if (disabled
== FALSE
)
1472 set(object
, MUIA_Disabled
, TRUE
);
1476 void enableObject(Object
*object
)
1478 LONG disabled
= FALSE
;
1480 D(bug("[HDToolBox] enableObject()\n"));
1482 get(object
, MUIA_Disabled
, &disabled
);
1483 if (disabled
== TRUE
)
1485 set(object
, MUIA_Disabled
, FALSE
);
1490 /********************************** Left Listview ***************************/
1492 struct LeftListview__Data
1494 struct IOStdReq ioreq
;
1495 struct MUI_EventHandlerNode ehn
;
1498 BOOPSI_DISPATCHER(IPTR
, LeftListview_Dispatcher
, CLASS
, self
, message
)
1502 switch (message
->MethodID
)
1506 struct opSet
*msg
= (struct opSet
*)message
;
1508 retval
= DoSuperMethod(CLASS
, self
, OM_NEW
, msg
->ops_AttrList
, NULL
);
1511 struct LeftListview__Data
*data
= INST_DATA(CLASS
, retval
);
1512 data
->ehn
.ehn_Events
= IDCMP_RAWKEY
;
1513 data
->ehn
.ehn_Priority
= 0;
1514 data
->ehn
.ehn_Flags
= 0;
1515 data
->ehn
.ehn_Object
= (Object
*)retval
;
1516 data
->ehn
.ehn_Class
= CLASS
;
1522 if ((retval
= DoSuperMethodA(CLASS
, self
, message
)))
1524 struct LeftListview__Data
*data
= INST_DATA(CLASS
, self
);
1526 if (0 == OpenDevice("console.device", -1, (struct IORequest
*)&data
->ioreq
, 0)) {
1527 ConsoleDevice
= (struct Library
*)data
->ioreq
.io_Device
;
1528 DoMethod(_win(self
), MUIM_Window_AddEventHandler
, (IPTR
) &data
->ehn
);
1535 struct LeftListview__Data
*data
= INST_DATA(CLASS
, self
);
1539 DoMethod(_win(self
), MUIM_Window_RemEventHandler
, (IPTR
) &data
->ehn
);
1540 CloseDevice((struct IORequest
*)&data
->ioreq
);
1543 retval
= DoSuperMethodA(CLASS
, self
, message
);
1546 case MUIM_HandleEvent
:
1548 struct MUIP_HandleEvent
*msg
= (struct MUIP_HandleEvent
*)message
;
1550 if ((ConsoleDevice
) && (msg
->imsg
) && (msg
->imsg
->Class
== IDCMP_RAWKEY
))
1552 unsigned char buffer
[10];
1553 struct InputEvent keyEvent
;
1556 keyEvent
.ie_Class
= IECLASS_RAWKEY
;
1557 keyEvent
.ie_Code
= msg
->imsg
->Code
;
1558 keyEvent
.ie_Qualifier
= msg
->imsg
->Qualifier
;
1559 keyEvent
.ie_EventAddress
= (APTR
) (msg
->imsg
->IAddress
);
1561 numchars
= RawKeyConvert(&keyEvent
, (char *)buffer
, sizeof(buffer
), NULL
);
1563 if ((numchars
== 1) && (buffer
[0] == 13))
1565 SET(self
, MUIA_Listview_DoubleClick
, TRUE
);
1566 retval
= MUI_EventHandlerRC_Eat
;
1573 retval
= DoSuperMethodA(CLASS
, self
, message
);
1578 BOOPSI_DISPATCHER_END
1580 AROS_UFH3(void, lv_doubleclick
,
1581 AROS_UFHA(struct Hook
*, h
, A0
),
1582 AROS_UFHA(Object
*, object
, A2
),
1583 AROS_UFHA(void *, arg
, A1
))
1587 LONG active
= MUIV_List_Active_Off
;
1589 struct ListNode
*iln
;
1591 D(bug("[HDToolBox] lv_doubleclick()\n"));
1593 get(object
, MUIA_List_Active
, &active
);
1594 if (active
!= MUIV_List_Active_Off
)
1596 DoMethod(object
,MUIM_List_GetEntry
,active
, (IPTR
)&iln
);
1597 if (iln
->flags
& LNF_Listable
)
1599 ShowList(object
, &iln
->list
);
1600 type
= iln
->ln
.ln_Type
;
1602 else if (iln
->ln
.ln_Type
== LNT_Parent
)
1604 if (iln
->parent
->parent
)
1606 ShowList(object
, &iln
->parent
->parent
->list
);
1607 type
= iln
->parent
->parent
->ln
.ln_Type
;
1614 enableObject(gadgets
.buttons
[GB_ADD_ENTRY
]);
1615 disableObject(gadgets
.buttons
[GB_REMOVE_ENTRY
]);
1616 disableObject(gadgets
.buttons
[GB_CREATE_TABLE
]);
1617 disableObject(gadgets
.buttons
[GB_CHANGE_TYPE
]);
1618 disableObject(gadgets
.buttons
[GB_RESIZE_MOVE
]);
1619 disableObject(gadgets
.buttons
[GB_PARENT
]);
1620 disableObject(gadgets
.buttons
[GB_RENAME
]);
1621 disableObject(gadgets
.buttons
[GB_DOSENVEC
]);
1622 disableObject(gadgets
.buttons
[GB_SWITCHES
]);
1623 disableObject(gadgets
.buttons
[GB_SAVE_CHANGES
]);
1626 disableObject(gadgets
.buttons
[GB_ADD_ENTRY
]);
1627 disableObject(gadgets
.buttons
[GB_REMOVE_ENTRY
]);
1628 disableObject(gadgets
.buttons
[GB_CREATE_TABLE
]);
1629 disableObject(gadgets
.buttons
[GB_CHANGE_TYPE
]);
1630 disableObject(gadgets
.buttons
[GB_RESIZE_MOVE
]);
1631 enableObject(gadgets
.buttons
[GB_PARENT
]);
1632 disableObject(gadgets
.buttons
[GB_RENAME
]);
1633 disableObject(gadgets
.buttons
[GB_DOSENVEC
]);
1634 disableObject(gadgets
.buttons
[GB_SWITCHES
]);
1635 disableObject(gadgets
.buttons
[GB_SAVE_CHANGES
]);
1639 enableObject(gadgets
.buttons
[GB_ADD_ENTRY
]);
1640 disableObject(gadgets
.buttons
[GB_REMOVE_ENTRY
]);
1641 disableObject(gadgets
.buttons
[GB_CREATE_TABLE
]);
1642 disableObject(gadgets
.buttons
[GB_CHANGE_TYPE
]);
1643 enableObject(gadgets
.buttons
[GB_RESIZE_MOVE
]);
1644 enableObject(gadgets
.buttons
[GB_PARENT
]);
1645 disableObject(gadgets
.buttons
[GB_RENAME
]);
1646 disableObject(gadgets
.buttons
[GB_DOSENVEC
]);
1647 disableObject(gadgets
.buttons
[GB_SWITCHES
]);
1648 disableObject(gadgets
.buttons
[GB_SAVE_CHANGES
]);
1649 DoMethod(gadgets
.buttons
[GB_RESIZE_MOVE
], MUIM_KillNotify
, MUIA_Pressed
);
1652 gadgets
.buttons
[GB_RESIZE_MOVE
],
1653 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)resizemovegadgets
.win
, 3,
1654 MUIM_Set
, MUIA_Window_Open
, TRUE
1658 resizemovegadgets
.win
,
1659 MUIM_Notify
, MUIA_Window_Open
, TRUE
, (IPTR
)resizemovegadgets
.pt
, 3,
1660 MUIM_Set
, PTCT_PartitionTable
, (IPTR
)iln
1669 AROS_UFH3(void, lv_click
,
1670 AROS_UFHA(struct Hook
*, h
, A0
),
1671 AROS_UFHA(Object
*, object
, A2
),
1672 AROS_UFHA(void *, arg
, A1
))
1676 LONG active
= MUIV_List_Active_Off
;
1677 struct ListNode
*iln
;
1681 D(bug("[HDToolBox] lv_click()\n"));
1683 get(object
, MUIA_List_Active
, &active
);
1684 if (active
!= MUIV_List_Active_Off
)
1686 DoMethod(object
,MUIM_List_GetEntry
,active
, (IPTR
)&iln
);
1687 DoMethod(gadgets
.rightlv
, MUIM_List_Clear
);
1688 switch (iln
->ln
.ln_Type
)
1691 sprintf(str
, "%s: %d", MSG(WORD_Units
),(int)countNodes(&iln
->list
, LNT_Harddisk
));
1692 DoMethod(gadgets
.rightlv
, MUIM_List_InsertSingle
, (IPTR
)str
, MUIV_List_Insert_Bottom
);
1693 enableObject(gadgets
.buttons
[GB_REMOVE_ENTRY
]);
1694 if (iln
->change_count
> 0)
1695 enableObject(gadgets
.buttons
[GB_SAVE_CHANGES
]);
1697 disableObject(gadgets
.buttons
[GB_SAVE_CHANGES
]);
1702 struct HDTBPartition
*partition
;
1703 partition
= (struct HDTBPartition
*)iln
;
1709 (partition
->de
.de_HighCyl
-partition
->de
.de_LowCyl
+1)*
1710 partition
->de
.de_Surfaces
*partition
->de
.de_BlocksPerTrack
1714 sprintf(str
, "%s: %s", MSG(WORD_Size
), sizestr
);
1715 DoMethod(gadgets
.rightlv
, MUIM_List_InsertSingle
, (IPTR
)str
, MUIV_List_Insert_Bottom
);
1716 sprintf(str
, "%s: ", MSG(WORD_Partition_Table
));
1717 if (partition
->table
)
1719 struct TableTypeNode
*ttn
;
1720 ttn
= findTableTypeNode(partition
->table
->type
);
1721 strcat(str
, ttn
->pti
->pti_Name
);
1722 DoMethod(gadgets
.rightlv
, MUIM_List_InsertSingle
, (IPTR
)str
, MUIV_List_Insert_Bottom
);
1723 sprintf(str
, "%s: %d", MSG(WORD_Partitions
), (int)countNodes(&iln
->list
, LNT_Partition
));
1724 DoMethod(gadgets
.rightlv
, MUIM_List_InsertSingle
, (IPTR
)str
, MUIV_List_Insert_Bottom
);
1728 strcat(str
, MSG(WORD_Unknown
));
1729 DoMethod(gadgets
.rightlv
, MUIM_List_InsertSingle
, (IPTR
)str
, MUIV_List_Insert_Bottom
);
1731 if (iln
->ln
.ln_Type
== LNT_Partition
)
1733 struct TypeNode
*type
;
1734 type
= findPartitionType(&partition
->type
, partition
->root
->table
->type
);
1735 sprintf(str
, "%s: ", MSG(WORD_Partition_Type
));
1737 strcat(str
, type
->ln
.ln_Name
);
1739 strcat(str
, MSG(WORD_Unknown
));
1740 DoMethod(gadgets
.rightlv
, MUIM_List_InsertSingle
, (IPTR
)str
, MUIV_List_Insert_Bottom
);
1741 sprintf(str
, "%s: ", MSG(WORD_Active
));
1742 if (partition
->flags
& PNF_ACTIVE
)
1743 strcat(str
, MSG_STD(YESSTR
));
1745 strcat(str
, MSG_STD(NOSTR
));
1746 DoMethod(gadgets
.rightlv
, MUIM_List_InsertSingle
, (IPTR
)str
, MUIV_List_Insert_Bottom
);
1747 sprintf(str
, "%s: ", MSG(WORD_Bootable
));
1748 if (partition
->flags
& PNF_BOOTABLE
)
1749 strcat(str
, MSG_STD(YESSTR
));
1751 strcat(str
, MSG_STD(NOSTR
));
1752 DoMethod(gadgets
.rightlv
, MUIM_List_InsertSingle
, (IPTR
)str
, MUIV_List_Insert_Bottom
);
1753 sprintf(str
, "%s: ", MSG(WORD_Automount
));
1754 if (partition
->flags
& PNF_AUTOMOUNT
)
1755 strcat(str
, MSG_STD(YESSTR
));
1757 strcat(str
, MSG_STD(NOSTR
));
1758 DoMethod(gadgets
.rightlv
, MUIM_List_InsertSingle
, (IPTR
)str
, MUIV_List_Insert_Bottom
);
1759 enableObject(gadgets
.buttons
[GB_REMOVE_ENTRY
]);
1760 enableObject(gadgets
.buttons
[GB_RENAME
]);
1761 enableObject(gadgets
.buttons
[GB_DOSENVEC
]);
1762 enableObject(gadgets
.buttons
[GB_SWITCHES
]);
1763 SetAttrs(part_item
, MUIA_Menuitem_Enabled
, !partition
->table
, TAG_DONE
);
1765 else if (iln
->ln
.ln_Type
== LNT_Harddisk
)
1767 if (iln
->change_count
> 0)
1768 enableObject(gadgets
.buttons
[GB_SAVE_CHANGES
]);
1770 disableObject(gadgets
.buttons
[GB_SAVE_CHANGES
]);
1772 enableObject(gadgets
.buttons
[GB_CREATE_TABLE
]);
1773 enableObject(gadgets
.buttons
[GB_CHANGE_TYPE
]);
1777 disableObject(gadgets
.buttons
[GB_REMOVE_ENTRY
]);
1778 disableObject(gadgets
.buttons
[GB_RENAME
]);
1779 disableObject(gadgets
.buttons
[GB_DOSENVEC
]);
1780 disableObject(gadgets
.buttons
[GB_SWITCHES
]);
1781 disableObject(gadgets
.buttons
[GB_CREATE_TABLE
]);
1782 disableObject(gadgets
.buttons
[GB_CHANGE_TYPE
]);
1783 disableObject(gadgets
.buttons
[GB_SAVE_CHANGES
]);
1784 SetAttrs(part_item
, MUIA_Menuitem_Enabled
, FALSE
, TAG_DONE
);
1792 /**************************************** Main ******************************/
1796 struct MUI_CustomClass
*listcc
;
1799 D(bug("[HDToolBox] initGUI()\n"));
1801 MUIMasterBase
= OpenLibrary("muimaster.library", 0);
1803 return ERR_MUIMASTER
;
1805 ptclass
= makePTClass();
1806 if (ptclass
== NULL
)
1809 listcc
= MUI_CreateCustomClass(NULL
, MUIC_Listview
, NULL
,
1810 sizeof(struct LeftListview__Data
), LeftListview_Dispatcher
);
1814 hook_display
.h_Entry
= (HOOKFUNC
)display_function
;
1815 hook_buttons
.h_Entry
= (HOOKFUNC
)buttons_function
;
1816 hook_createml
.h_Entry
= (HOOKFUNC
)createml_function
;
1817 hook_lv_doubleclick
.h_Entry
= (HOOKFUNC
)lv_doubleclick
;
1818 hook_lv_click
.h_Entry
= (HOOKFUNC
)lv_click
;
1819 partitiontypegadgets
.hook_hexidedit
.h_Entry
= (HOOKFUNC
)hexidedit_function
;
1821 app
= ApplicationObject
,
1822 MUIA_Application_Title
, "HDToolBox",
1823 MUIA_Application_Version
, "$VER: HDToolBox 0.4 (21.1.2014)",
1824 MUIA_Application_Copyright
, "(c) 1995-2014 AROS Development Team",
1825 MUIA_Application_Author
, "Bearly, Ogun, Fats and others at AROS",
1826 MUIA_Application_Description
, "Partition your disks.",
1827 MUIA_Application_Base
, "HDTOOLBOX",
1828 MUIA_Application_Menustrip
, MenuitemObject
,
1829 MUIA_Family_Child
, MenuitemObject
,
1830 MUIA_Menuitem_Title
, MSG(WORD_MENU_Project
),
1832 about_item
= MenuitemObject
, MUIA_Menuitem_Title
, MSG(WORD_MENU_About
),
1835 quit_item
= MenuitemObject
, MUIA_Menuitem_Title
, MSG(WORD_MENU_Quit
),
1839 part_item
= MenuitemObject
,
1840 MUIA_Menuitem_Title
, MSG(WORD_MENU_Partition
),
1841 MUIA_Menuitem_Enabled
, FALSE
,
1843 createml_item
= MenuitemObject
,
1844 MUIA_Menuitem_Title
, MSG(WORD_MENU_CreateMountlist
),
1848 SubWindow
, mainwin
= WindowObject
,
1849 MUIA_Window_Title
, "HDToolBox",
1850 MUIA_Window_ID
, MAKE_ID('H','D','T','B'),
1851 MUIA_Window_Activate
, TRUE
,
1852 MUIA_Window_Height
, MUIV_Window_Height_Visible(50),
1853 MUIA_Window_Width
, MUIV_Window_Width_Visible(60),
1854 WindowContents
, VGroup
,
1857 Child
, gadgets
.text
= TextObject
,
1859 MUIA_Text_Contents
, MSG(MSG_Welcome
),
1862 Child
, (gadgets
.leftlv
= NewObject(listcc
->mcc_Class
, NULL
,
1863 MUIA_Listview_List
, ListObject
,
1866 MUIA_List_DisplayHook
, &hook_display
,
1867 MUIA_List_Format
, ",",
1868 MUIA_List_Title
, TRUE
,
1871 Child
, ListviewObject
,
1872 MUIA_Listview_List
, (gadgets
.rightlv
= ListObject
,
1874 MUIA_List_Title
, TRUE
,
1875 MUIA_List_ConstructHook
, MUIV_List_ConstructHook_String
,
1876 MUIA_List_DestructHook
, MUIV_List_DestructHook_String
,
1878 MUIA_Listview_Input
, FALSE
,
1886 Child
, gadgets
.buttons
[GB_ADD_ENTRY
] = SIMPLEBUTTON(WORD_AddEntry
),
1887 Child
, gadgets
.buttons
[GB_REMOVE_ENTRY
] = SIMPLEBUTTON(WORD_RemoveEntry
),
1890 Child
, gadgets
.buttons
[GB_CREATE_TABLE
] = SIMPLEBUTTON(WORD_Create_Table
),
1891 Child
, gadgets
.buttons
[GB_CHANGE_TYPE
] = SIMPLEBUTTON(WORD_Change_Type
),
1894 Child
, gadgets
.buttons
[GB_RESIZE_MOVE
] = SIMPLEBUTTON(WORD_Resize_Move
),
1895 Child
, gadgets
.buttons
[GB_PARENT
] = SIMPLEBUTTON(WORD_Parent
),
1898 Child
, gadgets
.buttons
[GB_RENAME
] = SIMPLEBUTTON(WORD_Rename
),
1899 Child
, gadgets
.buttons
[GB_DOSENVEC
] = SIMPLEBUTTON(WORD_DosEnvec
),
1902 Child
, gadgets
.buttons
[GB_SWITCHES
] = SIMPLEBUTTON(WORD_Switches
),
1907 MUIA_Group_SameWidth
, TRUE
,
1909 Child
, gadgets
.buttons
[GB_SAVE_CHANGES
] = IMAGEBUTTON(WORD_Save_Changes
, COOL_SAVEIMAGE_ID
),
1910 Child
, gadgets
.buttons
[GB_EXIT
] = IMAGEBUTTON(WORD_Exit
, COOL_CANCELIMAGE_ID
),
1915 SubWindow
, adddevicegadgets
.win
= WindowObject
,
1916 MUIA_Window_Title
, MSG(WORD_Devices
),
1917 MUIA_Window_Activate
, TRUE
,
1918 WindowContents
, VGroup
,
1919 Child
, PopaslObject
,
1920 MUIA_Popstring_String
, adddevicegadgets
.file
= StringObject
,
1923 MUIA_Popstring_Button
, PopButton(MUII_PopFile
),
1926 MUIA_Group_SameWidth
, TRUE
,
1928 Child
, adddevicegadgets
.ok
= IMAGEBUTTON(WORD_Ok
, COOL_USEIMAGE_ID
),
1929 Child
, adddevicegadgets
.cancel
= IMAGEBUTTON(WORD_Cancel
, COOL_CANCELIMAGE_ID
),
1933 SubWindow
, addpartitiongadgets
.win
= WindowObject
,
1934 MUIA_Window_Title
, MSG(MSG_Select_Empty_Area
),
1935 MUIA_Window_Activate
, TRUE
,
1936 WindowContents
, VGroup
,
1937 Child
, addpartitiongadgets
.pt
= BoopsiObject
,
1939 MUIA_Boopsi_Class
, ptclass
,
1940 MUIA_Boopsi_MinWidth
, 600,
1941 MUIA_Boopsi_MinHeight
, 100,
1942 MUIA_Boopsi_TagDrawInfo
, GA_DrawInfo
,
1943 MUIA_Boopsi_Remember
, PTCT_PartitionTable
,
1944 MUIA_Boopsi_Remember
, PTCT_Flags
,
1945 PTCT_Flags
, PTCTF_NoPartitionMove
| PTCTF_EmptySelectOnly
,
1951 MUIA_VertWeight
, 10,
1952 ICA_TARGET
, ICTARGET_IDCMP
,
1955 MUIA_Group_SameWidth
, TRUE
,
1957 Child
, addpartitiongadgets
.ok
= IMAGEBUTTON(WORD_Ok
, COOL_USEIMAGE_ID
),
1958 Child
, addpartitiongadgets
.cancel
= IMAGEBUTTON(WORD_Cancel
, COOL_CANCELIMAGE_ID
),
1962 SubWindow
, partitiontypegadgets
.win
= WindowObject
,
1963 MUIA_Window_Title
, MSG(WORD_Partition_Type
),
1964 MUIA_Window_Activate
, TRUE
,
1965 WindowContents
, VGroup
,
1966 Child
, partitiontypegadgets
.lv
= ListviewObject
,
1967 MUIA_Listview_List
, ListObject
,
1969 MUIA_List_ConstructHook
, MUIV_List_ConstructHook_String
,
1970 MUIA_List_DestructHook
, MUIV_List_DestructHook_String
,
1971 MUIA_List_Title
, TRUE
,
1975 Child
, partitiontypegadgets
.base
= CycleObject
,
1977 MUIA_Cycle_Entries
, editcycleentries
,
1978 MUIA_HorizWeight
, 1,
1980 Child
, partitiontypegadgets
.hexid
= StringObject
,
1982 MUIA_String_EditHook
, &partitiontypegadgets
.hook_hexidedit
,
1986 MUIA_Group_SameWidth
, TRUE
,
1988 Child
, partitiontypegadgets
.ok
= IMAGEBUTTON(WORD_Ok
, COOL_USEIMAGE_ID
),
1989 Child
, partitiontypegadgets
.cancel
= IMAGEBUTTON(WORD_Cancel
, COOL_CANCELIMAGE_ID
),
1993 SubWindow
, partitiontabletypegadgets
.win
= WindowObject
,
1994 MUIA_Window_Title
, MSG(WORD_Partition_Table_Type
),
1995 MUIA_Window_Activate
, TRUE
,
1996 WindowContents
, VGroup
,
1997 Child
, partitiontabletypegadgets
.lv
= ListviewObject
,
1998 MUIA_Listview_List
, ListObject
,
2000 MUIA_List_ConstructHook
, MUIV_List_ConstructHook_String
,
2001 MUIA_List_DestructHook
, MUIV_List_DestructHook_String
,
2002 MUIA_List_Title
, TRUE
,
2006 MUIA_Group_SameWidth
, TRUE
,
2008 Child
, partitiontabletypegadgets
.ok
= IMAGEBUTTON(WORD_Ok
, COOL_USEIMAGE_ID
),
2009 Child
, partitiontabletypegadgets
.cancel
= IMAGEBUTTON(WORD_Cancel
, COOL_CANCELIMAGE_ID
),
2013 SubWindow
, resizemovegadgets
.win
= WindowObject
,
2014 MUIA_Window_Title
, MSG(MSG_Select_Partition_Resize_Move
),
2015 MUIA_Window_Activate
, TRUE
,
2016 WindowContents
, VGroup
,
2017 Child
, resizemovegadgets
.pt
= BoopsiObject
,
2019 MUIA_Boopsi_Class
, ptclass
,
2020 MUIA_Boopsi_MinWidth
, 600,
2021 MUIA_Boopsi_MinHeight
, 100,
2022 MUIA_Boopsi_TagDrawInfo
, GA_DrawInfo
,
2023 MUIA_Boopsi_Remember
, PTCT_PartitionTable
,
2024 MUIA_Boopsi_Remember
, PTCT_Flags
,
2031 MUIA_VertWeight
, 10,
2032 ICA_TARGET
, ICTARGET_IDCMP
,
2036 MUIA_FrameTitle
, MSG(WORD_Geometry
),
2040 Child
, Label2("Low Cyl"),
2041 Child
, resizemovegadgets
.lowcyl
=StringObject
,
2043 MUIA_String_Integer
, 0,
2044 MUIA_String_Accept
, "0123456789",
2048 Child
, Label2("High Cyl"),
2049 Child
, resizemovegadgets
.highcyl
=StringObject
,
2051 MUIA_String_Integer
, 0,
2052 MUIA_String_Accept
, "0123456789",
2056 Child
, Label2("Total Cyl"),
2057 Child
, resizemovegadgets
.totalcyl
=StringObject
,
2059 MUIA_String_Integer
, 0,
2060 MUIA_String_Accept
, "0123456789",
2063 MUIA_HorizWeight
, 10,
2065 Child
, Label2("Size"),
2066 Child
, resizemovegadgets
.size
=StringObject
,
2068 MUIA_String_Accept
, "0123456789GM.",
2069 MUIA_HorizWeight
, 3,
2074 MUIA_Group_SameWidth
, TRUE
,
2076 Child
, resizemovegadgets
.ok
= IMAGEBUTTON(WORD_Ok
, COOL_USEIMAGE_ID
),
2077 Child
, resizemovegadgets
.cancel
= IMAGEBUTTON(WORD_Cancel
, COOL_CANCELIMAGE_ID
),
2081 SubWindow
, renamegadgets
.win
= WindowObject
,
2082 MUIA_Window_Title
, MSG(WORD_Rename
),
2083 MUIA_Window_Activate
, TRUE
,
2084 WindowContents
, VGroup
,
2085 Child
, renamegadgets
.name
= StringObject
,
2089 MUIA_Group_SameWidth
, TRUE
,
2091 Child
, renamegadgets
.ok
= IMAGEBUTTON(WORD_Ok
, COOL_USEIMAGE_ID
),
2092 Child
, renamegadgets
.cancel
= IMAGEBUTTON(WORD_Cancel
, COOL_CANCELIMAGE_ID
),
2096 SubWindow
, dosenvecgadgets
.win
= WindowObject
,
2097 MUIA_Window_Title
, MSG(WORD_DosEnvec
),
2098 MUIA_Window_Activate
, TRUE
,
2099 WindowContents
, VGroup
,
2103 Child
, Label2("Mask"),
2104 Child
, dosenvecgadgets
.mask
=StringObject
,
2106 MUIA_String_Integer
, -2,
2107 MUIA_String_Accept
, "0123456789",
2111 Child
, Label2("MaxTransfer"),
2112 Child
, dosenvecgadgets
.maxtransfer
=StringObject
,
2114 MUIA_String_Contents
, "0x7FFFFF",
2115 MUIA_String_Accept
, "0123456789x",
2122 Child
, Label("_Custom Bootcode"),
2124 Child
, dosenvecgadgets
.custboot
=MUI_MakeObject
2127 (IPTR
)"_Custom Bootcode"
2131 Child
, Label2("Nr. of Custom Bootblocks"),
2132 Child
, dosenvecgadgets
.numcustboot
=StringObject
,
2134 MUIA_String_Integer
, 0,
2135 MUIA_String_Accept
, "0123456789",
2141 MUIA_FrameTitle
, "Reserved Blocks at",
2143 Child
, Label2("Beginning"),
2144 Child
, dosenvecgadgets
.reservedblocksstart
=StringObject
,
2146 MUIA_String_Integer
, 0,
2147 MUIA_String_Accept
, "0123456789",
2151 Child
, Label2("End"),
2152 Child
, dosenvecgadgets
.reservedblocksend
=StringObject
,
2154 MUIA_String_Integer
, 0,
2155 MUIA_String_Accept
, "0123456789",
2162 Child
, Label("BlockSize"),
2163 Child
, dosenvecgadgets
.blocksize
=CycleObject
,
2165 MUIA_Cycle_Entries
, blocksizecycleentries
,
2169 Child
, Label2("Buffers"),
2170 Child
, dosenvecgadgets
.buffers
=StringObject
,
2172 MUIA_String_Integer
, 20,
2173 MUIA_String_Accept
, "0123456789",
2178 MUIA_Group_SameWidth
, TRUE
,
2180 Child
, dosenvecgadgets
.ok
= IMAGEBUTTON(WORD_Ok
, COOL_USEIMAGE_ID
),
2181 Child
, dosenvecgadgets
.cancel
= IMAGEBUTTON(WORD_Cancel
, COOL_CANCELIMAGE_ID
),
2185 SubWindow
, mountbootgadgets
.win
= WindowObject
,
2186 MUIA_Window_Title
, MSG(WORD_Switches
),
2187 MUIA_Window_Activate
, TRUE
,
2188 WindowContents
, VGroup
,
2190 Child
, Label(MSG(WORD_Active
)),
2192 Child
, mountbootgadgets
.active
=MUI_MakeObject
2199 Child
, Label(MSG(WORD_Automount
)),
2201 Child
, mountbootgadgets
.automount
=MUI_MakeObject
2208 Child
, Label(MSG(WORD_Bootable
)),
2210 Child
, mountbootgadgets
.bootable
=MUI_MakeObject
2217 Child
, Label(MSG(WORD_BootPri
)),
2218 Child
, mountbootgadgets
.bootpri
=StringObject
,
2220 MUIA_String_Integer
, 0,
2221 MUIA_String_Accept
, "-0123456789",
2225 MUIA_Group_SameWidth
, TRUE
,
2227 Child
, mountbootgadgets
.ok
= IMAGEBUTTON(WORD_Ok
, COOL_USEIMAGE_ID
),
2228 Child
, mountbootgadgets
.cancel
= IMAGEBUTTON(WORD_Cancel
, COOL_CANCELIMAGE_ID
),
2240 mainwin
, MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
, (IPTR
)app
, 2,
2241 MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
2245 gadgets
.buttons
[GB_EXIT
], MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)app
, 2,
2246 MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
2251 MUIM_Notify
, MUIA_Listview_DoubleClick
, TRUE
, (IPTR
)gadgets
.leftlv
, 2,
2252 MUIM_CallHook
, (IPTR
)&hook_lv_doubleclick
2257 MUIM_Notify
, MUIA_Listview_SelectChange
, TRUE
, (IPTR
)gadgets
.leftlv
, 2,
2258 MUIM_CallHook
, (IPTR
)&hook_lv_click
2260 for (i
=GB_FIRST
;i
<GB_EXIT
;i
++)
2265 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)gadgets
.buttons
[i
], 2,
2266 MUIM_CallHook
, (IPTR
)&hook_buttons
2268 /* MUIM_CallHook, hook */
2270 disableObject(gadgets
.buttons
[GB_REMOVE_ENTRY
]);
2271 disableObject(gadgets
.buttons
[GB_CREATE_TABLE
]);
2272 disableObject(gadgets
.buttons
[GB_CHANGE_TYPE
]);
2273 disableObject(gadgets
.buttons
[GB_RESIZE_MOVE
]);
2274 disableObject(gadgets
.buttons
[GB_PARENT
]);
2275 disableObject(gadgets
.buttons
[GB_RENAME
]);
2276 disableObject(gadgets
.buttons
[GB_DOSENVEC
]);
2277 disableObject(gadgets
.buttons
[GB_SWITCHES
]);
2278 disableObject(gadgets
.buttons
[GB_SAVE_CHANGES
]);
2282 MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
, (IPTR
)app
, 2,
2283 MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
2285 DoMethod(createml_item
,
2286 MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
, app
, 2,
2287 MUIM_CallHook
, &hook_createml
);
2288 /* add device window */
2291 adddevicegadgets
.win
,
2292 MUIM_Notify
, MUIA_Window_Open
, TRUE
, (IPTR
)mainwin
, 3,
2293 MUIM_Set
, MUIA_Window_Sleep
, TRUE
2297 adddevicegadgets
.win
,
2298 MUIM_Notify
, MUIA_Window_Open
, FALSE
, (IPTR
)mainwin
, 3,
2299 MUIM_Set
, MUIA_Window_Sleep
, FALSE
2303 adddevicegadgets
.win
,
2304 MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
, (IPTR
)adddevicegadgets
.win
, 3,
2305 MUIM_Set
, MUIA_Window_Open
, FALSE
2309 adddevicegadgets
.ok
,
2310 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)adddevicegadgets
.ok
, 2,
2311 MUIM_CallHook
, (IPTR
)&hook_buttons
2315 adddevicegadgets
.ok
,
2316 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)adddevicegadgets
.win
, 3,
2317 MUIM_Set
, MUIA_Window_Open
, FALSE
2321 adddevicegadgets
.cancel
,
2322 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)adddevicegadgets
.win
, 3,
2323 MUIM_Set
, MUIA_Window_Open
, FALSE
2325 /* add partition window */
2328 addpartitiongadgets
.win
,
2329 MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
, (IPTR
)addpartitiongadgets
.win
, 3,
2330 MUIM_Set
, MUIA_Window_Open
, FALSE
2334 addpartitiongadgets
.ok
,
2335 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)addpartitiongadgets
.ok
, 2,
2336 MUIM_CallHook
, (IPTR
)&hook_buttons
2340 addpartitiongadgets
.ok
,
2341 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)addpartitiongadgets
.win
, 3,
2342 MUIM_Set
, MUIA_Window_Open
, FALSE
2346 addpartitiongadgets
.cancel
,
2347 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)addpartitiongadgets
.win
, 3,
2348 MUIM_Set
, MUIA_Window_Open
, FALSE
2352 addpartitiongadgets
.pt
,
2353 MUIM_Notify
, PTCT_Selected
, TRUE
, (IPTR
)addpartitiongadgets
.pt
, 2,
2354 MUIM_CallHook
, (IPTR
)&hook_buttons
2356 /* partition type window */
2359 partitiontypegadgets
.win
,
2360 MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
, (IPTR
)partitiontypegadgets
.win
, 3,
2361 MUIM_Set
, MUIA_Window_Open
, FALSE
2365 partitiontypegadgets
.hexid
,
2366 MUIM_Notify
, MUIA_String_Acknowledge
, MUIV_EveryTime
,
2367 (IPTR
)partitiontypegadgets
.hexid
, 2,
2368 MUIM_CallHook
, (IPTR
)&hook_buttons
2370 /* "FIXME: notify doesn't work" */
2373 partitiontypegadgets
.ok
,
2374 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)partitiontypegadgets
.ok
, 2,
2375 MUIM_CallHook
, (IPTR
)&hook_buttons
2379 partitiontypegadgets
.ok
,
2380 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)partitiontypegadgets
.win
, 3,
2381 MUIM_Set
, MUIA_Window_Open
, FALSE
2385 partitiontypegadgets
.cancel
,
2386 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)partitiontypegadgets
.win
, 3,
2387 MUIM_Set
, MUIA_Window_Open
, FALSE
2391 partitiontypegadgets
.lv
,
2392 MUIM_Notify
, MUIA_Listview_SelectChange
, TRUE
, (IPTR
)partitiontypegadgets
.lv
, 2,
2393 MUIM_CallHook
, (IPTR
)&hook_buttons
2395 /* partition table type window */
2398 partitiontabletypegadgets
.win
,
2399 MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
, (IPTR
)partitiontabletypegadgets
.win
, 3,
2400 MUIM_Set
, MUIA_Window_Open
, FALSE
2404 partitiontabletypegadgets
.ok
,
2405 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)partitiontabletypegadgets
.ok
, 2,
2406 MUIM_CallHook
, (IPTR
)&hook_buttons
2410 partitiontabletypegadgets
.ok
,
2411 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)partitiontabletypegadgets
.win
, 3,
2412 MUIM_Set
, MUIA_Window_Open
, FALSE
2416 partitiontabletypegadgets
.cancel
,
2417 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)partitiontabletypegadgets
.win
, 3,
2418 MUIM_Set
, MUIA_Window_Open
, FALSE
2420 /* resize/move window */
2423 resizemovegadgets
.win
,
2424 MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
, (IPTR
)resizemovegadgets
.win
, 3,
2425 MUIM_Set
, MUIA_Window_Open
, FALSE
2429 resizemovegadgets
.ok
,
2430 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)resizemovegadgets
.ok
, 2,
2431 MUIM_CallHook
, (IPTR
)&hook_buttons
2435 resizemovegadgets
.ok
,
2436 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)resizemovegadgets
.win
, 3,
2437 MUIM_Set
, MUIA_Window_Open
, FALSE
2441 resizemovegadgets
.size
,
2442 MUIM_Notify
, MUIA_String_Acknowledge
, MUIV_EveryTime
,
2443 (IPTR
)resizemovegadgets
.size
, 2,
2444 MUIM_CallHook
, (IPTR
)&hook_buttons
2448 resizemovegadgets
.cancel
,
2449 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)resizemovegadgets
.cancel
, 2,
2450 MUIM_CallHook
, (IPTR
)&hook_buttons
2454 resizemovegadgets
.cancel
,
2455 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)resizemovegadgets
.win
, 3,
2456 MUIM_Set
, MUIA_Window_Open
, FALSE
2460 resizemovegadgets
.pt
,
2461 MUIM_Notify
, PTCT_Selected
, TRUE
, (IPTR
)resizemovegadgets
.pt
, 3,
2462 MUIM_CallHook
, (IPTR
)&hook_buttons
, PTCT_Selected
2466 resizemovegadgets
.pt
,
2467 MUIM_Notify
, PTCT_PartitionMove
, TRUE
, (IPTR
)resizemovegadgets
.pt
, 3,
2468 MUIM_CallHook
, (IPTR
)&hook_buttons
, PTCT_PartitionMove
2472 resizemovegadgets
.highcyl
,
2473 MUIM_Notify
, MUIA_String_Acknowledge
, MUIV_EveryTime
, (IPTR
)resizemovegadgets
.highcyl
, 2,
2474 MUIM_CallHook
, (IPTR
)&hook_buttons
2478 resizemovegadgets
.lowcyl
,
2479 MUIM_Notify
, MUIA_String_Acknowledge
, MUIV_EveryTime
, (IPTR
)resizemovegadgets
.lowcyl
, 2,
2480 MUIM_CallHook
, (IPTR
)&hook_buttons
2484 resizemovegadgets
.totalcyl
,
2485 MUIM_Notify
, MUIA_String_Acknowledge
, MUIV_EveryTime
, (IPTR
)resizemovegadgets
.totalcyl
, 2,
2486 MUIM_CallHook
, (IPTR
)&hook_buttons
2492 MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
, (IPTR
)renamegadgets
.win
, 3,
2493 MUIM_Set
, MUIA_Window_Open
, FALSE
2498 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)renamegadgets
.ok
, 2,
2499 MUIM_CallHook
, (IPTR
)&hook_buttons
2504 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)renamegadgets
.win
, 3,
2505 MUIM_Set
, MUIA_Window_Open
, FALSE
2509 renamegadgets
.cancel
,
2510 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)renamegadgets
.win
, 3,
2511 MUIM_Set
, MUIA_Window_Open
, FALSE
2513 /* dosenvec window */
2516 dosenvecgadgets
.win
,
2517 MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
, (IPTR
)dosenvecgadgets
.win
, 3,
2518 MUIM_Set
, MUIA_Window_Open
, FALSE
2523 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)dosenvecgadgets
.ok
, 2,
2524 MUIM_CallHook
, (IPTR
)&hook_buttons
2529 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)dosenvecgadgets
.win
, 3,
2530 MUIM_Set
, MUIA_Window_Open
, FALSE
2534 dosenvecgadgets
.cancel
,
2535 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)dosenvecgadgets
.win
, 3,
2536 MUIM_Set
, MUIA_Window_Open
, FALSE
2538 /* automount/boot window */
2541 mountbootgadgets
.win
,
2542 MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
, (IPTR
)mountbootgadgets
.win
, 3,
2543 MUIM_Set
, MUIA_Window_Open
, FALSE
2547 mountbootgadgets
.ok
,
2548 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)mountbootgadgets
.ok
, 2,
2549 MUIM_CallHook
, (IPTR
)&hook_buttons
2553 mountbootgadgets
.ok
,
2554 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)mountbootgadgets
.win
, 3,
2555 MUIM_Set
, MUIA_Window_Open
, FALSE
2559 mountbootgadgets
.cancel
,
2560 MUIM_Notify
, MUIA_Pressed
, FALSE
, (IPTR
)mountbootgadgets
.win
, 3,
2561 MUIM_Set
, MUIA_Window_Open
, FALSE
2563 set(mainwin
, MUIA_Window_Open
, TRUE
);
2569 D(bug("[HDToolBox] deinitGUI()\n"));
2572 MUI_DisposeObject(app
);
2573 if (ptclass
!= NULL
)
2576 CloseLibrary(MUIMasterBase
);
2579 BOOL
QuitGUI(ULONG
*sigs
)
2581 // moved debug from this place because it produces too much garbage
2583 if ((IPTR
)DoMethod(app
, MUIM_Application_NewInput
, (IPTR
)sigs
) == MUIV_Application_ReturnID_Quit
)
2585 D(bug("[HDToolBox] QuitGUI()\n"));