IsAstack ( )

Brian Yennie briany at qldlearning.com
Mon Jul 2 15:30:15 CDT 2007


Hugh,

I had one last thought while reading this that might be a clever  
approach. Read a little bit off the front of the currently running  
stack (since you KNOW that's a valid stack) and compare it to the  
file in question. The advantages are that you only have to read a  
tiny bit of the file, and that the script should continue to work  
even if/when Rev formats change. It's not foolproof - there's always  
the chance that another type of file would have the same first bytes,  
but it's probably very unlikely in practice and could always be  
balanced with some sort of fatal error if the file did indeed end up  
being bogus when you actually try to load it.

Reading from a file should be perfectly safe even if it is in use -  
writing is the dangerous one. The only caveat I can think of is that  
the current stack that you are using to compare against must exist on  
disk and not *only* in memory.

function isAStack tFilePath
    ## the file path to the current stack
    put value(word 2 of the long name of this stack) into tStackPath

    ## nibble off the first 8 bytes
    open file tStackPath for binary read
    read from file tStackPath for 8
    put it into myFirst8Bytes
    close file tStackPath

    ## check the first 8 bytes of the file in question
    open file tFilePath for binary read
    read from file tFilePath for 8
    put it into testFirst8Bytes
    close file tFilePath

    ## are they the same?
    return (myFirst8Bytes = testFirst8Bytes)
end isAStack

> Hi Klaus, Brian, David:
>
> Good catches. I don't think I dare use  open/read/close in case the  
> file (and
> it could be any file) is in use, and  testing the suffix is not always
> reliable (I am allowing data stacks to be  suffix-less). Since I've  
> never used a
> shell script, I'm not sure what  differentiates them from a  
> 'normal' stack in
> terms of initial stackfile  characters. I don't think there are any  
> differences,
> so a bit hard to be 100%  foolproof it this case. Finally, since  
> this is for
> ssBk and it is purposefully  always saved in 2.4 format (as several  
> people have
> requested for project  compatibility purposes), I think I shall run  
> with my
> original.
>
> BUT your comments have been most instructive, and I thank you  all.
>
> /H
>
>
>
>
> _______________________________________________
> metacard mailing list
> metacard at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/metacard



More information about the metacard mailing list