ShockFiler Xtra User Guide

[doc last updated on December 14, 2005]

Table of Contents

Sales

Technical support

Credits

What ShockFiler Xtra does

Methods at a glance

Getting started

JavaScript

Methods doc

ShockFiler relative path syntax

Firewall/proxy

Error table

Shockwave

Limitations

Version history

Standard legal disclaimer

Sales

All licensing, pricing information and technical inquiries regarding ShockFiler Xtra should be directed to updateStage, inc. which can be reached in the following ways:

e-mail: sales@updatestage.com

phone: (781) 641-6043

website: www.updatestage.com

You can download a demonstration version of ShockFiler Xtra at:

http://www.updatestage.com/xtras/xtradownloads.html

Technical support

Please direct any support questions or bug reports to:

support@updatestage.com

Credits

ShockFiler Xtra is copyright © 2003, updateStage, inc.

ShockFiler Xtra was programmed by Daniel Devolder and Ravi Singh.

This user guide was written by Gretchen Macdowall.

What ShockFiler Xtra does

ShockFiler Xtra exports text, image, sound members and vList Xtra members to external files saved on an FTP server or to the local hard drive. ShockFiler also sends and receives external files via FTP. With ShockFiler Xtra you can easily:

ShockFiler Xtra is Shockwave-safe and downloadable, which means that it auto-installs to systems where it is not yet resident. ShockFiler Xtra was designed specifically for use in Shockwave movies but also works in Director projectors.

Methods at a glance

Method and arguments

Purpose

sf_Register (serialno)

Prevents the demo dialog from coming up after purchase.

version = sf_Version ( ) Returns the version number of the Xtra.
sf_Send (host, directory,username, password,memberName or vListData, castlibName, remoteFileName, fileType, fileProperties, appendFlag, progressDialogFlag, progressDialogTitle ) Exports a text member, sound member,image member, or vList member to a standalone file on an FTP server.

sf_Send ("TODISK", localDirectoryPath,"", "",memberName or vListData, castlibName, fileName, fileType, fileProperties, appendFlag, saveDialogFlag, dialogText )

Exports a text member, sound member,image member, or vList member to a standalone file on the local hard drive.

sf_SendFile (host, directory,username, password,localFilePath,remoteFileName,appendFlag, progressDialogFlag,progressDialogTitle)

Sends a file to an FTP server.

filePath = sf_OpenFileDialog ( ) Returns the path to the selected local file. For use with sf_SendFile
sf_GetFile (host, directory,username, password,localFilePath,remoteFileName, progressDialogFlag,progressDialogTitle) Retrieves a file from an FTP server
filePath = sf_SaveFileDialog(defaultFileName) Returns the path to the file to save. For use with sf_GetFile

sf_TransferStatus ( )

Returns the status of the current file transfer.

sf_RequestFileList (host, directory,username, password)

Requests a file listing from the remote FTP server.

sf_FileListToLingoList ( listType ) Converts a file listing retrieved by sf_RequestFileList into a Lingo list..
sf_CreateDirectory ( host, directory, username, password, directoryNameToCreate) Creates a directory on the remote FTP server.

sf_Disconnect ( )

Breaks the connection with the remote FTP server.

Firewall / proxy methods
sf_PassiveMode ( onOrOffFlag ) Determines whether the next file transfer or list request will be done using active or passive mode.
sf_PortNumber ( portNumber ) Determines what port number the next file transfer or list request will use.

Getting started

Filename Platform

Authoring, Projector

ShockFiler.x32

32-bit Windows

ShockFiler Mac OSX

ShockFiler

Mac PowerPC

MX2004 Windows (not available with demo version)
ShockFiler.data Mac Xtra files for Mac projector made on Windows. See the tech note for more information on creating cross-platform projectors under Director MX 2004.These special files are not required for Win projectors made on Mac.
ShockFiler.rsrc
Shockwave (not available with demo version)

shockfilerpack.w32

32-bit Window

shockfilerpack.carb

Mac OSX

shockfilerpack.ppc

Mac PowerPC

In authoring, place ShockFiler Xtra in Director's Xtras folder. For delivery with Shockwave, see the Shockwave section for information on creating Shockwave movies that install ShockFiler Xtra automatically on the user's machine.

For delivery with your projector, place ShockFiler Xtra in the Xtras folder next to your projector. If the projector will be exporting sound members, you must also include the following Xtras in the projector's Xtras folder:

Macromix
Mix Services
Sound Import Export

MX Classic projectors

There is a tech note here on including xtras in Classic projectors.

Registration

The blue section describes how to register ShockFiler Xtra. The registered version does not display a demo dialog, and includes downloadable Shockwave package files. Ignore the blue section if you are working with a demo version of ShockFiler Xtra. In addition to displaying an unregistered dialog, the demo version of ShockFiler has the following limitations:

If you have purchased the ShockFiler Xtra you received a registration number and the registered version of ShockFiler Xtra. Put the registered version of the Xtra in your Xtras folder. Make the following registration call in the first movie that uses ShockFiler commands. Make sure you do it before using any other ShockFiler commands. The code can be in any type of script. The startMovie handler is the most convenient place to put it because it will execute before any other code that might try to use ShockFiler functions.

on startMovie
   success = sf_Register("DUF98989")
-- your registration number is the string inside the parentheses
if success <> 1 then alert "Registration of ShockFiler Xtra failed"
end

JavaScript

Director 10 (MX 2004) added JavaScript as an alternative scripting language. The syntax in the methods doc for ShockFiler Xtra works for both Lingo and JavaScript. For more info, see the tech note on JavaScript and Xtras.

Methods doc

sf_Register(serialno)

serialno: string, registration code assigned at purchase

Returns: 1 for successful registration, 0 if registration did not work

The demo version of ShockFiler Xtra will display a trial-version alert the first time you use a method other than sf_Register. If you have purchased the ShockFiler Xtra you received a registration number. Call the register method like so:

err = sf_Register("48dkd2929")
-- your registration number is the string inside the parentheses

If you have problems registering the ShockFiler Xtra, please check the following:

Example:

success = sf_Register("48dkd2929")
if success <> 1 then alert "Registration did not work"

version = sf_Version

Returns: String containing version number of the xtra.

Example:

currentVersion = sf_Version()
put currentVersion
-- "1.0.7"

sf_Send (host, directory,username, password,memberName or vListData, castlibName, remoteFileName, fileType, fileProperties, appendFlag, progressDialogFlag, progressDialogTitle)

host: string, address of FTP host
directory: string, relative path from login directory to target directory
username:
string, either login username or "" for anonymous
password:
string, either login password or "" for anonymous, in which case what gets sent is "shockfiler@nodomain.com"
memberName or vListData: string, name of member to export or propertyList exported from vList Xtra
castlibName: string, name of castlib containing member to be exported, can be "" which defaults to internal (lib 1). If a vList propertyList is being passed in the memberName param, then this param should be passed as "".
remoteFileName: string, file name to save exported member to in remote FTP directory
fileType: Lingo symbol, currently supports #text, #jpeg, #wave,#aiff, #bina
fileProperties: Lingo list, contains additional specifications for the file to be written. Pass [] for a file type with no properties.
appendFlag: boolean, 1 to append to existing file, 0 to overwrite existing file. Ignored for all file types except text.
progressDialogFlag: boolean, 1 to display progress bar as file transfers or 0 not to
progressDialogTitle: string, caption for progress dialog title bar

Returns: 1 if the transfer can start, or a negative error code if there was a problem

Exports a text member, sound member, image member or vList data to a designated file on an FTP server. sf_Send logs in the the server, transmits the file exported from the specified member, and logs out.

The sf_Send command handles connecting sending and disconnecting automatically. If you are not interested in monitoring the status of the transmit, sf_Send is the only command needed to send a file (other than sf_Register for registered users). Transmission of the file operates concurrently with other Director operations. The movie will continue running and other Lingo will execute after sf_Send, while the file is being sent.

An internet connection must be open before you can call sf_Send successfully. If no connection is open you will get an error. ShockFiler maintains one active connection at a time. If you are sending a file or getting a listing and you attempt a second sf_Send or sf_RequestFileList before the operation in progress finishes, you will get a "connection is in use" error.

Server parameters

The host, directory, username, and password parameters are used to log in to the FTP site where the file will be uploaded. They are the same type of information you usually type in to an FTP client to transmit files.You may need to use additional configuration commands before calling this method if you are connecting through a firewall or proxy server.

host

The host parameter holds the name or IP address of the FTP server, for example "ftp.macromedia.com" or "192.192.192.8". ShockFiler automatically logs in to the standard FTP port, which is 21.

directory

The directory parameter holds the path to the target directory relative to the login directory. If the login directory IS the target directory, specify "" for the directory parameter. Specify path separators as "/". Do not use a path separator at the beginning or end of the path. Directory names are case-sensitive.

For instance, the string "Exchange/mac" specifies the directory "mac" contained in directory "Exchange" which is a subdirectory of the login directory. If the login directory was:

/users/safeway

then a directory parameter of "Exchange/mac" would produce a target directory of:

/users/safeway/Exchange/mac

username

The username parameter specifies the login name of a user allowed to log in to the FTP server. Some servers allow anonymous login. For anonymous login you can specify either "anonymous" or simply "" for the user name.

However, few servers allow users logged in as "anonymous" to upload files. You will probably need the system administrator to give you a username and password for the FTP server to be able to upload files.

password

The password parameter specifies the password owned by the user allowed to log in to the FTP server. Some servers allow anonymous login.When a username of anonymous is entered, the server expects to see an e-mail address for the password. If you have entered "anonymous" for the username you can specify either your e-mail address or "" for the password. If you use "", ShockFiler sends "shockfiler@nodomain.com" for the e-mail address.

Member types supported

sf_Send works with the following internal member types:

Linked cast members are not supported. Compressed members are not supported.

Text, field, richtext members

For field, text, and richtext, the text property of the member is exported. That means that no style information will be exported for richtext, just plain text. However, you can copy any of the following properties of those types of members into a second field member and export the information as a text file through the xtra:

html of member
rtf of member
scriptText of member

The text files exported are plain text files with the type of line ending specified in the fileProperties parameter.

#mac - CR (CarriageReturn)

#win - CR, LF (LineFeed)

#unix - LF

Bitmap and picture members

Bitmap and picture members are saved as JPEG files with a 72 dpi resolution and the same pixel dimensions as the original cast member. The quality of the JPEG can be set in the fileProperties parameter.

You can export other graphic member types that have a picture property, by setting the picture property of an existing #bitmap member to the picture property of the other graphic member.

member("bitmap member").picture = member("not directly supported graphic type").picture

Sound members

Sound members are saved as either WAVE or AIFF files depending on which is specified as the fileType parameter. Sound files are saved with the number of channels, sample rate and sample depth properties of the original sound member. WAVE export only supports standard Win sampling rates (11025, 22050, 44100). Trying to export a member with a different Mac sampling rate, for instance 11027, will return a -4 "member type does not match export file type" error.

ShockFiler can export any sound member recorded at runtime and most sound member types created by importing a sound. The following table shows the various sound member types and any additional information needed to export them using ShockFiler.

Member originally imported from format
Notes
SWA
Requires SWA Export Xtra and memory equal to twice the size of the decompressed sound information.
MP3
Requires MP3 Export Xtra and memory equal to twice the size of the decompressed sound information.
IMA
Not supported on Win for export to AIF, but export to WAVE is OK
AU
OK on both platforms for export to both formats.
System 7
OK on both platforms for export to both formats.

Exported files

ShockFiler Xtra uses the data from the specified cast member to create a new file on the FTP server or append data to an existing file (Append applies to text only).

filetype

The filetype parameter currently accepts 5 file types - #text, #jpeg, #wave , #aiff or #bina. Type #bina is for vList data. The file type specified must match the member type or the transfer will error. For instance, specifying #wave to export a text member will not work.

Javascript note: Use the symbol function to convert a string to the Lingo symbol datatype ex: symbol("jpeg")

fileProperties

The file properties list contains additional properties that are particular to the file type. Currently they are:

File type Property Values Default
#text #lineEndings #mac, #win, #unix #mac
#jpeg #quality 0 - 100 100
#wave none
--
--
#aiff none
--
--
#bina none
--
--

Pass [] for file types that do not have any additional file properties.

JavaScript note: Use the list and propList functions to create a Lingo list to pass in this parameter. You cannot pass a JavaScript Array. EX: propList( symbol("quality"),100)

#lineEndings: The line endings property converts any existing line endings characters in the text to the ending type specified. It does not add line endings to text.

#quality: The quality property adjusts the amount of compression applied to the file and therefore the size of the resulting file as well as the time it will take to transmit the data. The lower the quality setting the higher the compression and the smaller the data and the resulting file.

appendFlag

ShockFiler Xtra has the capability to append text to an existing text file on the FTP server, if the server software supports APPEND, if the server has been configured to allow APPEND, and the login account being used has the permission to APPEND.

If the appendFlag parameter is 0 a new file is created on the FTP server if a file of that name does not exist. If the file already exists, and the login user has overwrite permission, the existing file is overwritten. If the file exists and the login user does not have overwrite permission, an error will be returned.

If the appendFlag paramter is 1 and the transfer is for fileType #text, the text will be appended to any existing file of the same name, otherwise a new file will be created. The appendFlag parameter is ignored for any file type other than #text.

You can use the append feature to maintain data files containing data from many users.

Progress Dialog

Please note the limitations of this feature.

Passing 1 for the progressDialogFlag parameter displays a moveable, nonmodal dialog that shows a progress thermometer and percent done. The progressDialogTitle parameter is the text that will display in the title bar of the progress dialog. Note: The progress dialog always displays in the demo version of ShockFiler Xtra.

If the user pressed the cancel button on the dialog during the transfer, the transfer will abort and sf_getTransferStatus will show a status of "Error" and an error string of "Cancelled by server".

Integration with vList Xtra

vList Xtra saves Lingo lists and other data types to members and files. ShockFiler Xtra includes support for receiving data from vList in a format that will create a standalone vList file when saved by ShockFiler to an FTP server.

Getting the data from vList to the FTP server requires two steps:

  1. Call a function in vList that returns the packaged vList data into a variable
  2. Pass the variable containing the vList data as an argument to ShockFiler's sf_Send command
The following vList Xtra function returns data into a variable that you can pass to ShockFiler's sf_Send command:
propList = vList_to_sf ( data, compressionFlag)

data: Lingo list or other data type
compressionFlag: boolean, 1: compress the data, 0: don't compress the data

Returns: Lingo property list in the format:

  [#data: binary vList data, #length: size of data in bytes]
  

Use the following parameters in the sf_Send call to send vList data instead of a cast member:


memberName/propList: name of property list variable containing vList data
castlibName: "". Ignored. No cast member is being sent
remoteFileName: name to give exported vList file on FTP server
fileType: #bina
fileProperties: []. Ignored. No properties can be set for a vList file.

Example:


  -- vList function
  packagedData = vList_to_sf ( [#name: "Andy", #score: 50] , 1)
  -- the packaged vList data is now in variable packagedData
  --
  -- Variable packagedData is passed in the "member" param. It will create a vList file on the 
  -- FTP server named mydata.lst.
  sf_Send ("ftp.macromedia.com", "incoming","guest", "mypassword",packagedData, "", "mydata.lst", #bina, [], 0, 0,"")

sf_Send examples:

Saving a user's preferences, as stored in a field of the movie

err = sf_Send ("ftp1.domain.com", "langModule/gary","languageStudent", "password","preference field", "External castlib", "gary.txt", #text, [#lineEndings: #win], 0, 1, "Storing preferences on server ...")
if err <> 1 then
alert "Cannot initiate transfer"
end if

Logs on to FTP host "ftp1.domain.com" and into the relative directory of "langModule/gary", with a username of "languageStudent" and a password of "password". Exports the text in field "preference field" of castlib "External castlib" to file gary.txt on the FTP server. Any line ending characters in the text will be converted to the Windows convention of CR,LF. The append flag is off, so a new file will be created for the data. The progressDailog flag is on, so a progress dialog will display during the transfer with the caption of "Storing preferences on server ...".

Checks the error value returned. If the error returned is 0 the transfer will start. The movie can continue playing and other Lingo will continue to execute while the file transfer is going on.

Saving a user's art created during the session

member("screenshot member").picture = (the stage).picture
--
err = sf_Send ("192.243.88.53", "","george", "dogfight","screenshot member", "", "sketch.jpg", #jpeg, [#quality: 75], 0, 1, "Sending your picture to the server ...")
--
if err < 1 then
alert "Cannot initiate transfer"
end if

Logs on to FTP host "192.243.88.53" , with a username of "george" and a password of "dogfight". Since no relative directory has been specified, the login directory will receive the file. Exports the internal bitmap in member "screenshot member" of the first internal castlib to file sketch.jpg on the FTP server. Some compression will be applied to the JPEG because a quality setting of 75 was specified. The append flag is off, but it would be ignored for a #jpeg transfer anyway. The progressDailog flag is on, so a progress dialog will display during the transfer with the caption of "Sending your picture to the server ...".

Appending a user's game score to an existing file on the FTP server

put name & TAB & score & RETURN into field "sendScore"
--
err = sf_Send ("ftp.games.com", "frogger","froggerplayer", "ribbet","sendscore", "", "highscores.txt", #text, [#lineEndings: #unix], 1, 0, "")
--
if err < 1 then
alert "Sorry, could not transmit your game score"
end if

Logs on to FTP host "ftp.games.com" , and into the relative directory of "frogger", with a username of "froggerplayer" and a password of "ribbet". Appends the text in member "sendScore" of the first internal castlib, to existing file highscores.txt on the FTP server. The return in the text will be replaced with the UNIX line ending of a linefeed. The text is appended to the file instead of creating a new file because the append paramter is set to 1. The progressDailog flag is off, so no progress dialog will display during the transfer and a caption for the dialog is therefore not necessary so that parameter has been left blank.

Sending sound previously recorded to a member using Audio Xtra

err = sf_Send ("ftp.music.com", "pub/audition","", "","recording 1", "Sound castlib", "rec1.wav", #wave, [], 0, 1, "Sending your recording to server ...")
--
if err < 1 then
alert "Sorry, could not transmit your recording"
end if

Logs on to FTP host "ftp.music.com" , and into the relative directory of "pub/audition". Since the username and password parameters have both been left blank, the login username will be passed as "anonymous" and the password will be passed as "shockfiler@nodomain.com" Transmits the sound member "recording 1" of castlib "Sound castlib" to create a WAVE file on the FTP server named "rec1.wav". There are no additional properties to set for this media type, so that parameter is passed as an empty list. The append flag is off, but it would be ignored for a #wave transfer anyway. The progressDailog flag is on, so a progress dialog will display during the transfer with the caption of "Sending your recording to server ...".

sf_Send ("TODISK", Path,"", "",memberName or vListData, castlibName, fileName, fileType, fileProperties, appendFlag, saveDialogFlag, dialogText)

"TODISK": string, pass this string in all caps to sf_Send to indicate that it will be saving the member to disk
Path: string, Either full path to local directory to save file to or relative path.
notUsed:
string, ignored - pass ""
notUsed:
string, ignored - pass ""
memberName or vListData: string, name of member to export or propertyList exported from vList Xtra
castlibName: string, name of castlib containing member to be exported, can be "" which defaults to internal (lib 1). If a vList propertyList is being passed in the memberName param, then this param should be passed as "".
fileName: string, file name to save exported member to if a full directory was passed in "path", or "" if a relative path was passed in "path"
fileType: Lingo symbol, currently supports #text, #jpeg, #wave,#aiff, #bina
fileProperties: Lingo list, contains additional specifications for the file to be written. Pass [] for a file type with no properties.
appendFlag: boolean, 1 to append to existing file, 0 to overwrite existing file. Ignored for all file types except text.
saveDialogFlag: boolean, 1 to display saveFile dialog or 0 not to [always displays in demo version]
dialogText: string, one-line message to display on dialog

Returns: 1 if the file was saved successfully, or a negative error code if there was a problem

Exports a text member, sound member, image member or vList data to a designated file on the local hard drive.

This alternate usage of the sf_Send command saves to disk if the first argument that usually contains the FTP server IP address contains the string "TODISK" in all caps instead. Some arguments such as username and password have no use when you are saving locally so those arguments are ignored, but you must still pass an empty string for the unused argument to keep the number of arguments the same.

No progress dialog displays during a save to disk. Control passes to the system during the file copy and the next line of Lingo executes after the file copy, so it is not possible to poll sf_TransferStatus during the copy. Calling sf_TransferStatus after the copy returns the number of bytes copied and any error that happened during the copy.

NOTE: If you use this command to save a text or field member and the member contains no text, the target file will not be created. If the target file already exists, it will be deleted.

Path: passing the full path to the file to save

If you provide a full path to a directory in param "path", ShockFiler builds the local file path using the path and fileName paramss. You must pass the directory path without the trailing delimiter which ShockFiler will add. The following strings:

directoryPath: "C:\TEMP" <--- no ending slash
fileName: "animals.jpg"

will save to the path "C:\TEMP\animals.jpg"

If you want to use sf_SaveFileDialog to prompt the user for a path, leave one or both of the path parameters empty and the dialog will appear automatically. If you want to prompt for the path earlier on, use the following code to break up the full file path returned from the dialog into the two pieces required in the directoryPath and fileName params:

  on mouseUp
  fullpath = sf_saveFileDialog("")
  directory = splitFilePath(fullpath)[1]
  filename = splitFilePath(fullpath)[2]
end 

on splitFilePath path
  if (the platform).char[1..3] = "Mac" then
    the itemDelimiter = ":"
  else
    the itemDelimiter = "\"
  end if
  items = the number of items of path
  fname = the last item of path
  delete the last item of path
  return list(path,fname)
end

Path: passing a relative path to the file to save

If you pass a relative path in param "Path" for sf_Send, ShockFiler ignores param "fileName" because it has all of the information it needs to build the path from param "Path". If you pass a relative path in param "Path" then pass "" in param "fileName" because it will be ignored. The following examples show two ways to specify a path of "C:\project\graphics\newpict.jpg" in a movie located at "C:\project\movie.dir".

Full path

sf_Send ("TODISK", "C:\project\graphics","", "","screenshot member", "", "newpict.jpg", #jpeg, [#quality: 75], 0, 1, "" )

Relative path

sf_Send ("TODISK", "@graphics\newpict.jpg","", "","screenshot member", "", "", #jpeg, [#quality: 75], 0, 1, "" )

Save File dialog

If you pass 1 in the saveDialogFlag parameter, with both directoryPath and fileName filled, the saveDialog will come up and show the contents of the directory specified in directoryPath and show the file specified in fileName as the default name for the saved file. If the saveDialogFlag parameter is 1, then directoryPath and fileName are only used by the dialog. The actual save path is determined by the user when the dialog appears.

If you pass 0 in the saveDialogFlag parameter, the directoryPath and fileName are used together to form the path where the file will be saved..If either directoryPath or fileName or both are passed as empty strings, even if the saveDialog parameter is 0, the dialog will still display, since there isn't enough information to save the file.

Shockwave

In Shockwave, the save file dialog always displays before the file is saved and the path the user picks is used. In Shockwave it doesn't matter what is passed in directoryPath or fileName because those arguments are not used.

Example

  on mouseUp
    -- capture the stage and store it in a member
    member("screenshot member").picture = (the stage).picture
	-- save the member to a local jpeg file
     err = sf_Send ("TODISK", "C:\TEMP","", "","screenshot member", "", "sketch.jpg", #jpeg, [#quality: 75], 0, 1, "" )
     if err < 1 then
        alert "Could not save file"
     end if
  end
	

The example above saves a captured image of the stage to a JPEG file. The initial path is "C:\TEMP\sketch.jpg" but since the saveDialogFlag param is 1, a save dialog will display starting at the TEMP directory with sketch.jpg as the default file name. Whatever the user chooses as the path is where the file will be saved. The file will be saved with a quality of 75%.

sf_SendFile (host, directory,username, password,localFilePath,remoteFileName,appendFlag, progressDialogFlag,progressDialogTitle)

host: string, address of FTP host
directory: string, relative path from login directory to target directory
username:
string, either login username or "" for anonymous
password:
string, either login password or "" for anonymous, in which case what gets sent is "shockfiler@nodomain.com"
localFilePath: string, full path to local file to send, or relative path or "" to put up an open file dialog and use the path the user picks
remoteFileName: string, file name to save sent file to on FTP server
appendFlag: boolean, 1 to append to existing file, 0 to overwrite existing file.
progressDialogFlag: boolean, 1 to display progress bar as file transfers or 0 not to
progressDialogTitle: string, caption for progress dialog title bar

Returns: 1 if the transfer can start, or a negative error code if there was a problem

Sends a local file on the user's hard drive to an FTP server. In authoring and projectors any valid file path can be passed for localFilePath. In Shockwave, you must use a relative path for the local file path or leave the localFilePath parameter empty, to prompt the user for the save file path. Passing a full path in Shockwave for the localfilepath will error.

err = sf_SendFile ("ftp.agency.com", "pub/incoming","", "","C:\temp\rough.jpg", "treatment_1.jpg", 1, "Sending your graphic file to server ...")
--

if err < 1 then
alert "Sorry, could not transmit your file"
end if

filePath = sf_OpenFileDialog ( )

Returns: A string containing the chosen file or "" if the user did not chose a file.In authoring and in projectors the full file path to the local file is returned. In Shockwave, the path to the local file is stored internally by the xtra and only the file name is returned.

Puts up a standard file picker dialog. This function was included to provide a way to prompt the user for a local file to send when using sf_SendFile. You first call the function, save its returned file path into a variable, then pass the variable to sf_SendFile:

In authoring and projectors the function operates like a normal open file dialog and can be used any time you want to prompt the user for a local file. In Shockwave, the open file dialog does not return a filepath and therefore is useful only with sf_SendFile. In Shockwave, the dialog returns only the file name chosen and ShockFiler stores the path to the file internally. When you pass the filename returned from the open file dialog to sf_SendFile, ShockFiler determines the full path to the file from the filename and sends the file.

In Shockwave the open file dialog function stores the path to the last file chosen by the user. Once the user has chosen a file using the dialog, you can send the same file multiple times by passing the file name returned from the function to sf_SendFile. To send another file, you must prompt the user again. The new chosen file path is stored internally and the old path is erased. Passing "" in the localFilePath parameter of sf_SendFile will also prompt the user for the local file to send, but the path to the file is not saved internally by the dialog after the transfer completes.

usersFileChoice = sf_OpenFileDialog ( )
sf_SendFile "ftp.soundbank.com", "pub/incoming","", "",userFileChoice, "sample.wav", 1, "Sending your sound file to the server)

sf_GetFile (host, directory,username, password,localFilePath,remoteFileName,progressDialogFlag,progressDialogTitle)

host: string, address of FTP host
directory: string, relative path from login directory to target directory
username:
string, either login username or "" for anonymous
password:
string, either login password or "" for anonymous, in which case what gets sent is "shockfiler@nodomain.com"
localFilePath: string, full path to file to save to or relative path or "" to display a save file dialog
remoteFileName: string, file name to get from FTP server
progressDialogFlag: boolean, 1 to display progress bar as file transfers or 0 not to
progressDialogTitle: string, caption for progress dialog title bar

Returns: 1 if the transfer can start, or a negative error code if there was a problem.

Downloads a remote file on an FTP server to the local machine. In authoring and projectors any valid save path can be passed for localFilePath. In Shockwave, you must use a relative path to save the file to the dswMedia folder or leave the localFilePath parameter empty, to prompt the user for the save file path. Passing a full path in Shockwave for the localfilepath will error.

err = sf_GetFile("ftp.agency.com","updates","ralphieboy", "moonbeam","C:\project\newimages.cst", "weds_images.cst", 1, "Retrieving new image castlib...")
--
if err < 1 then
alert "Sorry, could not get the file"
end if

 

filePath = sf_SaveFileDialog ( defaultFileName )

defaultFileName: string, filename to display in dialog's filename field

Returns: A string containing the save file path or "" if the user did not chose a file.In authoring and in projectors the full file path to the local file is returned. In Shockwave, the path to the local file is stored internally by the xtra and only the file name is returned.

Puts up a standard file save dialog. This function was included to provide a way to prompt the user for a place to save the file when using sf_GetFile. You first call the function, save its returned file path into a variable, then pass the variable to sf_GetFile:

In authoring and projectors the function operates like a normal save file dialog and can be used any time you want to prompt the user for a local path to save a file. In Shockwave, the save file dialog does not return a filepath and therefore is useful only with sf_GetFile. In Shockwave, the dialog returns only the file name chosen and ShockFiler stores the path to the file internally. When you pass the filename returned from the save file dialog to sf_GetFile, ShockFiler determines the full path to the file from the filename and saves the file from the FTP server to that path.

In Shockwave the save file dialog function stores the path to the last file chosen by the user. Once the user has chosen a file using the dialog, you can save to the same local file path multiple times by passing the same file name returned from the function to sf_GetFile. To send another file, you must prompt the user again. The new chosen file path is stored internally and the old path is erased. Passing "" in the localFilePath parameter of sf_GetFile will also prompt the user for the local file path to save to, but the path to the file is not saved internally by the dialog after the transfer completes.

usersFileChoice = sf_SaveFileDialog ("newimages.cst" )
err = sf_GetFile("ftp.agency.com","updates","ralphieboy", "moonbeam",usersFileChoice, "weds_images.cst", 1, "Retrieving new image castlib...)

sf_TransferStatus()

Returns: Lingo property list containing status information

This function call returns the status of the current file transfer or directory listing retrieval. It returns a Lingo property list in the followng format:

[ #file: "birds.jpg", #state: "InProgress", #bytesSoFar: 1024 , #bytesTotal: 19782, #error: "None"]

file: String filename of file currently being transferred
state: String, one of the following. "Connecting", "Started"," InProgress", "Complete" or "Error"
bytesSoFar: Integer. Number of bytes transferred so far
bytesTotal: Integer. Total size of transfer.
error: String. Either "None" or string describing the error.

The commands sf_Send, sf_SendFile, sf_GetFile and sf_RequestFileList do their work while allowing the Director movie to continue running. If you want to know whether one of these commands was successful or when they have finished, you must call sf_TransferStatus periodically. You can also use this function to update a custom file transfer dialog if you don't want to use the one provided. The best place to call it is from an exitframe handler.

Caution: Do not call sf_TransferStatus() from within a repeat loop. Lingo repeat loops lock out other processing and will interfere with or completely prevent the file transfer.

JavaScript note: Use bracket syntax to access the list:

if (sf_TransferStatus()["state"] == "Complete") {

Example:


-- Send text button behavior

property sending

on mouseUp me
  host = "ftp.macromedia.com"
  directory = "pub"
  usersname = "george"
  password = "buckley"
  sendMember = "newdata"
  sendMembersCastlib = ""
  remoteFileName = "results.txt"
  remoteFileType = #text
  remotefileProperties = [#lineEndings:#win]
  doappend = 0
  showDialog = 1
  dialogTitle = "Sending text file ..."
  success = sf_Send (host, directory,usersname, password,sendMember, sendMembersCastlib, remoteFileName, remoteFileType, remotefileProperties, doappend, showDialog,dialogTitle)
  if success = 1 then
    sending = TRUE
  else
    sending = FALSE
  end if
end

on exitframe me
  if sending = TRUE then
    -- If a file transfer is going on then check the status
    statusList = sf_TransferStatus()
    -- Take some action if the transfer is done
    if statusList.state = "Complete" then
      sending = FALSE
      go frame "Transfer complete"
    -- Take some action if the transfer errored out
    else if statusList.state = "Error" then
      sending = FALSE
      go frame "Transfer errored out"   
    -- Loop in this frame while the transfer is in progress
    else
      go the frame
end if else go the frame end if
end

sf_RequestFileList(host, directory,username, password)

host: address of FTP host
directory: path from root to directory
username:
can be "" for anonymous
password:
can be "" for anonymous in which case what gets sent is "webfiler@nodomain.com"

Returns: 1 if the request can start, a negative error if there is a problem

Requests a directory listing for the specified directory on the host. While the list is being transferred Director will continue to animate.

You may need to use additional configuration commands before calling this method if you are connecting through a firewall or proxy server.

This command does not itself return the file listing. ShockFiler parses and stores the returned file listing internally in a Lingo list variable, which you must retrieve with sf_FileListToLingoList after the transfer of list info has finished. The list will not be available until sf_TransferStatus returns a status of "Complete".

Example:

err = sf_RequestFileList ("ftp.adobe.com", "pub","", "")
if err <> 1 then
alert "Invalid parameters or another connection is open"
end if

sf_FileListToLingoList(listType)

listType: Symbol, either #full, #filename or #raw

Returns: Lingo list containing file informaiton or [] if there was an error, or no files in directory

#filename returns a linear list containing only the file names, of the files in the specified directory. The listing does not include directories.

#full returns a property list where each file name is a property whose value is a property list of file attributes.

[ "loud.wav" : [#size: 40453, #date: "May 1 1999", #type: #file],

"pictures" : [#size: 0, #date: "Aug 21 2000", #type: #directory] ]

#raw returns a linear list of the returned text from a file listing, one line of the listing per string, in order

["total 48", "-rw-rw-r-- 1 0 ftpadmin 786 Nov 7 1997 README.ftp" ,"d--x--x--x 2 0 staff 512 Sep 28 1997 bin"]

If the FTP server does not return information required for one or all of the fields ShockFiler will still return a list in the above format but a field with no information returned will appear as follows:

#size: 0

#date: ""

#type: #invalid

Use this function after initiating a listing request with sf_RequestFileList. Code example 2 shows how to loop in a frame and check the transfer status while waiting for the list to be returned.

JavaScript note: Use bracket syntax to access the list.

theList = sf_FileListToLingoList(symbol("full"));

// [ "loud.wav" : [#size: 40453, #date: "May 1 1999", #type: #file],"pictures" : [#size: 0, #date: "Aug 21 2000", #type: #directory] ]

soundName = theList.getPropAt(1);
// "load.wav"

soundProps = theList.getProp(soundName);

// [#size: 40453, #date: "May 1 1999", #type: #file]

soundSize = soundProps["size"];

// 40453

 

Example 1

fileList = sf_FileListToLingoList(#filename)
put fileList
-- ["6list.html","7list.html","404list.html"]

fileList = sf_FileListToLingoList(#full)
put fileList
-- ["6list.html":[#size: 6400,#date: "Nov 7 1997",#type: #file],"7list.html":[#size: 3604,#date: "May 28 1999",#type: #file],"404list.html":[#size: 1732,#date: "Jun 1 1997",#type: #file] ]

fileList = sf_FileListToLingoList(#raw)
put fileList
-- ["total 3",
"-rw-rw-r-- 1 0 mike 6400 Nov 7 1997
6list.html" ,
"-rw-rw-r-- 2 0 mike 3604
May 28 1999 7list.html",
"-rw-rw-r-- 2 0 mike 1732 Jun 1 1997 404list.html" ]

Example 2


-- Get listing button behavior

property connecting

on mouseUp me
  host = "192.192.192.1"
  directory = "junk"
  usersname = "anonymous"
  password = "gcm@tiac.net"
  success = sf_RequestFileList (host, directory,usersname, password)
  if success = 1 then
    connecting = TRUE
    -- Initialize the field that will display the listing
    put "" into field "Listing"
  else
    connecting = FALSE
  end if
end

on exitframe me
  -- If not connecting then loop in this frame
  if connecting = FALSE then
    go the frame
  else
    -- If a connection is in progress then check the status
    statusList = sf_TransferStatus()
    -- If the listing was successfully retrieved then 
    -- get it in Lingo list format
    if statusList.state = "Complete" then
      connecting = FALSE
      sending = FALSE
      fileList = sf_FileListToLingoList(#raw)
      numLines = fileList.count
      repeat with x = 1 to numLines
        put filelist[x] & RETURN after field "Listing"
      end repeat      
      -- Take some action if the transfer errored out
    else if statusList.state = "Error" then
      connecting = FALSE
      alert "Transfer errored out"   
      -- Loop in this frame while waiting for the listing
    else
      go the frame
    end if
  end if
end

sf_CreateDirectory ( host, directory, username, password, directoryNameToCreate)

host: address of FTP host
directory: path from root to directory
username:
can be "" for anonymous
password:
can be "" for anonymous in which case what gets sent is "webfiler@nodomain.com"
directoryNameToCreate: string, name of subdirectory to create
in login directory

Logs in to the specified directory and creates a sub-directory within it specified by the directoryNameToCreate parameter. Use sf_TransferStatus() to monitor progress and to determine if the directory was successfully created. Some things that will prevent creation of the directory are:

sf_Disconnect

ShockFiler automatically disconnects after a successful file transfer or listing transfer. In rare circumstnces a problem with the FTP server will cause an operation to never return a Complete status. Since only one transfer can happen at a time, use sf_Disconnect to terminate an unsuccessful operation before attempting a new one.

Relative path syntax

ShockFiler accepts a relative path syntax to specify a local file to send or save. In authoring and projectors the path is relative to the movie's path. This is true for all projectors, whether or not the projector safemode property is turned on via Lingo. In Shockwave, the path is relative to folder DSWMEDIA in the Shockwave support folder. ShockFiler relative path's start with @ and use either "\" or ":" to separate directory names.

Examples:

If the path to the movie is:
C:\Project\themovie.dir

this relative path:
@image.jpg

Creates a file at these locations:

Projector
C:\Project\image.jpg

Shockwave
C:\Windows\System\Macromed\Shockwave\DSWMEDIA\image.jpg

-----------------------------

If the path to the movie is:
Macintosh HD:Project:themovie.dir

this relative path:
@Pictures:Subfolder:image.jpg

Creates a file at these locations:

Projector
Macintosh HD:Project:Pictures:Subfolder:image.jpg

Shockwave
Macintosh HD:System:Extensions:Macromedia:Shockwave:DSWMEDIA:Pictures:Subfolder:image.jpg

Firewall / proxy server

The ShockFiler commands in this section will be most helpful for users who must connect through a firewall or proxy server, but they may be useful in other situations as well. Unless the FTP server you are trying to connect to has unusual requirements, if you are not connecting through a firewall or FTP server you can safely ignore this section and these commands. If you DO have to connect via a firewall and/or proxy server but are not really familiar with how firewalls and proxy servers work, the following Question and Answer section should give you a basic understanding.

What is a port?

An IP address like "ftp.someserver.com" or "192.233.255.1" specifies a particular computer on a network. The computer can be running many different software servers at the same time like web servers, FTP servers or chat servers. A port number is a further breakdown that allows IP traffic to be directed to a particular app on the server. A server app such as an web server, on the computer specifies a port that it "listens" to, and a client app, like a web browser, makes a connection using that port. Without ports, all of the server applications on a PC would have to inspect all of the TCP/IP traffic to look for messages they were interested in. That would not be very efficient.

Port numbers range from 0 to 65535. Port numbers within the range 1-1023 are assigned to certain services as the default agreed-upon port for that service. For instance web servers run on port 80 and FTP servers run on port 21. You can configure server software to run on another port, but most client software like a web browser or FTP client will try to connect on the default port.

What is a firewall?

A firewall is software that filters TCP/IP traffic to protect a machine from intrusion, or from sending sensitive data out. The software can be running on the computer itself or it can be running on a separate computer. If the firewall is running on another computer, the first computer must make all of its internet connections through the firewall computer to benefit from the firewall.

One way hackers gain access to a system is by using "port scanner" programs to find ports they can connect to on the target machine. A firewall is usually set up to reject incoming port connections except by approved IP addresses and/or programs.

What is a proxy server?

A proxy server is a type of firewall set up to handle a particular protocol like all HTTP traffic or FTP traffic.

What is the difference between active and passive FTP?

FTP sessions operate over 2 ports on the FTP server and over 2 ports on the FTP client. One port, the control port, carries instructions from the client like "send me a file listing" or "I'm going to send a file" and transmits messages back to the client from the server like "no such directory" or "got the file successfully". The other port, the data port, handles the actual data like the text of the file listing or the actual file data being sent or received.

The client decides whether the FTP session will be active or passive. In an active FTP session, which is the default for most clients, the server connects to a port number on the client to be used for the data port. But firewalls are usually set up to reject incoming port connections, except to pre-established port numbers, because that is one way hackers gain access to a system. In that case the FTP client will not be able to work if it uses an active connection. The only way around it would be to set up the firewall to allow inbound connections to any port, which defeats the purpose of the firewall. Due to this problem, a passive connection is required to successfully FTP out of most firewalls.

In a passive connection, the FTP client initiates the connection to a port on the server to be used for the data port. This makes things safer for the computer the client is running on since it does not have to allow arbitrary incoming connections. Ironically, since passive connections pose security risks for the server similar to the risks posed to the client by active connections, some servers do not accept passive connections.

sf_PassiveMode ( onOrOffFlag )

onOrOffFlag: Boolean, TRUE to turn passive mode on. Default is FALSE, active connection.

Returns: No return

Sets the connection mode to use for the next file transfer or or file listing request. Has no effect on a transfer currently under way.

This command may be necessary when the user is running behind a firewall.

sf_PortNumber ( portNumber )

portNumber: Integer, FTP server control port number. Default is 21.

Returns: No return.

Sets the port number on the FTP server to connect to on the next file transfer or or file listing request. Has no effect on a transfer currently under way.

Most normal FTP servers listen to port 21. This command may be necessary to connect to an unusually configured FTP server, but it is mostly used for connecting through an FTP proxy server.

Connecting to a proxy server

You use a proxy server by connecting to IT, rather than the FTP server you actually want to access, and telling the proxy server which remote site you actually want to connect to. The proxy server then connects to the intended FTP server and acts as a go-between.

To accomplish this using ShockFiler you must first use sf_PortNumber to change the connection port to the one the proxy server is running on, if it is not 21. Then, in the sf_Send or sf_RequestFileListing command, you must pass the proxy server's IP address in the host parameter, and username and password parameters in the format required by the proxy server. These two paramaters must communicate to the proxy server what ACTUAL FTP server you want to connect to, and possibly the usernames and passwords for both the proxy server and the actual remote FTP server.

The requirements for the user and password fields vary among proxy servers, but following example shows the most common format. In this example you want to send files to the following actual FTP server:

host: ftp.realserver.com
username: james
password: topsecret

On your network, the proxy server listens to port 2020, not port 21, for control commands. The proxy server IP address is 192.241.49.49. The proxy server does not require a user name or password to log on to it. To access ftp.realserver.com through the proxy server, you would do the following:

1. Use sf_PortNumber(2020) to set the server connection port to 2020

2. In either the sf_Send or sf_RequestFileList command you would specify the following for host, user and password:

host: 192.241.49.49
username: james@ftp.realserver.com
password: topsecret

The host IP is the IP address of the proxy server. The username parameter contains the address of the actual server you want to connect to after the @ separator and the password for the actual server before the @ separator. The password field contains the password for the actual FTP server.

Some proxy servers require a user name and password to connect to them, which is completely separate from the ones you would use to connect to the actual FTP server. In that case more information would be needed in the username and password fields. Since the format of the information and the characters used to separate the information in the fields varies between proxy servers, the proxy server manual or system admin is the best source of information as to what will work in those parameters.

In some cases the proxy server requires two logins, one to input the proxy server username and password, and the second to input the remote host address, username and password. ShockFiler Xtra will not work with a proxy server that requires a double-login.

Error table

ShockFiler Xtra Error Table
Error number
Error
1
Operation was successful
0
Registration failed
-1
Another transfer is in progress
-2
Invalid member
-3
Invalid castlib
-4
Member type does not match export file type
-5
Property invalid for file type or invalid file path
-6
User did not grant permission for this transfer
-7
Memory allocation error
-8
Could not create/open a temp file
-9
File not found
-10
File cannot be read
-11
Sound sample rate or depth not supported
-12
Out of memory
-15
Unspecified error. The most common situation to cause this is no internet connection.

Shockwave

This section assumes that you are generally familiar with how Shockwave handles Xtras and understand the terms Shockwave support folder, Shockwave-safe, and packaged Xtra. If not, please first read the Using Xtras with Shockwave tech note.

To create a Shockwave movie that will auto-download the Xtra to the user's hard drive you must do the following, in this order:

  1. Upload the packaged Xtra files to your web server
  2. Add an entry for ShockFiler Xtra to file xtrainfo.txt in your Director authoring directory to point to the packaged Xtra files on your server
  3. Do Modify -> Movie -> Xtras, select ShockFiler Xtra, and check the "Download if Needed" option

    Once you have completed steps 1 and 2, you can create other Shockwave movies by doing only step 3.

    Packaged files

    Your ShockFiler Xtra archive contains a subfolder called "Shockwave packages". There are three files inside it:

    shockfilerpack.w32 - Win 32 packaged ShockFiler Xtra
    shockfilerpack.ppc - Mac Classic packaged ShockFiler Xtra
    shockfilerpack.carb - Mac OSX packaged ShockFiler Xtra

    Each package contains the ShockFiler Xtra for that platform. Depending on the user's platform, the package autodownloaded to the user's hard drive will install the correct ShockFiler Xtra for the user's platform into their Shock support folder. If, for some reason, you choose not to make your Shockwave movies autodownload the package files, you can have the user install the right Xtra for their platform into the Shockwave support folder manually.

    Upload the three package files to the same directory on your web server. Use a "binary" or "raw", not "text" transfer If the packages are uploaded to two different directories autodownloading will not work. Do not rename the package files..

    If you are FTP'ing from the Mac with Fetch or a similar client, with an "automatic" option for file typing, make sure that is off. The Mac package file has no Mac file type so the system assigns it a type of TEXT which Fetch's automatic typing will try to upload as text. Make sure the upload is either type binary or type raw.

If you are going to distribute ShockFiler Xtra with Shockwave movies, you must use your own web server to do so. updateStage, inc. reserves the right to refuse access, without notice, to any referring URL that generates excessive traffic.

ShockFiler Xtra packages have been signed and packaged by updateStage, inc.. You may choose to repackage ShockFiler Xtra and sign it with your own Verisign certificate. You might want to do this if you want your own company name to appear in the auto-download dialog box the user sees when an auto-download is initiated. Macromedia is the best source of information on applying for a Verisign certificate and packaging files.

Xtrainfo.txt

The text file xtrainfo.txt resides in your Director authoring directory. It contains information about Xtras such as file version names for an Xtra on both platforms and the URL for the packages. The information contained in xtrainfo.txt is saved with each movie you create and used by projectors and Shockwave.

You must create an entry for ShockFiler Xtra in your xtrainfo.txt file that specifies the URL on your server for the package files. The last part of the path will always be "shockfilerpack". That specifies the filename of the packages within the directory, without the file extension. Do not include a file extension at the end of the path.

[#namePPC:"ShockFiler", #nameW32:"ShockFiler.x32", #package:"http://www.domain.com/folder/shockfilerpack"]

 

You might notice that there is no #namecarb entry. The OSX version of Shockwave currently uses the #namePPC entry to determine the Mac Xtra name on OSX.

If you edit xtrainfo.txt while Director is open you should quit and restart Director to read in the changed information in xtrainfo.

Editing the movie's Xtras list

Open the Director movie that you want to save as Shockwave. Choose Modify -> Movie -> Xtras and add ShockFiler Xtra. Select ShockFiler Xtra from the list and check the "Download if needed" option. Director will initiate an internet connection and look for the packages at the URL you specified in xtrainfo.txt.

If Director finds the packages, it will transfer information about the package contents for both platforms such as file names and version numbers and embed the information into your Director movie. An informational dialog box will appear that tells you that the packages for both platforms are "downloading". The packages themselves are not downloading, just information about them that the Shockwave movie will need later to compare the version of the Xtra the user possibly already has to the version currently on the server in order to determine if autodownloading is necessary. The Director movie needs information about both platforms because it may find itself running on either platform once it is on the web. Note that Director does not check the .carb package during this process.

Once "downloading" of the packages has finished, save the movie, then save it as Shockwave. The finished Shockwave movie can reside at any URL. It does not have to be in the same directory or even on the same server as the packaged Xtras.

If a connection cannot be opened, or the packages cannot be found at the specified location, Director will uncheck the "Download as needed" option automatically. You must have a successful connection for the box to remain checked. A Shockwave made out of a Director movie with the "Download as needed" button unchecked will not autodownload ShockFiler Xtra.

If Director is returning "file not found" or other errors when doing the online check to see if the packages exist during authoring, some common trouble-shooting is included in the article Problems with "Download if needed" checkbox in Xtras dialog.

Exporting sound members from Shockwave

The following two Macromedia Xtras are not included with the standard Shockwave installation, but they are needed by ShockFiler Xtra to export sound members.

Sound Import Export
Mix Services

Follow the procedure outlined above to add these Xtras to the Xtras list of any moviie that will be sending sound members. The Xtras will auto-install at the same time that ShockFiler installs.

Limitations

Version History

Current version: 1.2.5

v.1.2.5 Win, Mac

v.1.2.4 Win

v.1.2.3 Win

v.1.2.2 Win, Mac

v.1.2.1 Win

v.1.2.0 Win, Mac

v.1.1.0 Win, Mac

v.1.0.8 Mac

v.1.0.7 Win, Mac

v.1.0

First commercial release.

Standard legal disclaimer

This software is provided "as is" without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability or fitness for a particular purpose. The software or its documentation or sample code may include errors or technical inaccuracies. Changes are periodically made to this software, its documentation and sample code, and may be incorporated in new versions. updateStage, inc. may improve or change its products at any time without notice. updateStage, inc. does not assume any responsibility for, and disclaims all liability for errors in this software or its documentation and sample code. updateStage, inc. will not be responsible for any damages of any sort under any conditions. While the ShockFiler Xtra contains no known bugs, use it at your own risk. As always, you should make frequent backups of important information. Some jurisdictions do not allow the exclusion of implied warranties, so the above exclusion may not apply to you.

Copyright © 2003 updateStage, inc. All rights reserved.