Directory information (file version information on MacOS)

Jan Decroos jan.decroos at groepvanroey.be
Mon Mar 3 08:28:02 EST 2003


This covers only the request for file version information :

You can set or get a file's version (MacOS) by next DoVersion function
- To *get* the version, let pVersion empty (give an empty string (mouseUp
handler) when asking for the version string).
- there is a bug in the engine when *creating* a new vers resource (file has no
res.fork) : this will be solved in the 2.0 version.  (the file looses it's type
and creator)
- Doversion is a function, also for setting the version of a file (returns
empty)

on mouseUp
  answer file "Give file:"
  if it is empty then exit to top
  put it into lFile
  -- 'version' :
  --    set : sets both long and short versions
  --    get : gets the long version
  answer "'Long version', 'short version' or 'version' ?" with "Long version"
or "short version" or "version"
  put it into lOption
  ask "Give version (leave blank to get version):"
  put it into lVersion
  answer Doversion(lOption, lFile, lVersion)
end mouseUp

function DoVersion pOption, pFile, pVersion
  if the platform <> "MacOS" then 
    answer  "Error DoVersion : can only get/set versions on MacOS !!"
    exit to top
  end if
  if pOption is not among the items of "version,short version,long version" then
    answer  "Error DoVersion : 1st argument must be 'version','short version'
or 'long version' !!"
    exit to top
  end if
  if the number of lines of pFile <> 1 or pFile is empty then
    answer  "Error DoVersion : 2nd argument must be  one line and <> empty !!"
    exit to top
  end if
  if there is not a file pFile then
    answer  "Error DoVersion : File not found !!"
    exit to top
  end if
  put pVersion is not empty into lSetting  -- lSetting (setting the version) is
true when pVersion is not empty
  put empty into lResult
  if pOption = "short version" then
    put false into lisLVers
    put true into lisSVers
  else if pOption = "long version" then
    put true into lisLVers
    put false into lisSVers
  else
    put true into lisLVers
    put lSetting into lisSVers
  end if
  if there is a file pFile then
    put getResource(pFile, "vers", 1) into lVersResource
    if lSetting then
      put "" into lSVers
      put "" into lLVers
      if lVersResource = "" then
        -- 1 : relase, 0 (2nd and 3rd part of release), 32 : development, 0 :
non-release, 0 & 0 : Country Code (US : 0 & 0, France : 0 & 1, ...)
        repeat for each item litem in "1,0,32,0,0,0"
          put numtochar(litem) after lVersResource
        end repeat
      else
        put chartonum(char 7 of lVersResource) into lSVersLength
        put (char 8 to (8+lSVersLength-1) of lVersResource) into lSVers
        put (char (8+lSVersLength+1) to -1 of lVersResource) into lLVers
      end if
      if lisSVers then put line 1 of pVersion into lSVers
      if lisLVers then put line 1 of pVersion into lLVers
      put (char 1 to 6 of
lVersResource)&(numtochar(length(lSVers)))&lSVers&(numtochar(length(lLVers)))&lLVers
into lVersResource
      -- setResource(<path>, <type>, <id>, <name>, <flags>, <data>)
      get setResource(pFile,"vers",1,"version","",lVersResource)
    else
      if lVersResource <> "" then
        put chartonum(char 7 of lVersResource) into lSVersLength
        if lisSVers then
          put (char 8 to (8+lSVersLength-1) of lVersResource) into lResult
        else
          put (char (8+lSVersLength+1) to -1 of lVersResource) into lResult
        end if
      end if
    end if
  end if
  return (lResult)
end DoVersion




More information about the use-livecode mailing list