Hi folks,
A bit off topic this one, I'm afraid (sorry Tab), but I am no longer able to send
messages to DirectL for some reason.
I got a request from a friend about getting media out of an old projector. She had
lost the original files (etc. etc.). Now, we all know there are tools out there to get
the media out of a protected movie, or a dcr, but projectors are a bit more tricky. On
Windows, I think one is out of luck, but on Mac, there is a workable solution.
Luckily, all projectors going back to D4 (and possibly before) respond to the
'miscellaneous do script' apple event. At one time, this event had proper
'terminology' which meant you could open any applescript editor and fire off something
like this;
tell application "Director 5"
activate
do script "set the stageColor to random(255)"
end tell
'do script' behaves exactly like 'do' in lingo, with all the quirks associated with
that. (Delay for compilation, scope issues etc.)
All well and good, until D7, where the 'do script' terminology disappeared, although
the apple event remains, and is accessible with the 'raw apple event code' <<misc
dosc>>.
Note: I've typed the chevrons with doubled greater-than and less-than signs but you
should use option-H and shift-option-H to get the proper chevron characters. (This is
an endless headache on Applescript mailing lists and newsgroups of course).
So, I've knocked up this little Applescript which will dump all the cast libs from any
projector (using 'save castlib') in the folder of your choice. The casts will be named
"c1.cst", "c2.cst" etc. In my tests, it seems to be working fine, but let me know if
you come up against any unpleasantness.
This script is for educational and emergency use only and is in NO WAY intended to
help folks steal other people's pics and sounds and what not. If you think I'm being
irresponsible in releasing this information, I'll admit that this technique is open to
abuse, but only by losers. If you want to do that kind of stuff, you're not just
foolish, you're also a bit of a loser, I reckon. Script text is (as everyone should
know) not available through these kinds of hacks, so don't even think about it.
Besides, I believe there's much to be learned by opening up other people's movies and
projectors, and seeing how they are put together, and it's also worth being aware of
the technique if you really want your projector to be protected in some extra special
way.
I've used old style 'verbose' lingo syntax so that you can use the script with old
projectors. I've been testing with D6.5 projectors, but it ought to work at least as
far back as D4. (Not sure when 'save castlib' appeared though).
I hope the code doesn't get truncated by email linebreaks too much. The toughest thing
about writing this script was mixing the Lingo and Applescript escape sequences for
quote marks. Nearly went mad!
Once again, don't forget to adjust the chevrons before compiling the script in your
favourite applescript editor.
Enjoy:
on run
set prmpt to "Please locate your projector"
set f to (choose file with prompt prmpt)
set i to (info for f)
-- cursory check to see whether it's an application...
if file type of i is not "APPL" then
my abortWithAlert("Not an application file")
end if
-- choose where to output the castlibs
set out to (choose folder with prompt "Output castlibs to...")
set out to out as string
-- build the hack lingo handler
set hndlr to "on hak\"&return&\" tell the stage\"&return&\""
set hndlr to hndlr & " set n to the number of castlibs\"&return&\" "
set hndlr to hndlr & " repeat with c = 1 to n\"&return&\" save castlib c, "
set hndlr to hndlr & "\""e&\"" & out & "c\""e&\" & c &
\""e&\".cst\""e&\"\""
set hndlr to hndlr & "&return&\" end repeat\"&return&\" end
tell\"&return&\"end"
-- write the handler to a new script cast member
set lingostring to "set the scripttext of member (new(#script)) to \"" & hndlr &
"\""
-- call it...
set lingostring to lingostring & return & "hak()"
-- ok, now we're ready to actually do it...
tell application (f as string)
activate
<<event miscdosc>> "Alert \"Ready to export castlibs to " & outFold & "\""
<<event miscdosc>> lingostring
<<event miscdosc>> "halt" -- optional
end tell
end run
on abortWithAlert(str)
beep
display dialog str buttons {"Rats"} default button 1 giving up after 10
error number -128 -- abort entire script
end abortWithAlert
[To remove yourself from this list, or to change to digest mode, go to
http://www.penworks.com/lingo-l.cgi To post messages to the list, email
[EMAIL PROTECTED] (Problems, email [EMAIL PROTECTED]). Lingo-L is for
learning and helping with programming Lingo. Thanks!]