2 Copyright © 2003-2013, The AROS Development Team. All rights reserved.
6 #define MUIMASTER_YES_INLINE_STDARG
9 #include <aros/debug.h>
11 #include <proto/exec.h>
12 #include <proto/intuition.h>
13 #include <proto/muimaster.h>
14 #include <proto/workbench.h>
15 #include <proto/dos.h>
16 #include <proto/alib.h>
17 #include <proto/icon.h>
20 #include <dos/datetime.h>
21 #include <exec/memory.h>
22 #include <libraries/asl.h>
23 #include <libraries/commodities.h>
24 #include <libraries/mui.h>
25 #include <workbench/startup.h>
26 #include <workbench/workbench.h>
27 #include <workbench/icon.h>
28 #include <devices/inputevent.h>
30 #include <mui/TextEditor_mcc.h>
31 #include <zune/iconimage.h>
39 #define RETURNID_SLEEP 1
40 #define RETURNID_WAKE 2
41 #define RETURNID_ABOUT 3
42 #define RETURNID_NEWKEY 4
43 #define RETURNID_DELKEY 5
44 #define RETURNID_LVACK 6
45 #define RETURNID_STRINGACK 7
46 #define RETURNID_SAVE 8
47 #define RETURNID_TOOLACK 9
48 #define RETURNID_STACKACK 10
49 #define RETURNID_COMMENTACK 11
50 #define RETURNID_QUERYVERSION 12
51 #define RETURNID_PROTECT 13
52 #define RETURNID_SCANSIZE 14
54 #define MAX_PATH_LEN 1024
55 #define MAX_TOOLTYPE_LINE 256
56 #define BUFFERSIZE 1024
58 #define USE_TEXTEDITOR 1
63 static Object
*window
, *commentspace
, *filename_string
, *stackspace
, *savebutton
;
64 static Object
*readobject
, *writeobject
, *executeobject
, *deleteobject
;
65 static Object
*scriptobject
, *pureobject
, *archiveobject
, *sizespace
= NULL
;
69 struct Process
*scanProcess
;
76 static struct DirScanProcess
*scanStruct
= NULL
;
79 static Object
*editor
, *slider
;
81 static Object
*list
, *editor
, *liststr
;
84 BOOL file_altered
= FALSE
;
85 BOOL icon_altered
= FALSE
;
86 char loadedcomment
[MAXCOMMENTLENGTH
];
88 void getReadableSize(UBYTE
*buf
, UQUAD size
, BOOL accurate
)
102 /*if (size >= (1024 * 1024 * 1024 * 1024 * 1024 * 1024))
105 array.val = size >> 60;
106 d = (size * 10 + ((1024 * 1024 * 1024 * 1024 * 1024 * 1024) / 2)) / (1024 * 1024 * 1024 * 1024 * 1024 * 1024);
110 else if (size >= (1024 * 1024 * 1024 * 1024 * 1024))
113 array.val = size >> 50;
114 d = (size * 10 + ((1024 * 1024 * 1024 * 1024 * 1024) / 2)) / (1024 * 1024 * 1024 * 1024 * 1024);
118 else if (size >= (1024 * 1024 * 1024 * 1024))
121 array.val = size >> 40;
122 d = (size * 10 + ((1024 * 1024 * 1024 * 1024) / 2)) / (1024 * 1024 * 1024 * 1024);
126 if (size
>= (1024 * 1024 * 1024))
129 array
.val
= size
>> 30;
130 d
= (size
* 10 + ((1024 * 1024 * 1024) / 2)) / (1024 * 1024 * 1024);
134 else if (size
>= (1024 * 1024))
137 array
.val
= size
>> 20;
138 d
= (size
* 10 + ((1024 * 1024) / 2)) / (1024 * 1024);
142 else if (size
>= 1024)
145 array
.val
= size
>> 10;
146 d
= (size
* 10 + (1024 / 2)) / 1024;
162 if (!array
.dec
&& (d
> array
.val
* 10))
171 RawDoFmt(array
.dec
? "%lu.%lu" : "%lu", (RAWARG
)&array
, NULL
, buf
);
176 sprintf((char *)buf
," %s", ch
);
179 #define kExallBufSize (4096)
181 UQUAD
calculateDirectorySize(struct DirScanProcess
*scan
, UQUAD base
, CONST_STRPTR directory
, UQUAD
* lastrefreshsize
)
183 UBYTE
*buffer
= NULL
;
184 BPTR directoryLock
= BNULL
;
185 UQUAD directorySize
= 0;
188 D(bug("[WBInfo] calculateDirectorySize('%s')\n", directory
));
190 directoryLock
= Lock(directory
, SHARED_LOCK
);
192 /* Allocate buffer for ExAll */
193 if ((buffer
= AllocVec(kExallBufSize
, MEMF_CLEAR
|MEMF_PUBLIC
)) == NULL
)
195 UnLock(directoryLock
);
199 struct ExAllData
*ead
= (struct ExAllData
*)buffer
;
200 struct ExAllControl
*eac
= AllocDosObject(DOS_EXALLCONTROL
, NULL
);
201 eac
->eac_LastKey
= 0;
203 struct ExAllData
*oldEad
= ead
;
208 loop
= ExAll(directoryLock
, ead
, kExallBufSize
, ED_COMMENT
, eac
);
210 if(!loop
&& IoErr() != ERROR_NO_MORE_ENTRIES
) break;
212 if(eac
->eac_Entries
!= 0)
216 if (ead
->ed_Type
== ST_FILE
)
218 directorySize
+= ead
->ed_Size
;
219 /* Refresh size only every 25% grow */
220 if ((((base
+ directorySize
) * 100) / (*lastrefreshsize
)) > 125) /* 25 % */
222 getReadableSize(scan
->scanSize
, (base
+ directorySize
), FALSE
);
223 set(sizespace
, MUIA_Text_Contents
, (IPTR
) scan
->scanSize
);
224 *lastrefreshsize
= base
+ directorySize
;
227 else if (ead
->ed_Type
== ST_USERDIR
)
229 ULONG subdirlen
= strlen(directory
) + strlen(ead
->ed_Name
) + 1;
230 char * subdirectory
= AllocVec(subdirlen
+ 1, MEMF_CLEAR
);
231 CopyMem(directory
, subdirectory
, strlen(directory
));
232 AddPart(subdirectory
, ead
->ed_Name
, subdirlen
+ 1);
233 directorySize
+= calculateDirectorySize(scan
, (base
+ directorySize
), subdirectory
, lastrefreshsize
);
236 } while((ead
!= NULL
) && (scan
->scanState
== SCANRUN
));
238 } while((loop
) && (scan
->scanState
== SCANRUN
));
240 FreeDosObject(DOS_EXALLCONTROL
, eac
);
241 UnLock(directoryLock
);
244 return directorySize
;
248 * child process to calculate directory content size..
250 AROS_UFH3(void, scanDir_Process
,
251 AROS_UFHA(STRPTR
, argPtr
, A0
),
252 AROS_UFHA(ULONG
, argSize
, D0
),
253 AROS_UFHA(struct ExecBase
*, SysBase
, A6
))
257 struct Task
*taskSelf
= FindTask(NULL
);
258 struct DirScanProcess
*scan
= taskSelf
->tc_UserData
;
259 UQUAD directorySize
= 0;
261 if (scan
->scanState
== SCANRUN
)
263 UQUAD lastrefreshsize
= 1;
264 D(bug("[WBInfo] scanDir_Process('%s')\n", scan
->scanDir
));
265 scan
->scanSize
= AllocVec(64, MEMF_CLEAR
);
266 directorySize
= calculateDirectorySize(scan
, directorySize
, scan
->scanDir
, &lastrefreshsize
);
267 D(bug("[WBInfo] scanDir_Process: End size = %d bytes\n", directorySize
));
268 getReadableSize(scan
->scanSize
, directorySize
, TRUE
);
269 set(sizespace
, MUIA_Text_Contents
, (IPTR
) scan
->scanSize
);
270 FreeVec(scan
->scanSize
);
272 scan
->scanProcess
= NULL
;
277 UBYTE
**BuildToolTypes(UBYTE
**src_ttypes
)
280 APTR pool
= CreatePool(MEMF_CLEAR
, 200, 200);
281 STRPTR contents
, sp
, *dst_ttypes
;
284 if (!pool
) return NULL
;
285 contents
= (STRPTR
)DoMethod(editor
, MUIM_TextEditor_ExportText
);
287 if (!contents
|| !contents
[0])
295 while((sp
= strchr(sp
, '\n')))
301 dst_ttypes
= AllocPooled(pool
, (lines
+ 3) * sizeof(STRPTR
));
309 *dst_ttypes
++ = (STRPTR
)pool
;
310 *dst_ttypes
++ = (STRPTR
)contents
;
312 for(sp
= contents
, lines
= 0; sp
; lines
++)
314 dst_ttypes
[lines
] = sp
;
315 sp
= strchr(sp
, '\n');
321 dst_ttypes
[lines
] = 0;
325 APTR pool
= CreatePool(MEMF_CLEAR
, 200, 200);
326 Object
*listobj
= list
;
327 WORD list_index
= 0, num_ttypes
= 0, alloc_ttypes
= 10;
330 if (!pool
) return NULL
;
332 dst_ttypes
= AllocPooled(pool
, (alloc_ttypes
+ 2) * sizeof(UBYTE
*));
339 get(listobj
, MUIA_List_Entries
, &list_index
);
340 while(num_ttypes
<list_index
)
343 DoMethod(listobj
, MUIM_List_GetEntry
, num_ttypes
, (IPTR
)&text
);
344 if (num_ttypes
>= alloc_ttypes
)
346 UBYTE
**new_dst_ttypes
= AllocPooled(pool
, (alloc_ttypes
+ 10 + 2) * sizeof(UBYTE
*));
352 CopyMem(dst_ttypes
+ 1, new_dst_ttypes
+ 1, alloc_ttypes
* sizeof(UBYTE
*));
353 dst_ttypes
= new_dst_ttypes
;
356 dst_ttypes
[num_ttypes
+ 1] = AllocPooled(pool
, strlen(text
) + 1);
357 if (!dst_ttypes
[num_ttypes
+ 1])
362 CopyMem(text
, dst_ttypes
[num_ttypes
+ 1], strlen(text
) + 1);
363 D(bug("[WBInfo] tooltype #%ld %s\n", num_ttypes
+ 1, text
));
366 dst_ttypes
[0] = (APTR
)pool
;
367 return dst_ttypes
+ 1;
371 void FreeToolTypes(UBYTE
**ttypes
)
376 FreeVec((APTR
)ttypes
[-1]);
377 DeletePool((APTR
)ttypes
[-2]);
382 DeletePool((APTR
)ttypes
[-1]);
387 void SaveIcon(struct DiskObject
*icon
, STRPTR name
, BPTR cd
)
389 STRPTR tool
= NULL
, stack
= NULL
;
392 UBYTE
**ttypes
= NULL
, **old_ttypes
= NULL
;
394 restored_cd
= CurrentDir(cd
);
396 switch(icon
->do_Type
)
399 get(filename_string
, MUIA_String_Contents
, &tool
);
400 icon
->do_DefaultTool
= tool
;
401 get(stackspace
, MUIA_String_Contents
, &stack
);
403 icon
->do_StackSize
= (LONG
)ls
;
406 get(stackspace
, MUIA_String_Contents
, &stack
);
408 icon
->do_StackSize
= (LONG
)ls
;
412 old_ttypes
= (UBYTE
**)icon
->do_ToolTypes
;
413 ttypes
= BuildToolTypes(old_ttypes
);
414 icon
->do_ToolTypes
= ttypes
;
416 PutIconTags(name
, icon
, TAG_DONE
);
418 icon
->do_ToolTypes
= old_ttypes
;
421 FreeToolTypes(ttypes
);
423 CurrentDir(restored_cd
);
424 icon_altered
= FALSE
;
427 void SaveFile(struct AnchorPath
* ap
, BPTR cd
)
429 ULONG protection
= 0;
432 restored_cd
= CurrentDir(cd
);
434 get(commentspace
, MUIA_String_Contents
, &text
);
436 SetComment(ap
->ap_Buf
, text
);
438 if (XGET(scriptobject
, MUIA_Selected
))
439 protection
|= FIBF_SCRIPT
;
440 if (XGET(pureobject
, MUIA_Selected
))
441 protection
|= FIBF_PURE
;
442 if (XGET(archiveobject
, MUIA_Selected
))
443 protection
|= FIBF_ARCHIVE
;
445 if (! XGET(readobject
, MUIA_Selected
))
446 protection
|= FIBF_READ
;
447 if (! XGET(writeobject
, MUIA_Selected
))
448 protection
|= FIBF_WRITE
;
449 if (! XGET(executeobject
, MUIA_Selected
))
450 protection
|= FIBF_EXECUTE
;
451 if (! XGET(deleteobject
, MUIA_Selected
))
452 protection
|= FIBF_DELETE
;
454 SetProtection(ap
->ap_Buf
, protection
);
456 CurrentDir(restored_cd
);
457 file_altered
= FALSE
;
461 void ListToString(void)
464 DoMethod(list
, MUIM_List_GetEntry
, MUIV_List_GetEntry_Active
, (IPTR
) &text
);
467 set(liststr
, MUIA_String_Contents
, text
);
468 nnset(liststr
, MUIA_Disabled
, FALSE
);
469 set(window
, MUIA_Window_ActiveObject
, (IPTR
)liststr
);
473 void StringToKey(void)
480 DoMethod(list
, MUIM_List_GetEntry
, MUIV_List_GetEntry_Active
, (IPTR
) &text
);
483 get(liststr
, MUIA_String_Contents
, &input
);
484 DoMethod(list
, MUIM_List_InsertSingle
, input
, MUIV_List_Insert_Active
);
485 set(list
, MUIA_List_Active
, MUIV_List_Active_Down
);
486 DoMethod(list
, MUIM_List_Remove
, MUIV_List_Remove_Active
);
487 nnset(liststr
, MUIA_String_Contents
, (IPTR
) "");
488 nnset(liststr
, MUIA_Disabled
, TRUE
);
489 set(window
, MUIA_Window_ActiveObject
, (IPTR
)savebutton
);
495 nnset(liststr
, MUIA_String_Contents
, "");
496 nnset(liststr
, MUIA_Disabled
, FALSE
);
497 DoMethod(list
, MUIM_List_InsertSingle
, "", MUIV_List_Insert_Bottom
);
498 nnset(list
, MUIA_List_Active
, MUIV_List_Active_Bottom
);
499 set(window
, MUIA_Window_ActiveObject
, (IPTR
) liststr
);
505 DoMethod(list
, MUIM_List_GetEntry
, MUIV_List_GetEntry_Active
, (IPTR
)&text
);
509 DoMethod(list
, MUIM_List_Remove
, MUIV_List_Remove_Active
);
510 DoMethod(list
, MUIM_List_GetEntry
, MUIV_List_GetEntry_Active
, (IPTR
)&text
);
513 nnset(liststr
, MUIA_String_Contents
, (IPTR
) "");
514 nnset(liststr
, MUIA_Disabled
, TRUE
);
523 static char * GetVersion(STRPTR name
, BPTR cd
)
525 D(bug("[WBINFO/Getversion] Name %s\n", name
));
526 STRPTR commandline
= NULL
;
527 ULONG commandlineSize
;
528 static TEXT result
[100]; // must be static because we return its address
529 char *retval
= result
;
530 TEXT tmpfilename
[40];
534 BPTR restored_cd
= (BPTR
)-1;
538 D(bug("[WBINFO/Getversion] Name is Null\n"));
542 memset(result
, 0, sizeof(result
));
545 commandlineSize
= strlen(name
) + 20;
546 commandline
= AllocVec(commandlineSize
, MEMF_CLEAR
);
547 if (commandline
== NULL
)
549 D(bug("[WBInfo/GetVersion] Can't allocate RAM for commandline\n"));
553 restored_cd
= CurrentDir(cd
);
555 //search for non-existing temp file name
561 D(bug("[WBINFO/Getversion] Can't find non-existing tmpfile"));
564 sprintf(tmpfilename
, "t:tmp_version_%d", nr
);
565 output
= Open(tmpfilename
, MODE_OLDFILE
);
570 } while (output
!= BNULL
);
572 D(bug("[WBInfo/Getversion] tmpfilename %s\n", tmpfilename
));
573 output
= Open(tmpfilename
, MODE_NEWFILE
);
576 D(bug("[WBInfo/Getversion] Can't create tmpfile\n"));
581 sprintf(commandline
, "c:version \"%s\" full", name
);
582 D(bug("[WBInfo/GetVersion] Commandline %s\n", commandline
));
583 if (SystemTags(commandline
,
584 SYS_Output
, (IPTR
) output
,
585 //SYS_Error, (IPTR) NULL,
589 D(bug("[WBInfo/Getversion] SystemTags failed\n"));
593 // Seek didn't work for me on RAM-Disk, so we reopen the file
595 output
= Open(tmpfilename
, MODE_OLDFILE
);
598 D(bug("[WBInfo/GetVersion] Can't open tmpfile\n"));
602 if (Read(output
, result
, sizeof(result
) - 1) == -1)
604 D(bug("[WBInfo/GetVersion] Can't read from tmpfile\n"));
607 D(bug("[WBInfo/GetVersion] Result %s\n", result
));
609 // remove illegal chars (e.g. newline) from result
610 for (i
= 0 ; result
[i
] != 0 ; i
++)
616 // set string pointer after program name
617 while (*retval
!= ' ')
621 FreeVec(commandline
);
625 DeleteFile(tmpfilename
);
627 if (restored_cd
!= (BPTR
)-1)
628 CurrentDir(restored_cd
);
633 static void AddStackField(Object
* application
, Object
* group
, STRPTR stack
)
635 Object
* stacklabel
= NULL
;
637 stackspace
= (Object
*)StringObject
,
639 MUIA_String_MaxLen
, 16,
640 MUIA_String_Contents
, (IPTR
)stack
,
641 MUIA_String_Format
, MUIV_String_Format_Right
,
642 MUIA_String_Accept
, (IPTR
)"0123456789",
645 stacklabel
= MUI_MakeObject(MUIO_Label
, _(MSG_STACK
), NULL
);
647 if ((stackspace
!= NULL
) && (stacklabel
!= NULL
))
649 DoMethod(group
, MUIM_Group_InitChange
);
650 DoMethod(group
, OM_ADDMEMBER
, stacklabel
);
651 DoMethod(group
, OM_ADDMEMBER
, stackspace
);
652 DoMethod(group
, MUIM_Group_ExitChange
);
653 SetAttrs(stackspace
, MUIA_CycleChain
, 1, TAG_DONE
);
654 DoMethod(stackspace
, MUIM_Notify
,
655 MUIA_String_Acknowledge
, MUIV_EveryTime
,
656 (IPTR
) application
, 2, MUIM_Application_ReturnID
, RETURNID_STACKACK
);
660 static void AddToolField(Object
* application
, Object
* group
, STRPTR tool
)
662 Object
* toolspace
= MUI_NewObject(MUIC_Popasl
, ASLFR_DoSaveMode
, TRUE
,
663 MUIA_Popstring_String
, (IPTR
)(filename_string
= (Object
*)StringObject
,
665 MUIA_String_MaxLen
, MAX_PATH_LEN
,
666 MUIA_String_Contents
, (IPTR
)tool
,
668 MUIA_Popstring_Button
, (IPTR
) PopButton(MUII_PopFile
), TAG_DONE
);
670 Object
* toollabel
= MUI_MakeObject(MUIO_Label
, _(MSG_DEFTOOL
), NULL
);
672 if ((toolspace
!= NULL
) && (toollabel
!= NULL
)&&(filename_string
!= NULL
))
674 DoMethod(group
, MUIM_Group_InitChange
);
675 DoMethod(group
, OM_ADDMEMBER
, toollabel
);
676 DoMethod(group
, OM_ADDMEMBER
, toolspace
);
677 DoMethod(group
, MUIM_Group_ExitChange
);
679 set(toolspace
, MUIA_CycleChain
, 1);
680 DoMethod(filename_string
, MUIM_Notify
,
681 MUIA_String_Acknowledge
, MUIV_EveryTime
,
682 (IPTR
) application
, 2, MUIM_Application_ReturnID
, RETURNID_TOOLACK
);
686 static void AddEmptySpace(Object
* group
)
688 Object
* emptyspace
= MUI_NewObject(MUIC_Rectangle
, TAG_DONE
);
689 if ((emptyspace
!= NULL
))
691 DoMethod(group
, MUIM_Group_InitChange
);
692 DoMethod(group
, OM_ADDMEMBER
, emptyspace
);
693 DoMethod(group
, MUIM_Group_ExitChange
);
697 int main(int argc
, char **argv
)
699 Object
*application
, *grouptool
, *groupstack
= NULL
;
700 Object
*registergroup
= NULL
, *infomenu
= NULL
, *protectmenu
= NULL
, *toolmenu
= NULL
;
701 Object
*datespace
= NULL
, *typespace
= NULL
, *quit
= NULL
, *aboutmenu
= NULL
;
702 Object
*sizegrp
= NULL
, *versiongrp
= NULL
, *versionspace
= NULL
;
703 Object
*cancelbutton
= NULL
;
705 Object
*newkey
= NULL
, *delkey
= NULL
;
707 struct WBStartup
*startup
;
708 struct DiskObject
*icon
= NULL
;
709 struct AnchorPath
*ap
= NULL
;
710 struct DateStamp
*ds
= NULL
;
715 STRPTR name
= NULL
, file
= NULL
, type
= NULL
;
720 char deftool
[MAX_PATH_LEN
];
722 char date
[LEN_DATSTRING
];
723 char time
[LEN_DATSTRING
];
724 char dow
[LEN_DATSTRING
];
725 char datetime
[2*LEN_DATSTRING
];
726 UBYTE flags
[8] = {0}, lname
[MAXFILENAMELENGTH
];
728 char *pages
[] = {_(MSG_INFORMATION
),_(MSG_PROTECTION
),_(MSG_TOOLTYPES
),NULL
};
733 _(MSG_DRAWER
), /* 2 */
735 _(MSG_PROJECT
), /* 4 */
736 _(MSG_GARBAGE
), /* 5 */
737 _(MSG_DEVICE
), /* 6 */
739 _(MSG_APPICON
) /* 8 */
742 int retval
= RETURN_OK
;
746 /* start from wanderer only */
747 PrintFault(ERROR_FILE_NOT_OBJECT
, argv
[0]);
748 retval
= RETURN_FAIL
;
752 startup
= (struct WBStartup
*) argv
;
754 if (startup
->sm_NumArgs
< 2)
756 /* need atleast 1 arg */
757 PrintFault(ERROR_REQUIRED_ARG_MISSING
, argv
[0]);
758 D(bug("[WBInfo] required arg missing\n"));
759 retval
= RETURN_FAIL
;
763 lock
= startup
->sm_ArgList
[1].wa_Lock
;
764 NameFromLock(lock
, lname
, MAXFILENAMELENGTH
);
765 D(bug("[WBInfo] arg parent lock 0x%p: '%s'\n", lock
, lname
));
767 if (startup
->sm_ArgList
[1].wa_Name
!= NULL
)
769 if ((name
= AllocVec(strlen(startup
->sm_ArgList
[1].wa_Name
) + 1, MEMF_CLEAR
)) != NULL
)
771 CopyMem(startup
->sm_ArgList
[1].wa_Name
, name
, strlen(startup
->sm_ArgList
[1].wa_Name
));
772 if ((strlen(name
) > 5)
773 && (strcmp(name
+ strlen(name
) - 5, ".info") == 0))
775 file
= AllocVec(strlen(name
) - 4, MEMF_CLEAR
);
776 CopyMem(name
, file
, strlen(name
) - 5);
780 file
= AllocVec(strlen(name
) + 1, MEMF_CLEAR
);
781 CopyMem(name
, file
, strlen(name
));
783 D(bug("[WBInfo] arg name 0x%p: '%s', file = '%s'\n", name
, name
, file
));
786 cd
= CurrentDir(lock
);
789 /* directory not found*/
790 PrintFault(ERROR_DIR_NOT_FOUND
, argv
[0]);
791 D(bug("[WBInfo] dir not found\n"));
792 retval
= RETURN_FAIL
;
796 ap
= AllocVec(sizeof(struct AnchorPath
) + MAX_PATH_LEN
, MEMF_CLEAR
);
799 PrintFault(ERROR_NO_FREE_STORE
, argv
[0]);
800 D(bug("[WBInfo] no free store\n"));
801 retval
= RETURN_FAIL
;
805 ap
->ap_Strlen
= MAX_PATH_LEN
;
807 if (0 != MatchFirst(name
, ap
))
809 D(bug("[WBInfo] pass to diskinfo\n"));
811 "WANDERER:Tools/DiskInfo",
812 WBOPENA_ArgLock
, (IPTR
) startup
->sm_ArgList
[1].wa_Lock
,
813 WBOPENA_ArgName
, (IPTR
) startup
->sm_ArgList
[1].wa_Name
,
820 ap
->ap_BreakBits
= SIGBREAKF_CTRL_C
;
822 if (!(ap
->ap_Flags
& APF_DIDDIR
))
824 D(bug("[WBInfo] scan file\n"));
826 sprintf(loadedcomment
,"%s",ap
->ap_Info
.fib_Comment
);
828 /* fill date and time */
829 ds
= &ap
->ap_Info
.fib_Date
;
830 DateStamp((struct DateStamp
*)&dt
);
831 CopyMem(ds
, &dt
.dat_Stamp
, sizeof(struct DateStamp
));
832 dt
.dat_Format
= FORMAT_DOS
;
835 dt
.dat_StrDate
= date
;
836 dt
.dat_StrTime
= time
;
841 sprintf(datetime
, "%s %s", time
, date
);
844 getReadableSize(size
, ap
->ap_Info
.fib_Size
, TRUE
);
846 /* fill protection */
847 protection
= ap
->ap_Info
.fib_Protection
;
849 /* Convert the protection bits to a boolean */
850 flags
[0] = protection
& FIBF_SCRIPT
? 1 : 0; /* s */
851 flags
[1] = protection
& FIBF_PURE
? 1 : 0; /* p */
852 flags
[2] = protection
& FIBF_ARCHIVE
? 1 : 0; /* a */
854 /* The following flags are high-active! */
855 flags
[3] = protection
& FIBF_READ
? 0 : 1; /* r */
856 flags
[4] = protection
& FIBF_WRITE
? 0 : 1; /* w */
857 flags
[5] = protection
& FIBF_EXECUTE
? 0 : 1; /* e */
858 flags
[6] = protection
& FIBF_DELETE
? 0 : 1; /* d */
859 flags
[7] = 0x00; /* h */
863 icon
= GetIconTags(file
,
864 ICONGETA_FailIfUnavailable
, FALSE
,
865 ICONGETA_IsDefaultIcon
, FALSE
,
870 D(bug("[WBInfo] file has icon\n"));
871 type
= (char *) typeNames
[icon
->do_Type
];
872 D(bug("[WBInfo] icon type is: %s\n", type
));
873 sprintf(stack
, "%d", (int)icon
->do_StackSize
);
874 if (icon
->do_DefaultTool
)
875 sprintf(deftool
, "%s", icon
->do_DefaultTool
);
879 PrintFault(ERROR_OBJECT_WRONG_TYPE
, argv
[0]);
881 retval
= RETURN_FAIL
;
885 if (icon
->do_Type
== 2)
887 sizespace
= (Object
*)TextObject
,
889 MUIA_Background
, MUII_TextBack
,
890 MUIA_Text_PreParse
, (IPTR
) "\33r",
891 MUIA_Text_Contents
, (IPTR
) "?",
892 MUIA_InputMode
, MUIV_InputMode_RelVerify
,
895 versionspace
= (Object
*)TextObject
,
897 MUIA_Background
, MUII_TextBack
,
898 MUIA_Text_PreParse
, (IPTR
) "\33r",
899 MUIA_Text_Contents
, (IPTR
) "N/A",
904 sizespace
= (Object
*)TextObject
,
906 MUIA_Background
, MUII_TextBack
,
907 MUIA_Text_PreParse
, (IPTR
) "\33r",
908 MUIA_Text_Contents
, (IPTR
) size
,
911 versionspace
= (Object
*)TextObject
,
913 MUIA_Background
, MUII_TextBack
,
914 MUIA_Text_PreParse
, (IPTR
) "\33r",
915 MUIA_Text_Contents
, (IPTR
) "?",
916 MUIA_InputMode
, MUIV_InputMode_RelVerify
,
920 application
= (Object
*)ApplicationObject
,
921 MUIA_Application_Title
, __(MSG_TITLE
),
922 MUIA_Application_Version
, (IPTR
) "$VER: Info 0.8 ("ADATE
") © 2003-2011 The AROS Dev Team",
923 MUIA_Application_Description
, __(MSG_DESCRIPTION
),
924 MUIA_Application_Base
, (IPTR
) "INFO",
925 MUIA_Application_Menustrip
, (IPTR
) MenustripObject
,
926 MUIA_Family_Child
, (IPTR
) MenuObject
,
927 MUIA_Menu_Title
, __(MSG_PROJECT
),
928 MUIA_Family_Child
, (IPTR
)(infomenu
= (Object
*)MenuitemObject
, MUIA_Menuitem_Title
,
929 __(MSG_INFORMATION
), MUIA_Menuitem_Shortcut
, (IPTR
) "I", End
),
930 MUIA_Family_Child
, (IPTR
)(protectmenu
= (Object
*)MenuitemObject
, MUIA_Menuitem_Title
,
931 __(MSG_PROTECTION
),MUIA_Menuitem_Shortcut
, (IPTR
) "P", End
),
932 MUIA_Family_Child
, (IPTR
)(toolmenu
= (Object
*)MenuitemObject
, MUIA_Menuitem_Title
,
933 __(MSG_TOOLTYPES
),MUIA_Menuitem_Shortcut
, (IPTR
) "T", End
),
934 MUIA_Family_Child
, (IPTR
) MenuitemObject
, MUIA_Menuitem_Title
, ~0, End
,
935 MUIA_Family_Child
, (IPTR
) (aboutmenu
= (Object
*)MenuitemObject
, MUIA_Menuitem_Title
,
936 __(MSG_ABOUT
), (IPTR
) MUIA_Menuitem_Shortcut
, (IPTR
) "?", End
),
937 MUIA_Family_Child
, (IPTR
) MenuitemObject
, MUIA_Menuitem_Title
, ~0, End
,
938 MUIA_Family_Child
, (IPTR
) (quit
= (Object
*)MenuitemObject
, MUIA_Menuitem_Title
,
939 __(MSG_QUIT
), MUIA_Menuitem_Shortcut
, (IPTR
) "Q", End
),
942 SubWindow
, (IPTR
) (window
= (Object
*)WindowObject
,
943 MUIA_Window_Title
, (IPTR
) __(MSG_TITLE
),
944 MUIA_Window_ID
, MAKE_ID('I','N','F','O'),
945 MUIA_Window_Activate
, TRUE
,
946 WindowContents
, (IPTR
) VGroup
,
947 Child
, (IPTR
) HGroup
,
948 Child
, (IPTR
) VGroup
,
949 Child
, (IPTR
) IconImageObject
,
950 MUIA_InputMode
, MUIV_InputMode_Toggle
,
951 MUIA_IconImage_File
, (IPTR
) file
,
954 Child
, (IPTR
) VGroup
,
955 Child
, (IPTR
) TextObject
,
957 MUIA_Background
, MUII_TextBack
,
958 MUIA_Text_PreParse
, (IPTR
) "\33l",
959 MUIA_Text_Contents
, (IPTR
) FilePart(file
),
963 Child
, (IPTR
) (registergroup
= (Object
*)RegisterGroup(pages
),
965 Child
, (IPTR
) HGroup
, /* hgroup information pannel */
966 Child
, (IPTR
) VGroup
,
967 Child
, (IPTR
) HGroup
,
968 Child
, (IPTR
) ColGroup(2),
969 Child
, (IPTR
) Label2(__(MSG_TYPE
)),
970 Child
, (IPTR
) (typespace
= (Object
*)TextObject
,
972 MUIA_Background
, MUII_TextBack
,
973 MUIA_Text_PreParse
, (IPTR
) "\33r",
974 MUIA_Text_Contents
, (IPTR
) type
,
976 Child
, (IPTR
) Label2(__(MSG_DATE
)),
977 Child
, (IPTR
) (datespace
= (Object
*)TextObject
,
979 MUIA_Background
, MUII_TextBack
,
980 MUIA_Text_PreParse
, (IPTR
) "\33r",
981 MUIA_Text_Contents
, (IPTR
) datetime
,
983 Child
, (IPTR
) Label2(__(MSG_VERSION
)),
984 Child
, (IPTR
) (versiongrp
= (Object
*)HGroup
,
985 Child
, (IPTR
) versionspace
,
987 Child
, (IPTR
) Label2(__(MSG_SIZE
)),
988 Child
, (IPTR
) (sizegrp
= (Object
*)HGroup
,
989 Child
, (IPTR
) sizespace
,
993 Child
, (IPTR
) HVSpace
,
994 Child
, (IPTR
) (grouptool
= (Object
*)HGroup
,
996 Child
, (IPTR
) (groupstack
= (Object
*)HGroup
,
998 Child
, (IPTR
) HGroup
,
999 Child
, (IPTR
) Label2(__(MSG_COMMENT
)),
1000 Child
, (IPTR
) (commentspace
= (Object
*)StringObject
,
1006 End
, /* end hgroup information pannel */
1007 Child
, (IPTR
) HGroup
, /* hgroup protections pannel */
1008 Child
, (IPTR
) HVSpace
,
1009 Child
, (IPTR
) VGroup
,
1010 Child
, (IPTR
) HVSpace
,
1011 Child
, (IPTR
) ColGroup(4),
1012 Child
, (IPTR
) Label2(_(MSG_READ
)),
1013 Child
, (IPTR
) (readobject
= MUI_MakeObject(MUIO_Checkmark
,NULL
)),
1014 Child
, (IPTR
) Label2(_(MSG_SCRIPT
)),
1015 Child
, (IPTR
) (scriptobject
= MUI_MakeObject(MUIO_Checkmark
,NULL
)),
1016 Child
, (IPTR
) Label2(_(MSG_WRITE
)),
1017 Child
, (IPTR
) (writeobject
= MUI_MakeObject(MUIO_Checkmark
,NULL
)),
1018 Child
, (IPTR
) Label2(_(MSG_PURE
)),
1019 Child
, (IPTR
) (pureobject
= MUI_MakeObject(MUIO_Checkmark
,NULL
)),
1020 Child
, (IPTR
) Label2(_(MSG_EXECUTE
)),
1021 Child
, (IPTR
) (executeobject
= MUI_MakeObject(MUIO_Checkmark
,NULL
)),
1022 Child
, (IPTR
) Label2(_(MSG_ARCHIVED
)),
1023 Child
, (IPTR
) (archiveobject
= MUI_MakeObject(MUIO_Checkmark
,NULL
)),
1024 Child
, (IPTR
) Label2(_(MSG_DELETE
)),
1025 Child
, (IPTR
) (deleteobject
= MUI_MakeObject(MUIO_Checkmark
,NULL
)),
1026 Child
, (IPTR
) HVSpace
,
1027 Child
, (IPTR
) HVSpace
,
1029 Child
, (IPTR
) HVSpace
,
1031 Child
, (IPTR
) HVSpace
,
1032 End
, /* end hgroup protections pannel */
1033 Child
, (IPTR
) HGroup
, /* hgroup tooltypes pannel */
1034 Child
, (IPTR
) VGroup
,
1035 Child
, (IPTR
) HGroup
,
1036 Child
, (IPTR
) VGroup
,
1039 Child
, (IPTR
) ListviewObject
,
1040 MUIA_Listview_List
, (IPTR
) (list
= ListObject
,
1042 MUIA_List_ConstructHook
, MUIV_List_ConstructHook_String
,
1043 MUIA_List_DestructHook
, MUIV_List_DestructHook_String
,
1044 MUIA_List_AutoVisible
, TRUE
,
1047 Child
, (IPTR
) (liststr
= StringObject
,
1048 MUIA_Disabled
, TRUE
,
1052 Child
, (IPTR
) HGroup
,
1054 Child
, (IPTR
) (editor
= MUI_NewObject(MUIC_TextEditor
,
1056 Child
, (IPTR
) (slider
= (Object
*)ScrollbarObject
,
1063 Child
, (IPTR
) HGroup
,
1064 MUIA_Group_SameSize
, TRUE
,
1065 Child
, (IPTR
) (newkey
= SimpleButton(__(MSG_NEW_KEY
))),
1066 Child
, (IPTR
) (delkey
= SimpleButton(__(MSG_DELETE_KEY
))),
1070 End
, /* end hgroup tooltypes pannel */
1072 Child
, (IPTR
) HGroup
,
1073 MUIA_Group_SameSize
, TRUE
,
1074 Child
, (IPTR
) (savebutton
=
1075 ImageButton(_(MSG_SAVE
),"THEME:Images/Gadgets/OK")),
1076 Child
, (IPTR
) (cancelbutton
=
1077 ImageButton(_(MSG_CANCEL
),"THEME:Images/Gadgets/Cancel")),
1085 if (application
!= NULL
)
1090 set(liststr
, MUIA_String_AttachedList
, (IPTR
)list
);
1094 DoMethod(aboutmenu
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
1095 (IPTR
) application
, 2,
1096 MUIM_Application_ReturnID
, RETURNID_ABOUT
);
1097 DoMethod(infomenu
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
1098 (IPTR
) registergroup
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 0);
1099 DoMethod(protectmenu
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
1100 (IPTR
) registergroup
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 1);
1101 DoMethod(toolmenu
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
1102 (IPTR
) registergroup
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 2);
1103 DoMethod(quit
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
1104 (IPTR
) application
, 2, MUIM_Application_ReturnID
,
1105 MUIV_Application_ReturnID_Quit
);
1107 DoMethod(cancelbutton
, MUIM_Notify
, MUIA_Pressed
, FALSE
,
1108 (IPTR
) application
, 2,
1109 MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
);
1110 DoMethod(savebutton
, MUIM_Notify
, MUIA_Pressed
, FALSE
,
1111 (IPTR
) application
, 2,
1112 MUIM_Application_ReturnID
, RETURNID_SAVE
);
1113 DoMethod(application
, MUIM_Notify
, MUIA_Application_Sleep
, FALSE
,
1114 (IPTR
) application
, 2,
1115 MUIM_Application_ReturnID
, RETURNID_WAKE
);
1116 DoMethod(application
, MUIM_Notify
, MUIA_Application_Sleep
, TRUE
,
1117 (IPTR
) application
, 2,
1118 MUIM_Application_ReturnID
, RETURNID_SLEEP
);
1119 DoMethod(window
, MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
,
1120 (IPTR
) application
, 2, MUIM_Application_ReturnID
,
1121 MUIV_Application_ReturnID_Quit
);
1123 DoMethod(newkey
, MUIM_Notify
, MUIA_Pressed
, FALSE
,
1124 (IPTR
) application
, 2, MUIM_Application_ReturnID
, RETURNID_NEWKEY
);
1125 DoMethod(delkey
, MUIM_Notify
, MUIA_Pressed
, FALSE
,
1126 (IPTR
) application
, 2, MUIM_Application_ReturnID
, RETURNID_DELKEY
);
1127 DoMethod(list
, MUIM_Notify
, MUIA_List_Active
, MUIV_EveryTime
,
1128 (IPTR
) application
, 2, MUIM_Application_ReturnID
, RETURNID_LVACK
);
1129 DoMethod(liststr
, MUIM_Notify
, MUIA_String_Acknowledge
, MUIV_EveryTime
,
1130 (IPTR
) application
, 2, MUIM_Application_ReturnID
, RETURNID_STRINGACK
);
1132 DoMethod(commentspace
, MUIM_Notify
, MUIA_String_Acknowledge
, MUIV_EveryTime
,
1133 (IPTR
) application
, 2, MUIM_Application_ReturnID
, RETURNID_COMMENTACK
);
1134 DoMethod(versionspace
, MUIM_Notify
, MUIA_Pressed
, FALSE
,
1135 (IPTR
) application
, 2,
1136 MUIM_Application_ReturnID
, RETURNID_QUERYVERSION
);
1137 DoMethod(sizespace
, MUIM_Notify
, MUIA_Pressed
, FALSE
,
1138 (IPTR
) application
, 2,
1139 MUIM_Application_ReturnID
, RETURNID_SCANSIZE
);
1140 DoMethod(readobject
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
,
1141 (IPTR
) application
, 2,
1142 MUIM_Application_ReturnID
, RETURNID_PROTECT
);
1143 DoMethod(writeobject
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
,
1144 (IPTR
) application
, 2,
1145 MUIM_Application_ReturnID
, RETURNID_PROTECT
);
1146 DoMethod(executeobject
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
,
1147 (IPTR
) application
, 2,
1148 MUIM_Application_ReturnID
, RETURNID_PROTECT
);
1149 DoMethod(deleteobject
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
,
1150 (IPTR
) application
, 2,
1151 MUIM_Application_ReturnID
, RETURNID_PROTECT
);
1152 DoMethod(scriptobject
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
,
1153 (IPTR
) application
, 2,
1154 MUIM_Application_ReturnID
, RETURNID_PROTECT
);
1155 DoMethod(pureobject
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
,
1156 (IPTR
) application
, 2,
1157 MUIM_Application_ReturnID
, RETURNID_PROTECT
);
1158 DoMethod(archiveobject
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
,
1159 (IPTR
) application
, 2,
1160 MUIM_Application_ReturnID
, RETURNID_PROTECT
);
1163 set(editor
, MUIA_TextEditor_Slider
, slider
);
1165 if (icon
->do_ToolTypes
)
1167 char *tt
= NULL
, *contents
;
1171 while ((tt
= icon
->do_ToolTypes
[i
]) != NULL
)
1173 len
+= strlen(icon
->do_ToolTypes
[i
]) + 1;
1177 contents
= AllocVec(len
+ 1, MEMF_ANY
);
1184 while ((icon
->do_ToolTypes
[i
]) != NULL
)
1188 strcat(contents
, "\n");
1191 strcat(contents
, icon
->do_ToolTypes
[i
]);
1196 set(editor
, MUIA_TextEditor_Contents
, contents
);
1202 if (icon
->do_ToolTypes
)
1206 while ((tt
= icon
->do_ToolTypes
[i
]) != NULL
)
1208 DoMethod(list
, MUIM_List_InsertSingle
, tt
, MUIV_List_Insert_Bottom
);
1214 switch(icon
->do_Type
)
1217 AddToolField(application
, grouptool
, deftool
);
1218 AddStackField(application
, groupstack
, stack
);
1221 AddEmptySpace(grouptool
);
1222 AddStackField(application
, groupstack
, stack
);
1225 AddEmptySpace(grouptool
);
1226 AddEmptySpace(groupstack
);
1230 if (loadedcomment
[0])
1231 nnset(commentspace
, MUIA_String_Contents
, loadedcomment
);
1233 nnset(readobject
, MUIA_Selected
, flags
[3]);
1234 nnset(writeobject
, MUIA_Selected
, flags
[4]);
1235 nnset(executeobject
, MUIA_Selected
, flags
[5]);
1236 nnset(deleteobject
, MUIA_Selected
, flags
[6]);
1238 nnset(scriptobject
, MUIA_Selected
, flags
[0]);
1239 nnset(pureobject
, MUIA_Selected
, flags
[1]);
1240 nnset(archiveobject
, MUIA_Selected
, flags
[2]);
1242 SetAttrs(window
, MUIA_Window_Open
, TRUE
, TAG_DONE
);
1244 while (returnid
!= MUIV_Application_ReturnID_Quit
)
1249 D(bug("[WBInfo] broker command received: %ld\n", returnid
));
1253 case RETURNID_SLEEP
:
1254 set(window
, MUIA_Window_Open
, FALSE
);
1255 set(window
, MUIA_Window_Activate
, TRUE
);
1258 set(window
, MUIA_Window_Open
, TRUE
);
1260 case RETURNID_ABOUT
:
1261 if (MUI_RequestA(application
, NULL
, 0,
1262 _(MSG_ABOUT
), _(MSG_OK
), _(MSG_COPYRIGHT
), NULL
))
1265 case RETURNID_NEWKEY
:
1268 case RETURNID_DELKEY
:
1270 icon_altered
= TRUE
;
1272 case RETURNID_LVACK
:
1275 case RETURNID_STRINGACK
:
1277 icon_altered
= TRUE
;
1284 SaveIcon(icon
, file
, lock
);
1286 /* This is a workardound for String.mui not sending notification on contents change */
1288 get(commentspace
, MUIA_String_Contents
, &text
);
1289 if(strcmp(loadedcomment
, text
) != 0)
1290 file_altered
= TRUE
;
1295 DoMethod(application
, MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
);
1297 case RETURNID_STACKACK
:
1298 set(window
, MUIA_Window_ActiveObject
, (IPTR
)savebutton
);
1299 icon_altered
= TRUE
;
1301 case RETURNID_TOOLACK
:
1302 set(window
, MUIA_Window_ActiveObject
, (IPTR
)savebutton
);
1303 icon_altered
= TRUE
;
1305 case RETURNID_COMMENTACK
:
1306 set(window
, MUIA_Window_ActiveObject
, (IPTR
)savebutton
);
1307 file_altered
= TRUE
;
1309 case RETURNID_QUERYVERSION
:
1311 Object
* oldversionspace
= versionspace
;
1313 D(bug("[WBInfo: RETURNID_QUERYVERSION\n"));
1315 versionspace
= (Object
*)TextObject
,
1317 MUIA_Background
, MUII_TextBack
,
1318 MUIA_Text_SetMin
, FALSE
,
1319 MUIA_Text_PreParse
, (IPTR
) "\33r",
1320 MUIA_Text_Contents
, (IPTR
) GetVersion(name
, lock
),
1323 DoMethod(versiongrp
, MUIM_Group_InitChange
);
1324 DoMethod(versiongrp
, OM_REMMEMBER
, oldversionspace
);
1325 DoMethod(versiongrp
, OM_ADDMEMBER
, versionspace
);
1326 DoMethod(versiongrp
, MUIM_Group_ExitChange
);
1329 case RETURNID_SCANSIZE
:
1331 Object
* oldsizespace
= sizespace
;
1333 D(bug("[WBInfo]: RETURNID_SCANSIZE\n"));
1334 sizespace
= (Object
*)TextObject
,
1336 MUIA_Background
, MUII_TextBack
,
1337 MUIA_Text_PreParse
, (IPTR
) "\33r",
1340 DoMethod(sizegrp
, MUIM_Group_InitChange
);
1341 DoMethod(sizegrp
, OM_REMMEMBER
, oldsizespace
);
1342 DoMethod(sizegrp
, OM_ADDMEMBER
, sizespace
);
1343 DoMethod(sizegrp
, MUIM_Group_ExitChange
);
1345 if (scanStruct
== NULL
)
1346 scanStruct
= AllocMem(sizeof(struct DirScanProcess
), MEMF_CLEAR
);
1348 scanStruct
->scanState
= SCANDIE
;
1351 if (scanStruct
->scanProcess
!= NULL
)
1354 ULONG dirnamelen
= strlen(lname
) + strlen(name
);
1355 scanStruct
->scanState
= SCANRUN
;
1356 scanStruct
->scanDir
= AllocVec(dirnamelen
+ 2, MEMF_CLEAR
); /* 2 == path separator + \0 at end */
1357 D(bug("[WBInfo]: lname '%s', name '%s', (%d bytes)\n", lname
, name
, dirnamelen
));
1359 CopyMem(lname
, scanStruct
->scanDir
, strlen(lname
));
1360 AddPart(scanStruct
->scanDir
, name
, dirnamelen
+ 2);
1362 char * tmp_Name
= AllocVec(strlen(scanStruct
->scanDir
) + 24, MEMF_CLEAR
);
1363 sprintf(tmp_Name
, "Calculating size of %s ..", scanStruct
->scanDir
);
1365 /* Fire up child process to perform scan of content size .. */
1366 scanStruct
->scanProcess
= CreateNewProcTags(
1367 NP_Entry
, (IPTR
)scanDir_Process
,
1369 NP_Synchronous
, FALSE
,
1371 NP_UserData
, (IPTR
)scanStruct
,
1372 NP_StackSize
, 140960,
1378 case RETURNID_PROTECT
:
1379 file_altered
= TRUE
;
1380 D(bug("[WBInfo: Protection bits changed\n"));
1388 signals
= Wait(signals
| SIGBREAKF_CTRL_C
);
1389 if(signals
& SIGBREAKF_CTRL_C
) break;
1392 returnid
= ((LONG
) DoMethod(application
, MUIM_Application_NewInput
, (IPTR
) &signals
));
1396 scanStruct
->scanState
= SCANDIE
;
1398 if (scanStruct
->scanProcess
!= NULL
)
1401 SetAttrs(window
, MUIA_Window_Open
, FALSE
, TAG_DONE
);
1402 MUI_DisposeObject(application
);
1404 PrintFault(ERROR_INVALID_RESIDENT_LIBRARY
, argv
[0]);
1405 D(bug("[WBInfo: Couldn't create app\n"));
1406 retval
= RETURN_FAIL
;
1410 if (scanStruct
) FreeMem(scanStruct
, sizeof(struct DirScanProcess
));
1411 if (icon
) FreeDiskObject(icon
);