Richard,

Thanks for sharing this work!  When testing it in OSX I needed to add a line:

 replace "%20" with space in tMountPoint

           before the line

 set the directory to tMountPoint


Scott Morrow

Elementary Software
(Now with 20% less chalk dust!)
web       http://elementarysoftware.com/
email     [email protected]



On Mar 23, 2010, at 6:13 AM, Richard Gaskin wrote:

> Kay C Lan wrote:
> 
>> On Mon, Mar 22, 2010 at 10:05 PM, Richard Gaskin wrote:
>>> In January with the help of Phil, Peter, and others I got some great tips
>>> for identifying removable drives on OS X and Linux.  But I'm having
>>> difficulty figuring out how to do the same in Windows.
>> 
>> Richard,
>> 
>> back then you wrote:
>> 
>> In the meantime, it looks like I have some parsing to do and some homework
>>> to figure out the details of getting this info for Win Vista, Win 7, and
>>> Linux.  I'll post the result here once I get it working.
>> 
>> I'm hoping that offer still applies?
> 
> Absolutely.  This has been a group effort, with valuable input from Ken Ray, 
> Phil Davis, Peter Alcibiades, Matthias Rebbe, and others, so the least I can 
> do is share the fruit of our collective labor.
> 
> Below is a handler that handles Mac and Win, with a placeholder for Linux but 
> I don't need that yet so I'll write it in a few weeks when I get to it.
> 
> It examines the currently-mounted volumes and returns a list of those volumes 
> which are removable, using AppleScript for the Mac side and data from the Win 
> registry for Windows.
> 
> Each line of the return value has three items separated by tabs:
> 
> - Drive label/letter (I use this to display in a list)
> - available space (useful for my installer)
> - mount point or drive letter (needed for writing to the drive)
> 
> I have four different removable drives I've been testing with (card reader, 
> U3, plain USB flash drive, and camera), and the AppleScript method that was 
> suggested here was the only one which easily recognized my card reader along 
> with all the other more "normal" drives; relying on info from system_profiler 
> alone did not provide the mount point, needed to write files to the drive.
> 
> Note that U3 drives show up as two volumes, one writable and one not. The 
> non-writable volume of a U3 drive has zero available space, and that's used 
> to exclude them from the list without having to slow things down by 
> attempting writes to each disk to test that (though also do that on the 
> selected volume later on in a different handler just to make sure before 
> proceeding with the install).
> 
> This is a bit sloppy in some parts since it's a small part of a larger 
> project in which there's a LOT of work do to, but it seems to get the job 
> done well enough for now (you may need to clean up email-imposed line wraps):
> 
> 
> 
> function RemovableDrives
>  -- Returns a tab-delimited list of drives which are removable
>  -- and have a file system usable by the current OS
>  -- in which each line is:
>  -- <Drive name/letter> <tab> <free space> <tab> <mountpoint/drive letter>
>  --
>  put the volumes into tVols
>  put empty into tRemVols
>  put the directory into tSaveDir
>  switch the platform
>  case "MacOS"
>    repeat for each line tVol in tVols
>      put "tell application "&quote&"Finder"&quote&cr&\
>          "properties of disk "&quote& tVol &quote &cr&\
>          "end tell" into tAS
>      do tAS as applescript
>      put the result into tInfo
>      if (", ejectable:true," is in tInfo) \
>          AND (", free space:0, " is not in tInfo) then
>        put offset(", URL:"&quote&"file://", tInfo) into tOS
>        delete char 1 to (tOS+13) of tInfo
>        set the itemdel to "/"
>        delete item 1 of tInfo
>        put "/"&word 1 of tInfo into tMountPoint
>        delete char -3 to -1 of tMountPoint
>        set the directory to tMountPoint
>        if the result is not empty then next repeat
>        put the diskspace into tSpace
>        put tVol &tab& tSpace &tab&  tMountPoint &cr after tRemVols
>      end if
>    end repeat
>    break
>  case "Win32"
>    set cursor to watch
>    put the hideConsoleWindows into tSaveHCW
>    set the hideConsoleWindows to true
>    -- Hex for "\??\STORAGE#RemovableMedia#":
>    put 
> "5C003F003F005C00530054004F0052004100470045002300520065006D006F00760061006200"&\
>        "6C0065004D00650064006900610023" into tRemovableIdentifier
>    repeat for each line tVol in tVols
>      if tVol is in "A:B:C:" then next repeat -- two floppies and the main HD
>      put "reg query HKLM\SYSTEM\MountedDevices /v \DosDevices\"& tVol into 
> tCmd
>      put shell(tCmd) into tmp
>      if tRemovableIdentifier is in line -2 of tmp then
>        set the directory to tVol
>        if the result is empty then
>          put "Removable Disk ("&tVol&")" &tab& the diskspace & tab& tVol &cr 
> after tRemVols
>        end if
>      end if
>    end repeat
>    set the directory to tSaveDir
>    set the hideConsoleWindows to tSaveHCW
>    break
>  case "Linux"
>    -- add here -- http://linux.die.net/man/8/blkid -- thanks Peter!
> 
>    break
>  end switch
>  --
>  delete last char of tRemVols -- trailing CR
>  return tRemVols
> end RemovableDrives
> 
> 
> If you find any bugs with this please let me know.  I'll be putting it into 
> testing with my own users soon, but it would of course be good to iron out as 
> many issues as possible in advance.  Thanks -
> 
> --
> Richard Gaskin
> Fourth World
> Rev training and consulting: http://www.fourthworld.com
> Webzine for Rev developers: http://www.revjournal.com
> revJournal blog: http://revjournal.com/blog.irv
> _______________________________________________
> use-revolution mailing list
> [email protected]
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to