SmartCopy v1.4 İ 1995 Rask I. Lambertsen User's Manual Disclaimer. ŻŻŻŻŻŻŻŻŻŻŻ This program is provided "as is" without warranty of any kind, either expressed or implied, including, but no limited to, the implied warranty of fitness for a particular purpose. The entire risk as to the results, reliability and performance of this program is assumed by you. Distribution. ŻŻŻŻŻŻŻŻŻŻŻŻŻ This program is freely distributable. Distribution is allowed if the following conditions are met: 1. Program and documentation must not be changed in any way, except for archiving with an archiver, for which the corresponding unarchiver will work on any CPU type used in Amigas at the time of distribution. 2. Program, documentation and the icons for the program and the documentation must be distributed together. 3. The file names of the program, documentation and icons must not be changed (this especially applies to Fred Fish, who has had the habit of changing file names to upper case). However; you ARE allowed to change the default tool of the documentation icon. You are also allowed to shapshot the icons if you really need to. 4. Only a nominal and small fee for copying is charged, unless some sort of media is supplied with SmartCopy, in which case it is allowed to add the cost of that media to the charge. 5. SmartCopy or parts of it must not be sold in combination with or as part of commercial software without my written permission. Introduction. ŻŻŻŻŻŻŻŻŻŻŻŻŻ SmartCopy was written to easily transfer files from a hard disk to multiple disks. It automatically finds out when the disk is full and prompts for another one. This is useful for copying a bunch of pictures, samples, modules or whatever to disks, like a picture, sample or module collection. SmartCopy uses a GUI to be as user-friendly as possible (meaning that you don't need to mess around with shells/CLIs or directory utilities). One of my major goals was to make a very fast yet reliable copy routine (like the one in C:Copy). This became a major goal especially after I found out that the copy routine in SID2 is not just slow, but also UNRELIABLE when copying files from CrossDOS disks with text filtering enabled. When I released version 1.2, I didn't know of any similar programs other than CO.COM for IBM PC's and compatibles. It didn't have a GUI, but, of course, any decent Amiga program has a GUI. As of this writing, I know of the programs ECopy, Dred, Reducer and Stow, which (more or less) do the same as SmartCopy. However, THEY DON'T HAVE A GUI, so if you don't want to have to remember the format of their command line options, well, then you know which program to use. System requirements. ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ Any Amiga with - at least Amiga OS 2.0 or later. - 224 bytes of CHIP memory + 38200 bytes of any type of memory (measured with C:Avail on my system, may differ on yours). Although OS 2.0 is supported, the gadgets only show their keyboard short-cuts on OS 2.04 or later. The keyboard short-cuts still work on OS 2.0, though. Amiga OS 2.04 or later is recommended because OS 2.0 contains an unusually high number of bugs, particularily in the DOS, which SmartCopy uses a lot. Amiga OS 2.1 or later is recommended because of the MUCH faster file requester. SmartCopy has been successfully tested on my Amiga 500 with 1 Mb of CHIP memory, 2 Mb of FAST memory, OS 2.1 and a MultiEvolution harddisk controller with a 52 Mb Quantum LPS harddisk. SmartCopy has been successfully tested with MungWall and CodeWatcher. Installation. ŻŻŻŻŻŻŻŻŻŻŻŻŻ As simple as it can be: Copy the files SmartCopy SmartCopy.info SmartCopy.doc SmartCopy.doc.info SmartCopy.guide SmartCopy.guide.info to the directory in which you want to install SmartCopy. From Workbench, just select the the three icons and drag them to the drawer in which you want to install SmartCopy. Usage. ŻŻŻŻŻŻ SmartCopy can be started from either Workbench (see the "Tool Types" section) or Shell/CLI (see the section "CLI arguments"). You will then see the main window. It contains the following gadgets: "Add files..." Brings up a file requester so you can add files to the file list (see below). You can multi-select files using extented selection. There is also a pattern gadget, so you can use pattern matching. If you leave the file gadget empty, then all files that match the pattern will be added to the file list. All files added to the list will be selected automatically. Keyboard short-cut: "a" or "A". "Sort files" Will sort the files so that the biggest files are at the top of the list. This will help SmartCopy fill the disks better. Keyboard short-cut: "s" or "S". "Copy files" Copies the files in the file list (see below) to the destination device (see below). Optionally, a directory on the destination device(s) can be specified (see below). The comment, attributes and date of the files are copied. SmartCopy will copy all the files that will fit on the destination device(s) and will ask for more disks if all the files didn't fit. The requester will automatically be acknowledged if you change a disk. As files are copied, the list is scrolled so that the file being copied is in the middle (when possible). The file which is being copied will have a '>' to the left of it's name. The destination device in use will also have a '>' to the left of its name, so you can see when it is safe to change disks. The logo in the lower right corner of the window will fill up as the disk gets full. It is an estimate of how much space has been used on the disk when the file has been copied. Keyboard short-cut: "c" or "C". "Move files" Same as "Copy files", except that after the files have been copied, they will be deleted from the source directory and removed from the file list. If the delete fails, the files will just be deselected. Also, the file which is being moved will have a 'ğ' to the left of it's name instead of a '>'. Similarily, the destination device in use will have a 'ğ' to the left of its name. Keyboard short-cut: "m" or "M". "Remove files" The selected files will be removed from the file list. Keyboard short-cut: "r" or "R". "Clear list..." Puts up a requester asking you to confirm that you really want to clear the file list (see below). If you do, click the "Yes" button and watch the file list be cleared, else click the "No" button, and the operation will be aborted. Keyboard short-cut: "t" or "T". "De"select all Will deselect all files in the file list. Keyboard short-cut: "d" or "D". "select all" Will select all files in the file list. Keyboard short-cut: "l" or "L". "Delete files..." The selected files will be deleted and removed from the file list. Files that can't be deleted will still be in the file list. You will be asked for confirmation before any files are deleted. Keyboard short-cut: "e" or "E". "Find devices" Scans the system device list for file system devices. You can use this button if you mount a device after SmartCopy was started. This is also handy if SmartCopy couldn't access the device list on startup. Warning: Your currently selected device(s) will NOT be reselected. Another warning: This seems to use a lot of CPU time. Keyboard short-cut: "v" or "V". "List of files to be copied" This is where you can see which files has not yet been copied. The scroll bar and scroll arrows on the right side can be used to scroll the list when SmartCopy is not copying/moving the files. You can click the file names to select or deselect them. Selected files have a '·' to the left of them. "Destination device" This is a list of available disk devices. You can choose one by clicking on its name and clicking on a selected device name will deselect it. Selected devices have a '·' to the left of them. SmartCopy will copy/move the files to the selected devices. You select multiple devices if you want to. The scroll bar and scroll arrows on the right side can be used to scroll the list when SmartCopy is not busy copying/moving files. "Destination dir" This is where you can enter the name of a directory on the destination device to copy the file to. There is a limit of 256 characters for the directory specification. The directory must exist, it will NOT be created. This gadget has on-line help (try pressing the HELP key when it is activated). NOTE: Changing the destination directory takes effect on the next file that is copied or moved, even if SmartCopy is currently busy copying or moving files. Keyboard short-cut: "i" or "I". "Disk space check" Select the way of calculating whether a file fits on the disk or not. "Smart (FFS)" is for AmigaDOS FFS disks. This is a bit inaccurate for disk formatted with directory caching, though. "Smart (OFS)" is the same as "Smart (FFS)", except for OFS disks. "Smart (PFS)" is for the ProfessionalFileSystem. "Generic" is for other types of disks. Use this for CrossDOS/MessyDOS/MS-DOS disks. "None" turns off disk space check. Useful if you want to copy something to the RAM disk. There are some standard window gadgets too. Clicking the close gadget will quit SmartCopy, and the zoom gadget allows you to reduce the size of the window, so that it is just big enough for the standard gadgets and the window title. Finally, there is the depth arrangement gadget which moves the window to the front if it obscured, and moves it to the back if it is in the front. Tool Types. ŻŻŻŻŻŻŻŻŻŻ The following Tool Types can be set in SmartCopy's icon: PUBSCREEN= This will make SmartCopy try to open the main window on the public screen nameed . In addition, requesters related to SmartCopy will also be opened here, including most DOS requesters. If not specified, SmartCopy will open on the default public screen. Example: PUBSCREEN=CygnusEdScreen1 This will make SmartCopy open the main window on the CygnusEd screen. In addition, these standard Tool Types are supported by the Workbench: TOOLPRI= (-128 to 127) This will start SmartCopy with the priority of . The highest priority tasks are given CPU time first. Tasks on equal priority share the CPU time they are given. If not specified, SmartCopy will be started with priority 0. This should be acceptable in most cases. Example: TOOLPRI=1 This will cause SmartCopy to be started with priority 1, thus giving SmartCopy CPU time before most other programs, witch are started at priority 0. DONOTWAIT This is for use if SmartCopy is put in the WBStartup drawer. If Workbench finds this Tool Type, it will not wait for SmartCopy to finish. So if you place SmartCopy in the WBStartup drawer, you should specify this Tool Type, as SmartCopy does not automatically exit. STARTPRI= (-128 to 127) This is for use if SmartCopy is put in the WBStartup drawer. This Tool Type decides in which order programs in the WBStartup drawer are started. The program with the highest priority is started first. If not specified, priority 0 is assumed, which should be fine. WAIT= This is for use if SmartCopy is put in the WBStartup drawer. It specifies how long Workbench should wait before starting the next program in the WBStartup drawer. Mostly, this tooltype is only really useful to avoid disk trashing when several program access a disk at the same time. CLI arguments. ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ Only one keyword can be specified: PUBSCREEN/K: This works just like the Tool Type of the same name. Example: 6. HD1:> SmartCopy PUBSCREEN CygnusEdScreen1 This will cause SmartCopy to open on the CygnusEd screen. Acknowledgements. ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ I wish to thank - Matthew Dillon for the DICE C compiler. - Piotr Obminski for SKEW (SKEleton Writer). - Commodore-Amiga for MungWall. - Michael Plitkins for CodeWatcher. - Joe Yurick for ideas and suggestions. - Jussi Lind for ideas, suggestions and a bug report. - Holger Kruse for the right code to calculate the number of blocks a file will occupy (FFS/OFS). - Michiel Pelt for helping me support his excellent PFS. - Paul van der Heu for converting the docs to AmigaGuide format. Know bugs/quirks/problems. ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ SmartCopy will happily let you put the same file in the file list multiple times which it shouldn't, since the file may be deleted if the file is moved. I may not fix this, since it is generally not a problem. And fixing it could slow things down too much. I might add an option so that the user can choose to have it fixed or not. Multiple destinations may not work optimally yet. The problem is that I don't have more than one drive with removable media, so I have a hard time testing this part of SmartCopy. SmartCopy has some problems with hard links. They always end up at the buttom of the file list after sorting. I hope to fix it soon. When the new automatic directory scanning feature is used, a lock is left on the scanned directory. I have no idea why, all locks are unlocked, but something keeps a lock anyway. If I (ever) figure out what the problem is, I'll fix it. There seems to be a bug in the OFS/FFS file systems. Sometimes you may get a "Volume fubar is full" requester, but if you take the disk out of the drive and the insert it again (the same disk), then the file system suddenly finds that there is enough room on the disk. This has happened to me using the OS 2.1 FFS, and according to the documentation for Reducer (by Christian Stieber), this file system bug exists upto and including OS 3.1. I can't do anything to work around this problem, if it happens to you, just eject the disk and insert it again and see if it works. If it doesn't, you should contact me (see "The author" for details). If SPEAK: is mounted, SmartCopy will lose 128 bytes of memory (two blocks of 64 bytes) on startup and every time you click the "Find devices" button. This seems to be a problem with the L:Speak-Handler (at least on my Workbench 2.1 system). 5. HD1:> Version L:Speak-Handler FULL speak-handler 37.4 (21.2.91) Doing a 5. HD1:> List SPEAK: will lose you 256 bytes (4 blocks of 64 bytes). Doing a 5. HD1:> Dir SPEAK: will lose you 128 bytes (2 blocks of 64 bytes). The big problem is that this causes memory fragmentation. This problem can worked around by not having SPEAK: mounted. Although this is not a bug in SmartCopy, I mention this because it is likely that people will have SPEAK: mounted as part of their system startup, like having the "SPEAK" icon in DEVS:DOSDrivers for Workbench 2.1 and above. (The above results were obtain with CodeWatcher (see acknowledgements) and verified with C:Avail.) Things I would like to add. ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ Besides making SmartCopy as fast and small as possible, here is a few things that I would like to add (highest priority first): - a way to abort copying files. - a better sorting algoritm. The current one has a worst case complexity of O(n²), which is not good. This means that if you double the number of files in the list, it takes four times as long to sort it. This could be improved to O(n·log(n)). NOTE: I made a test in which I sorted a list of 2132 files (no special order). That took 13.0 seconds. Then I resorted that list. Then it took only 1.1 second. If I had used a better sorting algorithm, it would have taken only little longer that 1.1 second to sort the unsorted list. So this is important. - a smarter move function. If a file is being moved to the same device as it came from, SmartCopy should use the Rename() call instead of copying the file and deleting it afterwards. - support for the BFFS (Berkeley Fast File System). - provide more progress information and/or estimate the number of volumes required. - disable gadgets when they are not functional. The author. ŻŻŻŻŻŻŻŻŻŻŻ I can be contacted via - Regular mail: Rask I. Lambertsen Pinievej 20 Strĝby Egede DK-4600 Kĝge Denmark (To type 'ĝ' on non-Danish keyboards, press Alt and 'o' at the same time. If it doesn't work, just use 'oe' instead.) - Phone: (+45) 56267951 ^ ************************************************ * * * THE PHONE NUMBER IN THE 1.3 DOCS WAS WRONG. * * * ************************************************ - E-mail: Rask I. Lambertsen (preferred) or Rask I. Lambertsen (expires around June) Bug reports, suggestions, ideas, etc are EXTREMELY welcome. Fast algoritms for sorting a list (not an array) are also welcome. I would like to know which sort of configurations SmartCopy is used on and how it performs on those configurations. I would like to know if this program is useful to somebody. If you think I deserve it, I will accept donations, but you are NOT required to send me donations, and you should NOT feel guilty if you don't. This IS FreeWare. History. ŻŻŻŻŻŻŻŻ 1.0 (Sometime at the end of 1992) Simple GUI file copier with simple disk space check. Not released to the public. Size: 5552 bytes. 1.1 (11-Aug-93) Improved disk space check with options for specialized calculation of disk space on FFS and OFS. Generic is the old space check. Also, disk space check can now be turned off. Rearranged GUI to get more space. Increased window size. File comments and attributes (protection bits) are preserved when the files are copied. Changed the gadget labels to be User Interface Style Guide compliant. Added (permanently disabled) "Sort" gadget. Added the little logo in the lower right corner. Added the option to copy to a directory on the destination. SmartCopy will now close and reopen it's window when it thinks the user has changes screen resolution. This is to help IPrefs close and reopen the Workbench screen. Fixed a lot of bugs, including these major ones: The device list is now locked and stepped through using OS functions, making it safe. No longer enters an endless loop when copying empty files. No longer enters an endless loop when there is less than one (1) byte of free memory. Not released to the public. Size increased from 5kb to 13b :-( Size: 13795 bytes. 1.2 (27-Nov-94) Fixed disk space check for FFS/OFS disk (the improvements in v1.1 were barely noticeable because I made a stupid mistake). This time it REALLY should work. FFS and OFS space check is now the same, the old code was almost identical for the two cases anyway. FFS/OFS disk space check should also work with block sizes other that 512 bytes now. Fixed the file copy routine so that it can copy from CrossDOS devices with text filtering enabled. File dates are copied too now. No longer requires utility.library version 37, version 36 will do (a stupid error of mine). Removed the useless (and permanently disabled) "Sort" button. No longer forces the ASL file requester to use any particular text for the title and the "OK" button. This looks A LOT better when the system is localized to another language than English. The code to close and reopen SmartCopy's window has been removed as it didn't work as intended. Instead of reacting to changes to the screen, it reacted to changes in printer settings. Unfortunately, when the window reopened, SmartCopy crashed. Even starting a certain word processor would make SmartCopy react and crash! :-( Reduced size from 13 kb to 10 kb :-) Size: 10624 bytes. 1.3 (26 Jan 95) No bugs were fixed because none were found :-) Sort-by-size function added (yes, finally it's there). Files can be marked to process only those files. Multiple destination devices can be selected. You can now either move or copy the files. Delete-files function added. Rearranged GUI to get room for the new gadgets. The device list will probably show more devices than before (like RAM:, for example). Better way of checking if a file fits on an FFS/OFS device. Back to seperate FFS and OFS space check calculation. Sizes of each version added to the program history. Size: 12672 bytes. 1.4 (31 Mar 95) Bug fix: No longer unlocks the public screen twice. Bug fix: No longer closes the window if it couldn't be opened. (Why don't people tell me these things???????) Added support for ProfessionalFileSystem. Changed Generic disk space check so that it works better with disks formatted with CrossDOS. If, in the file requester, a directory is selected, but no files are selected, all files that match the pattern are added to the file list automatically. Much faster sorting, even faster resorting. Less memory fragmentation, generally improved speed. The logo (hopefully) doesn't flicker as much any more. Some other cosmetic changes. Size: 13008 bytes. Here is a graph of the sizes as a function of the version. kb ^ | 14 + | * * 12 + * * * | * * * 10 + * * * * | * * * * 8 + * * * * | * * * * 6 + * * * * | * * * * * 4 + * * * * * | * * * * * 2 + * * * * * | * * * * * +--+----+----+----+----+---> 1.0 1.1 1.2 1.3 1.4 version Yes, unfortunately, SmartCopy is getting bigger.