-- Self-contained WPMacApp SheepShaver setup
-- Version 10.0.8 - 23 January 2015
-- Script by Edward Mendelson http://wpdos.org
-- Based on ideas by John Rethorst, applet includes work by Smokey Ardisson
-- all properties listed here should now be changed via setOptions
-- hold down Option key while launching
-- to do: setup universal-access equivalent for Mavericks
-- to do: document the transferImage feature
property parent : AppleScript
-- DEFAULT SCREEN SIZE 1024 x 768
property defaultWidth : 1024
property defaultHeight : 768
-- to specify window size permanently, use the SheepShaver Preferences dialog;
-- to make a portrait-layout window that WP can fill, use width 640, height 720 (or up to 742)
-- ENABLE DIRECT PRINTING TO LOCAL PRINTER (OS X 10.6 or 10.7 ONLY!!)
-- use this option to make it possible to use a local printer
-- directly, instead of using the special print system.
-- To disable direct printing to a local printer, set to 0
property enableLocalPtr : 1
-- the following lines are for debugging only; do not change them!
-------------------------------------------------------------
-- DO NOT PROMPT FOR PRINTERS
-- to suppress the prompt asking to setup a printer, change to 1
property suppressPrinterPrompt : 0
property firstRun : false
property showPrinterMenu : false
property doIPSetup : false
-- never change anything below these lines!
-------------------------------------------------------------
-------------------------------------------------------------
property msgTitle : "WPMac Appliance Launcher"
property fldrScript : "WPTransferFolderScript.scpt"
property reqVers : 6 -- requires Snow Leopard
property useHomeFolder : 0 -- if 1, Unix disk is user home folder, not documents folder
property calculateSize : 0
-- the default WPMacApp appliance size is 1024 x 768; however,
-- if you want the WPMacApp appliance screen size to be calculated
-- as a proportion of your Mac's screen size, change 0 to 1 or 2 below
-- for a calculated landscape-style layout, change 0 to 1
-- for a calculated portrait-style layout, change 0 to 2
global forceFullScreen, defaultScreenSize
global sheepApp, sheepPath, filesFolder, macSystem, macPath
global userPath, unixPosixPath, userLibPath, userPosixPath, unixPath
global vertBound, horizBound, maxHeight, maxWidth, fullScreen
global UNIX_plist_path, presMode, ssRunning, questionIcon
global thisApp, checkKeysPosix, myUnix, vmPath, vmPosix
global extfsPath, useSelectedUnix, readmeFile, readmePOSIX
global myPlist, myPlistfile, myPlistPosix, procName
-------------------------------------------------------------
-- variables for installing printing system:
global userLibScrPath, thisApp, otherUnix -- userfldrpath
global printAction, neverFile, doPrompt, doSetup, sysAbsent
-------------------------------------------------------------
-- variables for Spotlight and QuickLook plugins and UA
global sysVers, Mountain, Mavericks, Yosemite -- Leopard, Lion
-------------------------------------------------------------
-- variables for dropped items
global unixFolder, posixFolder, actionChoice, runCount
global fileOnlyName, thePosPath, nameCount, aliasForList
-------------------------------------------------------------
-- variables for printer and PDFwriter installation
global pdfPkg, pdfPkgPath, doPrinterSetup, doPdfSetup
global thePrinter, theQueue, ptrButton
global printPDFprompt
-------------------------------------------------------------
-- variables for start WPMac automatically option
global wpStartup
-------------------------------------------------------------
-- variables for installing launch daemon
global plistHeadPosix, plistMiddlePosix, plistFootPosix, filesPosix, sswp
-------------------------------------------------------------
-- run and open
on run
doBasics()
runVM()
removePrintSystem()
error number -128
end run
on open (filesToOpen)
doBasics()
transferData(filesToOpen)
runVM()
removePrintSystem()
error number -128
end open
-------------------------------------------------------------
-- shared routines
on doBasics()
-- USE QUASI-FULLSCREEN MODE
-- to make SheepShaver Wrapper run in a quasi-fullscreen mode, use the SheepShaver
-- preferences dialog and set mode to fullscreen, not window
-- or, in preferences, set both height and width to 0
-- alternatively, to force fullscreen mode, change 0 to 1 below
-- Warning: this option hides the dock and menu bar when this app runs
-- NOTE THAT SETTING "forceFullScreen : 1" OVERRIDES "calculateSize : 1 or 2"
set forceFullScreen to 0
-- RESTORE DEFAULT SCREEN SIZE 1024x768
-- to restore default screen size change 0 to 1
set defaultScreenSize to 0
set doPrinterSetup to 0
set doPdfSetup to 0
set thePrinter to ""
set theQueue to ""
set ptrButton to ""
checkHostSystem()
readPlist() -- leads to showFirstRunMsg()
checkKeyboard() --leads to setOptions()
screenDimension()
getMyName()
setupPaths()
writePrefs()
addPlugins()
setDataFolder()
writeOptionFiles()
if sswp is false then
setupLaunchDaemon()
else
setupSSWPLaunchDaemon()
end if
allPrinterSetup()
end doBasics
-------------------------------------------------------------
-- starting subroutines
(* -- this is NOT used yet
on processRunning(processName)
return (do shell script "ps axc") contains processName
end processRunning
*)
on checkHostSystem()
set Mountain to 0
set Mavericks to 0
set Yosemite to 0
set sysVers to ((system attribute "sysv") mod 4096 div 16)
if sysVers < reqVers then
set dialogText to "This application runs under OS X 10." & reqVers & " or later, and you seem to have an earlier version of OS X."
errorQuit(dialogText)
end if
if sysVers is greater than or equal to 8 then set Mountain to 1
if sysVers is greater than or equal to 9 then set Mavericks to 1
considering numeric strings
set Yosemite to system version of (system info) ≥ "10.10"
end considering
if Mountain is 1 then
set suppressPrinterPrompt to 1
set enableLocalPtr to 0
end if
-- is another SheepShaver running?
tell application "System Events"
set apps to every process whose name contains "SheepShaver"
if not (apps is {}) then
set thisProcess to every process whose bundle identifier contains "org.wpdos.wpmacapp.sheepshaver"
if thisProcess is {} then
tell me to activate
display dialog "Another copy of SheepShaver seems to be running. I can continue, but you should not continue if the other copy uses the same disk image used by the WPMacApp." buttons {"Continue", "Cancel"} default button 1 with title msgTitle
if button returned of result is "Cancel" then
error number -128
end if
end if
end if
end tell
-- is this copy of SheepShaver already running?
set ssRunning to false
if application "WPMacApp" is running then
tell application "System Events"
set apps to every process whose bundle identifier is "org.wpdos.wpmacapp.sheepshaver"
if not (apps is {}) then
set ssRunning to true
end if
end tell
end if
end checkHostSystem
on checkKeyboard()
set showPrinterMenu to false
set doIPSetup to false
set thisApp to path to me as text
set checkKeysPath to (thisApp & "Contents:Resources:Files:checkModifierKeys")
set checkKeysPosix to quoted form of (POSIX path of checkKeysPath)
set optionState to do shell script checkKeysPosix & space & "option"
if optionState is "1" then
my setOptions()
end if
end checkKeyboard
on screenDimension()
if ssRunning is false then
set horizBound to 0
set vertBound to 0
-- routines to set screen size
set dspsizes to getDspSizes()
set widthList to {}
set heightList to {}
repeat with thisItem in dspsizes
set the end of widthList to first item in thisItem as number
set the end of heightList to second item in thisItem as number
end repeat
set sortedWidths to simple_sort(widthList)
set sortedHeights to simple_sort(heightList)
set maxWidth to the first item in sortedWidths as number
set maxHeight to the first item in sortedHeights as number
if calculateSize = 1 then
set horizBound to round maxHeight * 1.12
if horizBound is greater than 1600 then
set horizBound to 1600
else if horizBound is greater than 1280 then
set horizBound to 1280
else if horizBound is greater than 1152 then
set horizBound to 1152
end if
set vertBound to round horizBound * 0.75
set vertBound to vertBound as string
set horizBound to horizBound as string
else if calculateSize = 2 then
set horizBound to round maxHeight * 0.8
if horizBound is greater than 1600 then
set horizBound to 1600
else if horizBound is greater than 1280 then
set horizBound to 1280
else if horizBound is greater than 1152 then
set horizBound to 1152
end if
set vertBound to round horizBound * 1.125
set vertBound to vertBound as string
set horizBound to horizBound as string
end if
end if
end screenDimension
on setupPaths()
set useSelectedUnix to 1
try
do shell script "ls " & quoted form of extfsPath
on error
set useSelectedUnix to 0
end try
-- use Home or Documents folder?
if useHomeFolder = 1 then
set otherUnix to path to documents folder as text
else
set otherUnix to path to home folder as text
end if
if useSelectedUnix = 1 then
my setUnixFolder()
else
if useHomeFolder = 1 then
set unixPosixPath to POSIX path of (path to home folder)
set unixPath to path to home folder as text
-- set otherUnix to path to documents folder as text
else
set unixPosixPath to POSIX path of (path to documents folder)
set unixPath to path to documents folder as text
-- set otherUnix to path to home folder as text
end if
end if
-- write data path to plist file
set myPlist to "org.wpdos.wpmacapp"
set myPlistfile to ((path to preferences as Unicode text) & myPlist & ".plist")
set myPlistPosix to quoted form of POSIX path of myPlistfile
try
do shell script "defaults write" & space & myPlist & space & "DataPath " & unixPosixPath
end try
set userPath to path to home folder as text
set userLibPath to path to library folder from user domain as text
-- Set up paths in this app
if Mavericks is 0 then
set sheepApp to (path to me as string) & "Contents:Resources:Files:SheepShaver.app" as string
set procName to "SheepShaver"
else
set sheepApp to (path to me as string) & "Contents:Resources:Files:SheepShaver-MV.app" as string
set procName to "WPMac Appliance"
end if
set sheepApp to sheepApp as alias
set sheepPath to (POSIX path of sheepApp)
try
set macSystem to (path to me as string) & "Contents:Resources:Files:MacOS.sheepvm" as string
set macSystem to macSystem as alias
set macPath to (POSIX path of macSystem)
on error
tell me to activate
set dialogText to "Add a self-contained sheepvm named MacOS.sheepvm to this application, in the folder Contents:Resources:Files."
errorQuit(dialogText)
end try
set sswp to true
set prefsPosix to (macPath & "prefs")
try
do shell script "head -n 1 " & quoted form of prefsPosix & " | grep SS-WP"
on error
set sswp to false
end try
set questionIcon to ((path to me as text) & "Contents:Resources:Files:Question.icns") as alias
set pdfPkg to (path to me as string) & "Contents:Resources:Files:PDFwriter.pkg" as string
set pdfPkg to pdfPkg as alias
set pdfPkgPath to quoted form of (POSIX path of pdfPkg)
set readmeFile to ((path to me as text) & "Contents:Resources:Files:Read Me First.pdf") as alias
set readmePOSIX to quoted form of POSIX path of readmeFile
set plistHeadPath to (thisApp & "Contents:Resources:Files:plisthead.txt")
set plistMiddlePath to (thisApp & "Contents:Resources:Files:plistmiddle.txt")
set plistFootPath to (thisApp & "Contents:Resources:Files:plistfoot.txt")
set plistHeadPosix to quoted form of (POSIX path of plistHeadPath)
set plistMiddlePosix to quoted form of (POSIX path of plistMiddlePath)
set plistFootPosix to quoted form of (POSIX path of plistFootPath)
set contentsFldr to (path to me as string) & "Contents:Resources:Files:" as string
set filesFolder to contentsFldr as alias
set filesPosix to (POSIX path of filesFolder)
end setupPaths
on setUnixFolder()
set vmPath to (path to me as string) & "Contents:Resources:Files:MacOS.sheepvm"
set vmFile to vmPath as alias
set vmPosix to (POSIX path of vmFile) as string
-- set extfsPosix to (vmPosix & "extfsposix")
set extfsPath to (vmPosix & "extfspath")
set unixPath to paragraph 1 of (read POSIX file extfsPath)
set unixPosixPath to POSIX path of file unixPath
if useHomeFolder = 1 then
set otherUnix to path to home folder as text
else
set otherUnix to path to documents folder as text
end if
end setUnixFolder
on writePrefs()
if ssRunning is false then
set prefsFile to (path to me) & "Contents:Resources:Files:MacOS.sheepvm:prefs" as string
set prefsFile to prefsFile as alias
set prefsPath to (POSIX path of prefsFile) as string
set savePath to ((POSIX path of prefsFile) & ".storage")
set tempPath to ((POSIX path of prefsFile) & ".tempfile")
set screenPath to ((POSIX path of prefsFile) & ".screen")
-- write prefs file, but first backup prefs
try
do shell script "cp " & quoted form of prefsPath & " " & quoted form of savePath
on error
set dialogText to "Problem backing up preferences file. No changes made."
end try
-- remove existing data before replacing
try
if (calculateSize is greater than 0) or (defaultScreenSize is greater than 0) then
do shell script "grep -v '^extfs\\|^screen' " & quoted form of prefsPath & " > " & quoted form of tempPath
else
do shell script "grep -v '^extfs' " & quoted form of prefsPath & " > " & quoted form of tempPath
end if
on error
set dialogText to "Problem extracting data from preference file. No changes made."
errorQuit(dialogText)
end try
-- insert replaced data
try
do shell script "echo extfs " & quoted form of unixPosixPath & ">> " & quoted form of tempPath
if defaultScreenSize is greater than 0 then
copy defaultWidth to horizBound
copy defaultHeight to vertBound
end if
if (calculateSize is greater than 0) or (defaultScreenSize is greater than 0) then
do shell script "echo screen win/" & horizBound & "/" & vertBound & " >> " & quoted form of tempPath
end if
on error
set dialogText to "Problem reading data from preference file. No changes made."
errorQuit(dialogText)
end try
try
do shell script "mv " & quoted form of tempPath & " " & quoted form of prefsPath
on error
set dialogText to "Problem creating new preferences file. No changes made."
errorQuit(dialogText)
end try
try
do shell script "rm " & quoted form of savePath
end try
-- routine for full-screen option
set fullScreen to 0
if forceFullScreen = 1 then
set fullScreen to 1
end if
set fullWidth to maxWidth as string
set fullHeight to maxHeight - 21 as string
--tell me to activate
--display dialog "debug fullScreen " & fullScreen
set fullNumbers to fullWidth & "/" & fullHeight
-- did user specify "fullscreen" or 0/0 dimensions in SheepShaver prefs?
if fullScreen = 0 then
try
set fullByPrefs to true
set fullScreen to do shell script "grep -c 'dga/\\|/0/0' " & quoted form of prefsPath
on error
set fullByPrefs to false
end try
--
try
set fullByPrevious to true
set fullScreen to do shell script "grep -c '" & fullNumbers & "' " & quoted form of prefsPath
on error
set fullByPrevious to false
end try
if fullByPrefs is true then set fullScreen to 1
if fullByPrevious is true then set fullScreen to 1
end if
--tell me to activate
--display dialog "new debug fullscreen " & fullScreen
if fullScreen is greater than 0 then
-- set SheepShaver size to width of Mac by height minus menu line
-- set fullWidth to maxWidth as string
-- set fullHeight to maxHeight - 21 as string
try
do shell script "cp " & quoted form of prefsPath & " " & quoted form of savePath
on error
set dialogText to "Problem backing up preferences file. No changes made."
end try
try
do shell script "grep -v '^screen' " & quoted form of prefsPath & " > " & quoted form of tempPath
on error
set dialogText to "Problem reading screen size from preference file. No changes made."
errorQuit(dialogText)
end try
try
do shell script "echo screen win/" & fullWidth & "/" & fullHeight & " >> " & quoted form of tempPath
end try
try
do shell script "mv " & quoted form of tempPath & " " & quoted form of prefsPath
on error
set dialogText to "Problem writing new preferences file. No changes made."
errorQuit(dialogText)
end try
try
do shell script "rm " & quoted form of savePath
end try
-- modify info.plist so dock disapepars
set presMode to "LSUIPresentationMode"
set Mac_plist_path to (sheepPath as string) & "Contents/"
tell application "Finder"
set plistFile to (Mac_plist_path & "info.plist")
if not (exists (file (Mac_plist_path & "original.plist"))) then
try
do shell script "cp " & quoted form of POSIX path of plistFile & space & quoted form of POSIX path of (Mac_plist_path & "original.plist")
on error
tell me to activate
display dialog "Problem here."
end try
end if
end tell
set UNIX_plist_path to quoted form of POSIX path of (Mac_plist_path & "info")
set script_text to "defaults write " & UNIX_plist_path & space & presMode & space & "-int" & space & "4"
try
do shell script script_text
on error
set script_text to "defaults write " & UNIX_plist_path & space & presMode & space & "-int" & space & "1"
try
do shell script script_text
on error
tell me to activate
display dialog "Error writing SheepShaver defaults for WPMacApp." buttons {"OK"} default button 1 with icon stop giving up after 5
end try
end try
end if
end if
end writePrefs
on runVM()
-- now to run the program
if ssRunning is true then
do shell script "open -a" & space & quoted form of sheepPath
else
do shell script "open -a" & space & quoted form of sheepPath & space & quoted form of macPath
-- if full screen, nudge window to top of screen
--tell me to activate
--display dialog "debug fullScreen " & fullScreen
if fullScreen is greater than 0 then
tell application "System Events"
repeat until (process procName exists)
delay 0.1
end repeat
tell process procName
repeat until window 1 exists
delay 0.1
end repeat
end tell
delay 0.7
tell process procName
tell window 1
set position to {0, 0}
end tell
end tell
end tell
delay 0.5
-- restore original info.plist settings
set script_text to "defaults write " & UNIX_plist_path & space & presMode & space & "-int" & space & "1"
try
do shell script script_text
on error
tell me to activate
display dialog "Error writing SheepShaver defaults for WPMacApp." buttons {"OK"} default button 1 with icon stop giving up after 5
end try
end if
end if
end runVM
-------------------------------------------------------------
-- subroutines
on setDataFolder()
-- this creates .WPTransfer folder for communicating between OS X and SheepShaver
set unixFolder to ""
set text item delimiters to "/"
set posixItems to text items 2 thru -1 of unixPosixPath
set text item delimiters to ":"
set partialPath to (posixItems as string)
set unixFolder to (path to startup disk as string) & text 1 thru -1 of partialPath
-- tell me to activate
-- display dialog "debug " & sswp
if sswp is true then
set posixFolder to unixPosixPath & "SheepShaver Data/OSX > SS"
else
set posixFolder to unixPosixPath & ".WPTransfer"
end if
try
do shell script "ls -a " & quoted form of (posixFolder)
set folderFound to true
on error
set folderFound to false
end try
if folderFound is false then
do shell script "mkdir -p " & quoted form of posixFolder
end if
-- delete stray printer queue information file
try
do shell script "rm " & quoted form of (posixFolder & "/QueueName.txt")
end try
-- test for setupPDF alias file
set makeAlias to 0
if doPrinterSetup is 0 then
try
do shell script "ls -a " & quoted form of (posixFolder & "/MakePdfAlias")
set makeAlias to 1
on error
set makeAlias to 0
end try
if makeAlias is 1 then
try
do shell script "rm " & quoted form of (posixFolder & "/MakePdfAlias")
end try
my makePdfShortcut()
end if
end if
end setDataFolder
on writeOptionFiles()
if wpStartup is "true" then
try
do shell script "rm" & space & quoted form of (posixFolder & "/NoStartWP")
end try
else if wpStartup is "false" then
try
do shell script "echo ContentOfNoStartWPFile > " & quoted form of (posixFolder & "/NoStartWP")
on error errMsg
tell me to activate
display dialog errMsg
end try
end if
end writeOptionFiles
-- undocumented feature that adds disk image to self-contained sheepvm
on transferData(filesToOpen)
set fileCount to count of filesToOpen
----
set unixFolderCharCount to (count characters of unixFolder)
set fileList to ""
repeat with i in filesToOpen
set i to i as string
if (i contains ".dsk") or (i contains ".dmg") then
my transferImage(i)
end if
if not (i contains unixFolder) then
tell application "Finder" to set thisPosixName to POSIX path of (i as alias)
tell me to activate
display dialog "The file “" & thisPosixName & "” is not in the folder “" & unixPosixPath & "”, which corresponds to the “Unix” folder in the WPMacApp." & return & return & "The WPMacApp cannot access the file in its current location." & return & return & "Shall I open the folder “" & unixPosixPath & "” in the OS X Finder so that you can move the file into it?" buttons {"Yes, open the folder", "No, cancel"} default button 1 with icon caution with title msgTitle
if button returned of result is "Yes, open the folder" then
(*
do shell script "open " & quoted form of unixPosixPath
tell me to activate
display dialog "Please move the file “" & thisPosixName & "” to the folder “" & unixPosixPath & "”." & return & return & "After moving the file, double-click it to open it in the WPMacApp." buttons {"OK"} with title msgTitle with icon alias ":System:Library:CoreServices:CoreTypes.bundle:Contents:Resources:OpenFolderIcon.icns" giving up after 10
*)
tell application "Finder"
activate
if front Finder window exists then
set this_folder to (the target of the front window) as alias
set {x1, y1} to position of front window
make new Finder window to this_folder
set position of front window to {(x1 + 50), (y1 + 150)} --This offsets the new window more than the average Finder tiling does
set target of front Finder window to (POSIX file unixPosixPath as text)
else
open (POSIX file unixPosixPath as text)
end if
display dialog "Please move the file “" & thisPosixName & "” to the folder “" & unixPosixPath & "”." & return & return & "After moving the file, double-click it to open it in the WPMacApp." buttons {"OK"} with title msgTitle with icon alias ":System:Library:CoreServices:CoreTypes.bundle:Contents:Resources:OpenFolderIcon.icns" giving up after 10
end tell
end if
error number -128
else
set thePosPath to POSIX path of i
set fileOnlyName to do shell script "basename " & quoted form of thePosPath
set nameCount to (count characters of fileOnlyName)
if nameCount is less than 32 then
else
if ssRunning is false then
if fileCount is greater than 1 then
set dlgButtons to {"OK"}
else
set dlgButtons to {"Open the WPMacApp", "Cancel"}
end if
else
set dlgButtons to {"OK"}
end if
-- this tests for filename too long for OS 9
set runCount to 0
set aliasForList to ""
bigName()
copy aliasForList to i
set i to i as string
end if
-----
set iCount to (count characters of i)
if iCount is greater than 0 then
set netPath to text (unixFolderCharCount + 1) thru iCount of i
if netPath starts with ":" then
else
set netPath to ":" & netPath
end if
set unixPath to "Unix" & netPath -- removed ":" after Unix
set fileList to fileList & unixPath & return
end if
end if
end repeat
do shell script "echo " & quoted form of fileList & " >> " & quoted form of (posixFolder & "/wpFileList")
quit
end transferData
-------------------------------------------------------------
-- subroutines for dealing with old printing system
on removePrintSystem()
-- original use: if Unix folder has changed between home and documents,
--remove printing system from other folder;
-- Now revised to remove folder action script to avoid conflicts
tell application "Finder"
set ppExists to no
if exists folder (otherUnix & ".WPTransfer") then
set ppExists to yes
try
set otherPrintPath to alias (otherUnix & ".WPTransfer") as string
on error
tell me to activate
display dialog "Can't find old print path."
end try
end if
try
if exists folder (scriptPath & "Folder Action Scripts") then
set userScriptPath to alias (scriptPath & "Folder Action Scripts") as string
end if
end try
end tell
set actionScript to "WPTransferFolderScript.scpt"
tell application "System Events"
try
set curScripts to (attached scripts of otherPrintPath) as string
if curScripts contains actionScript then
if ppExists = yes then
try
tell folder action ".WPTransfer"
set enabled to false
set enabled of script "WPTransferFolderScript.scpt" to false
end tell
end try
try
-- Detaches the Folder Action from the folder
remove action from otherPrintPath using action name actionScript
end try
end if
end if
end try
end tell
tell application "Finder"
if exists file actionScript then
delete file actionScript
end if
(*
-- if PrintFiles folder is empty, then delete it !!!
if ppExists = yes then
set ppCount to count of (files in folder otherPrintPath)
if ppCount = 0 then
delete otherPrintPath
else
set dialogText to "The hidden “.WPTransfer” folder in your user folder contains files that you may want to save." & return & return & "The folder will now open. Move any files you wish to keep, then delete this folder."
tell me to activate
display dialog dialogText buttons {"OK"} default button 1 with icon caution
open otherPrintPath
end if
end if
*)
end tell
end removePrintSystem
-------------------------------------------------------------
-- subroutine for adding Spotlight and QuickLook filters
on addPlugins()
set userLibAlias to userLibPath as alias
set sysVers to ((system attribute "sysv") mod 4096 div 16)
set sysLibPath to path to library folder from local domain as text
set sysLibAlias to sysLibPath as alias
set spotFile to (path to me) & "Contents:Resources:Files:WordPerfect.mdimporter" as string
set spotFile to spotFile as alias
set quickFile to (path to me) & "Contents:Resources:Files:WordPerfect.qlgenerator" as string
set quickFile to quickFile as alias
set oldFileDate to date "Wednesday, February 1, 2012 at 12:00:00 AM"
try
set sysSpotFolder to sysLibPath & "Spotlight" as alias
end try
set spotFound to true
try
set sysSpotFolder to sysLibPath & "Spotlight" as alias
on error
set spotFound to false
end try
set wpSpotFound to false
if spotFound is true then
set sysSpotPath to sysSpotFolder as text
set sysWPSpot to sysSpotPath & "WordPerfect.mdimporter"
tell application "System Events"
if exists file sysWPSpot then
if creation date of file sysWPSpot comes after oldFileDate then
set wpSpotFound to true
end if
end if
end tell
end if
if wpSpotFound is false then
set userSpotFolderFound to true
try
set userSpotFolder to (userLibPath & "Spotlight") as alias
on error
set userSpotFolderFound to false
end try
if userSpotFolderFound is true then
set userSpotPath to userSpotFolder as text
set userWPSpot to userSpotPath & "WordPerfect.mdimporter"
tell application "System Events"
if exists file userWPSpot then
if creation date of file userWPSpot comes after oldFileDate then
set wpSpotFound to true
end if
end if
end tell
end if
end if
if wpSpotFound is false then
tell me to activate
display dialog "I will now install (or update) the WordPerfect Spotlight filter by Gero Herrmann." & return & return & "The Finder may prompt you for your password." buttons {"OK"} with title msgTitle giving up after 5
-- try to copy file to system folder, if fails, to user folder
try
tell application "Finder"
set copy_file to duplicate spotFile to folder sysSpotFolder with replacing
end tell
on error
tell application "Finder"
try
make new folder at folder userLibAlias with properties {name:"Spotlight"}
end try
set userSpotFolder to userLibPath & "Spotlight" as alias
try
set copy_file to duplicate spotFile to folder userSpotFolder with replacing
end try
end tell
end try
end if
try
set sysQuickFolder to sysLibPath & "QuickLook" as alias
end try
set QuickFound to true
try
set sysQuickFolder to sysLibPath & "QuickLook" as alias
on error
set QuickFound to false
end try
set wpQuickFound to false
if QuickFound is true then
set sysQuickPath to sysQuickFolder as text
set sysWPQuick to sysQuickPath & "WordPerfect.qlgenerator"
tell application "System Events"
set wpQuickFound to false
if exists file sysWPQuick then
if creation date of file sysWPQuick comes after oldFileDate then
set wpQuickFound to true
end if
end if
end tell
end if
if wpQuickFound is false then
set userQuickFolderFound to true
try
set userQuickFolder to userLibPath & "QuickLook" as alias
on error
set userQuickFolderFound to false
end try
if userQuickFolderFound is true then
set userQuickPath to userQuickFolder as text
set userWPQuick to userQuickPath & "WordPerfect.qlgenerator"
tell application "System Events"
set wpQuickFound to false
if exists file userWPQuick then
if creation date of file userWPQuick comes after oldFileDate then
set wpQuickFound to true
end if
end if
end tell
end if
end if
if wpQuickFound is false then
tell me to activate
display dialog "I will now install (or update) the WordPerfect QuickLook filter by Gero Herrmann." & return & return & "The Finder may prompt you for your password." buttons {"OK"} with title msgTitle giving up after 5
try
tell application "Finder"
set copy_file to duplicate quickFile to folder sysQuickFolder with replacing
end tell
on error
tell application "Finder"
try
make new folder at folder userLibAlias with properties {name:"QuickLook"}
end try
set userQuickFolder to userLibPath & "QuickLook" as alias
try
set copy_file to duplicate quickFile to folder userQuickFolder with replacing
end try
end tell
end try
end if
end addPlugins
-------------------------------------------------------------
-- Other Subroutines
on getDspSizes()
set dspsizes to {}
set toolpath to ((path to me) as Unicode text) & "Contents:Resources:dspsizes"
set command to (quoted form of POSIX path of toolpath)
set output to paragraphs of (do shell script command)
repeat with dspinfo in output
set dspsizes to dspsizes & {({word 1, word 3} of dspinfo)}
end repeat
end getDspSizes
on simple_sort(my_list)
set the index_list to {}
set the sorted_list to {}
repeat (the number of items in my_list) times
set the low_item to ""
repeat with i from 1 to (number of items in my_list)
if i is not in the index_list then
set this_item to item i of my_list as text
if the low_item is "" then
set the low_item to this_item
set the low_item_index to i
else if this_item comes before the low_item then
set the low_item to this_item
set the low_item_index to i
end if
end if
end repeat
set the end of sorted_list to the low_item
set the end of the index_list to the low_item_index
end repeat
return the sorted_list
end simple_sort
on errorQuit(dialogText) -- Fatal error, quitting script
tell me to activate
display dialog dialogText buttons {"OK"} default button 1 with icon stop with title msgTitle giving up after 5
error number -128
end errorQuit
on cautionQuit(dialogText) -- Only a caution, possibly quit?
tell me to activate
display dialog dialogText buttons {"Continue?", "Quit"} default button 2 with icon caution with title msgTitle
set userChoice to button returned of result
if userChoice = "Quit" then
error number -128
end if
end cautionQuit
on bigName()
set runCount to runCount + 1
if runCount = 1 then set actionChoice to "copy"
set fullPathLength to (count characters of thePosPath)
set folderString to text 1 thru (fullPathLength - nameCount) of thePosPath
copy thePosPath to oldName
set newName to text 1 thru 31 of fileOnlyName
set changeToName to newName & "X" -- dummy variable to get into repeat loop
set addText to ""
set tries to 0
repeat
tell (count characters of changeToName) to if it > 0 and it < 32 then exit repeat
if tries > 0 and (count characters of changeToName) > 0 then
set addText to "Please enter a name with no more than 31 characters. The name you entered has " & (count characters of changeToName) & " characters." & return & return
else
set addText to ""
end if
set defBtn to 2
if actionChoice = "rename" then
set defBtn to 3
end if
tell me to activate
set fixName to display dialog "The file you selected cannot be opened in WPMacApp because its name has more than 31 characters: " & return & return & "“" & fileOnlyName & "”" & return & return & "If you choose, I can copy this file to a new file with a shorter name, or I can rename the original file. I will then try to open the copied or renamed file in WPMacApp." & return & return & "To copy or rename this file, accept or change the new name shown below. Do not enter more than 31 characters." & return & return & "Click “Skip this file” to continue without changing or opening this file." & return & return & "Click “Copy to new file” to create a copy of the file in the same folder as the original, with the new name that you enter below; the original file will not be changed." & return & return & "Click “Rename existing file” to rename the original file with the new name that you enter below." & return & return & addText & "Enter a new name below:" default answer newName buttons {"Skip this file", "Copy to new file", "Rename existing file"} default button defBtn with icon caution with title msgTitle
set changeToName to text returned of the result
set tries to tries + 1
if button returned of fixName = "Skip this file" then
set aliasForList to ""
return
end if
if button returned of fixName = "Copy to new file" then
set actionChoice to "copy"
end if
if button returned of fixName = "Rename existing file" then
set actionChoice to "rename"
end if
end repeat
set theQuestion to ""
if actionChoice = "copy" then
set theQuestion to "Proceed with copying your original file:" & return & return & "“" & fileOnlyName & "”" & return & return & "to a new file named:" & return & return & "“" & changeToName & "”"
end if
if actionChoice is "rename" then
set theQuestion to "Proceed with renaming your file:" & return & return & "“" & fileOnlyName & "”" & return & return & "with the new name:" & return & return & "“" & changeToName & "”"
end if
set icnPath to (path to "csrv")'s POSIX path & "CoreTypes.bundle/Contents/Resources/"
tell me to activate
set confirmChange to display dialog theQuestion buttons {"No, choose a different name", "Yes, continue"} default button 2 with icon questionIcon with title msgTitle
-- OR with icon POSIX file (icnPath & "MigrateAsst.icns")
if button returned of confirmChange is "No, choose a different name" then
set changeToName to ""
bigName()
end if
if button returned of confirmChange is "Yes, continue" then
set outputFile to folderString & changeToName
set targetExists to true
try
do shell script "ls " & quoted form of outputFile
on error
set targetExists to false
end try
if targetExists is true then
tell me to activate
set overWrite to display dialog "Target file:" & return & return & "“" & changeToName & "”" & return & return & "already exists. Overwrite?" buttons {"No", "Yes"} default button 2 with icon caution with title msgTitle
if button returned of overWrite is "No" then
set changeToName to ""
set outputFile to ""
bigName()
end if
end if
if actionChoice = "rename" then
set shellVerb to "mv"
end if
if actionChoice = "copy" then
set shellVerb to "cp"
end if
do shell script shellVerb & space & quoted form of thePosPath & space & quoted form of outputFile
set aliasForList to POSIX file outputFile
end if
end bigName
-------------------------------------------------------------
-- subroutines for setting up local printers
on localPrinter()
-- turn on lpd for remote printing
try
set cupsctlString to do shell script "cupsctl | grep -i \"BrowseLocalProtocols\""
end try
if cupsctlString contains "lpd" then
else
if Mountain is 1 then
do shell script "cupsctl 'BrowseLocalProtocols=\"dnssd lpd\"'"
else
do shell script "cupsctl 'BrowseLocalProtocols=\"cups dnssd lpd\"'"
end if
end if
end localPrinter
on prepareIPPrinter()
tell me to activate
display dialog "This option is to be used only to set up WPMac to print to a networked PostScript printer." & return & return & "It will not work with a printer connected by a USB cable." & return & return & "Your printer must have an IP address on your ethernet or wireless network." buttons {"Continue setup", "Cancel"} default button 2 with title msgTitle
if button returned of result is "Cancel" then
display dialog "Quitting. Please launch me again." buttons {"OK"} with title msgTitle giving up after 20
end if
set noPrinters to 0
try
set printerNames to (do shell script "lpstat -l -p | grep -i Description: |awk -F'Description: ' '{print $2}' ") -- as list
on error
set noPrinters to 1
end try
if printerNames = "" then
set noPrinters to 1
end if
if noPrinters is 0 then
try
set queueNames to (do shell script "lpstat -a | awk -F' accepting' '{print $1}'") -- as list
on error
set noPrinters to 1
end try
end if
if noPrinters = 0 then
try
set printerList to (every paragraph of printerNames) as list
set queueList to (every paragraph of queueNames) as list
on error
tell me to activate
display dialog "No OS X printers available to set up." & return & return & "When you have installed a networked PostScript printer and want to use it in WordPerfect, hold down the Option key when launching this application and select the Set Up Networked PostScript Printer option again." buttons {"OK", "Quit"} with title msgTitle
if button returned of result is "Quit" then
error number -128
end if
try
do shell script "echo " & theQueue & " > " & quoted form of (posixFolder & "/SetupDone")
end try
return
end try
else
tell me to activate
display dialog "No OS X printers available to set up." & return & return & "When you have installed a networked PostScript printer and want to use it in WordPerfect, hold down the Option key when launching this application and select the Set Up Networked PostScript Printer option again." buttons {"OK", "Quit"} with title msgTitle
if button returned of result is "Quit" then
error number -128
end if
try
do shell script "echo " & theQueue & " > " & quoted form of (posixFolder & "/SetupDone")
end try
return
end if
if printerList is "" then
tell me to activate
display dialog "No printers available to set up." & return & return & "When you have installed a networked PostScript printer and want to use it in WordPerfect, hold down the Option key when launching this application and select the Set Up Networked PostScript printer option again." buttons {"OK", "Quit"} with title msgTitle
if button returned of result is "Quit" then
error number -128
end if
try
do shell script "echo " & theQueue & " > " & quoted form of (posixFolder & "/SetupDone")
end try
return
end if
tell me to activate
set thePrinter to (choose from list printerList with title "Printers" with prompt "Choose a networked PostScript printer to use with WordPerfect:")
-- removed from previous parenthesis: default items {item 1 of printerList}
if thePrinter is false then
tell me to activate
display dialog "Printer setup cancelled. If you press OK or wait a few seconds, I will continue to launch the WPMacApp." buttons {"OK", "Cancel"} default button 1 with title msgTitle giving up after 5
if button returned of the result is "Cancel" then
error number -128
end if
set doPrinterSetup to 0
return
else
set thePrinter to item 1 of thePrinter
set item_num to my list_position(thePrinter, printerList)
set theQueue to item item_num in queueList
end if
if ":" is in thePrinter then
display dialog "The printer name may not include a colon. Please rename the printer in OS X and try again." buttons {"OK"} with title msgTitle giving up after 20
error number -128
end if
set dnsURL to do shell script "lpstat -v " & theQueue
set dnsString to (do shell script "perl -e 'use URI::Escape; print uri_unescape(\"" & dnsURL & "\")';")
try
set thisApp to path to me as text
set bonjourEventsPath to (thisApp & "Contents:Resources:Files:Bonjour Events.app")
set bonjourEventsPosix to quoted form of (POSIX path of bonjourEventsPath)
set bonjourEventsAlias to bonjourEventsPath as alias
-- tell application "Bonjour Events"
tell application id "com.klieme.bonjourevents"
scan for type "_ipp._tcp" given «class data»:"local"
repeat until browser finished
delay 0.5
end repeat
if (count services) > 0 then
set nameList to name of services
set addressList to IPv4 address of services
else
set nameList to {}
set addressList to {}
end if
quit
-- Bonjour Events quits automatically after 2 minutes of inactivity
end tell
on error errorMessage number errorNumber
tell me to activate
display dialog "An error occurred: " & errorMessage & " (" & errorNumber & ")"
end try
set ipPrinterFound to false
repeat with currentItem in nameList
if currentItem is in dnsString then
set ipPrinterFound to true
set currentListItem to currentItem as item
set dnsNumber to my list_position(currentListItem, nameList)
set printerIP to item dnsNumber in addressList
-- tell me to activate
-- display dialog currentItem & return & return & "has the IP address:" & space & printerIP
exit repeat
end if
end repeat
if ipPrinterFound is false then
display dialog thePrinter & " does not seem to support IP printing." & return & return & "Quitting. Please launch me again." with title msgTitle buttons {"OK"} giving up after 20
error number -128
end if
do shell script "echo " & printerIP & " > " & quoted form of (posixFolder & "/IPAddress.unix")
do shell script "echo " & thePrinter & " >> " & quoted form of (posixFolder & "/IPAddress.unix")
do shell script "cd " & quoted form of posixFolder & " ; tr '\\n' '\\r' < IPAddress.unix > IPAddress.txt"
do shell script "rm " & quoted form of (posixFolder & "/IPAddress.unix")
-- debug end
end prepareIPPrinter
on setupPrinter()
if doPrinterSetup is 1 then
if enableLocalPtr is 1 then
my localPrinter()
end if
set noPrinters to 0
try
set printerNames to (do shell script "lpstat -l -p | grep -i Description: |awk -F'Description: ' '{print $2}' ") -- as list
on error
set noPrinters to 1
end try
if printerNames = "" then
set noPrinters to 1
end if
if noPrinters is 0 then
try
set queueNames to (do shell script "lpstat -a | awk -F' accepting' '{print $1}'") -- as list
on error
set noPrinters to 1
end try
end if
if noPrinters = 0 then
try
set printerList to (every paragraph of printerNames) as list
set queueList to (every paragraph of queueNames) as list
on error
tell me to activate
display dialog "No OS X printers available to set up." & return & return & "When you have installed a printer and want to use it in WordPerfect, hold down the Option key when launching this application and select the printer options again." buttons {"OK", "Quit"} with title msgTitle
if button returned of result is "Quit" then
error number -128
end if
try
do shell script "echo " & theQueue & " > " & quoted form of (posixFolder & "/SetupDone")
end try
return
end try
else
tell me to activate
display dialog "No OS X printers available to set up." & return & return & "When you have installed a printer and want to use it in WordPerfect, hold down the Option key when launching this application and select the printer options again." buttons {"OK", "Quit"} with title msgTitle
if button returned of result is "Quit" then
error number -128
end if
try
do shell script "echo " & theQueue & " > " & quoted form of (posixFolder & "/SetupDone")
end try
return
end if
if printerList is "" then
tell me to activate
display dialog "No printers available to set up." & return & return & "When you have installed a printer and want to use it in WordPerfect, hold down the Option key when launching this application and select the printer options again." buttons {"OK", "Quit"} with title msgTitle
if button returned of result is "Quit" then
error number -128
end if
try
do shell script "echo " & theQueue & " > " & quoted form of (posixFolder & "/SetupDone")
end try
return
end if
if the (count of printerList) is 1 then
set thePrinter to {item 1 of printerList} as string
set theQueue to {item 1 of queueList} as string
if ":" is in thePrinter then
display dialog "The printer name may not include a colon. Please rename the printer in OS X and try again." buttons {"OK"} with title msgTitle giving up after 20
error number -128
end if
-- if theQueue is "PDFwriter" then set chosePdfwriter to 1
tell me to activate
display dialog "I will now set up " & thePrinter & " for use in WordPerfect." buttons {"OK"} with title msgTitle giving up after 5
else
tell me to activate
set thePrinter to (choose from list printerList with title "Printers" with prompt "Choose a printer to use with WordPerfect:")
-- removed from previous parenthesis: default items {item 1 of printerList}
if thePrinter is false then
tell me to activate
display dialog "Printer setup cancelled. If you press OK or wait a few seconds, I will continue to launch the WPMacApp." buttons {"OK", "Cancel"} default button 1 with title msgTitle giving up after 5
if button returned of the result is "Cancel" then
error number -128
end if
set doPrinterSetup to 0
return
else
set thePrinter to item 1 of thePrinter
set item_num to my list_position(thePrinter, printerList)
set theQueue to item item_num in queueList
end if
if ":" is in thePrinter then
display dialog "The printer name may not include a colon. Please rename the printer in OS X and try again." buttons {"OK"} with title msgTitle giving up after 20
error number -128
end if
end if
do shell script "echo " & theQueue & " > " & quoted form of (posixFolder & "/QueueName.unix")
do shell script "echo " & thePrinter & " >> " & quoted form of (posixFolder & "/QueueName.unix")
do shell script "cd " & quoted form of posixFolder & " ; tr '\\n' '\\r' < QueueName.unix > QueueName.txt"
do shell script "rm " & quoted form of (posixFolder & "/QueueName.unix")
tell application "System Events"
if Mavericks is 0 then
if UI elements enabled then
else
my setupUniversalAccess()
end if
else
my setupMavericksAccess()
end if
end tell
-- to do: add fix for wrong pane opening in "System Preferences"
tell application "System Preferences"
activate
reveal anchor "Main" of pane id "com.apple.preferences.sharing"
end tell
tell application "System Events"
tell process "System Preferences"
tell table 1 of scroll area 1 of group 1 of window 1
tell (1st row whose value of static text 1 is "Printer Sharing")
set selected to true
if value of checkbox 1 is 0 then
click checkbox 1
end if
end tell
end tell
delay 0.5
(* -- leave this here in case of future changes
if Leopard is 1 then
set scrollArea to 2
else
set scrollArea to 3
end if
*)
tell table 1 of scroll area 3 of group 1 of window 1
tell (1st row whose value of text field 1 is thePrinter)
set selected to true
if value of checkbox 1 is 0 then
click checkbox 1
end if
end tell
end tell
end tell
end tell
tell me to activate
display dialog "Please confirm (1) that Printer Sharing is checked in the column on the left and (2) that " & thePrinter & " is checked in the list of printers in the Printer Sharing menu, then click OK." & return & return & "You must add the necessary checkmarks if they are not present." with title msgTitle
tell application "System Preferences" to quit
set doPrinterSetup to 0
end if
-- debug
end setupPrinter
on list_position(this_item, this_list)
repeat with i from 1 to the count of this_list
if item i of this_list is this_item then return i
end repeat
return 0
end list_position
on setupPdf()
if doPdfSetup is 1 then
if enableLocalPtr is 1 then
my localPrinter()
end if
-- test whether PDFwriter is installed
try
do shell script "ls -a /Library/Printers/Lisanet/PDFwriter/pdfwriter"
on error
-- install PDFwriter if it's not already installed
(*
if Lion is 1 then
display dialog "PDFwriter seems not to be installed. This is the OS X software required for use with the WPMacApp PDF writer." & return & return & "Under OS X 10.7 or later, I strongly recommend that you install PDFwriter separately." & return & return & "I can take you to the download page for the PDFwriter Installer." & return & return & "After installing PDFwriter, complete its installation by printing any document to it from OS X, and then launch this WPMac appplication again (holding down Option-Cmd when starting it) to complete the WordPerfect setup for PDFwriter." buttons {"Open download page", "Cancel"} with title msgTitle
if button returned of result is "Open download page" then
open location "http://sourceforge.net/projects/pdfwriterformac/"
end if
error number -128
end if
*)
tell me to activate
display dialog "Please follow the prompts to install PDFwriter. Accept the default settings." buttons {"OK", "Cancel"} default button 1 with title msgTitle giving up after 20
if button returned of the result is "Cancel" then
tell me to activate
display dialog "Script cancelled." buttons {"OK"} with title msgTitle giving up after 10 with icon stop
error number -128
end if
tell application "System Events"
set procList to (name of every process)
end tell
if procList contains "Installer" then
tell me to activate
display dialog "Please quit any installation program that may be running and try again." buttons {"OK"} giving up after 10
error number -128
end if
--tell application "Finder" to open pdfPkg
do shell script "open " & pdfPkgPath
set pdfRunning to true
repeat until pdfRunning is false
tell application "System Events"
set procList to (name of every process)
end tell
if procList contains "Installer" then
else
set pdfRunning to false
end if
delay 1
end repeat
end try
try
do shell script "lpadmin -p PDFwriter -v PDFwriter:/ -m PDFwriter.ppd -E -o printer-is-shared=true"
do shell script "lp -d PDFwriter -o landscape " & readmePOSIX
on error
tell me to activate
display dialog "Error creating PDFwriter printer. Exiting." with title msgTitle buttons {"OK"} giving up after 10
error number -128
end try
set pdfOK to 1
try
set pdfOK to (do shell script "lpstat -p | grep -c 'PDFWriter'")
on error errMsg
if errMsg is "0" then set pdfOK to 0
end try
if pdfOK is 0 then
tell me to activate
display dialog "PDFwriter installation seems not to have completed. Please restart this application and start again." buttons {"OK"} with title msgTitle giving up after 5
error number -128
end if
set thePrinter to "PDFwriter" as string
set theQueue to "PDFwriter" as string
do shell script "echo " & theQueue & " > " & quoted form of (posixFolder & "/QueueName.unix")
do shell script "echo " & thePrinter & " >> " & quoted form of (posixFolder & "/QueueName.unix")
do shell script "cd " & quoted form of posixFolder & " ; tr '\\n' '\\r' < QueueName.unix > QueueName.txt"
do shell script "rm " & quoted form of (posixFolder & "/QueueName.unix")
tell application "System Events"
if Mavericks is 0 then
if UI elements enabled then
else
my setupUniversalAccess()
end if
else
my setupMavericksAccess()
end if
end tell
tell application "System Preferences"
activate
reveal anchor "Main" of pane id "com.apple.preferences.sharing"
end tell
tell application "System Events"
tell process "System Preferences"
tell table 1 of scroll area 1 of group 1 of window 1
tell (1st row whose value of static text 1 is "Printer Sharing")
set selected to true
if value of checkbox 1 is 0 then
click checkbox 1
end if
end tell
end tell
delay 0.5
(*
if Leopard is 1 then
set scrollArea to 2
else
set scrollArea to 3
end if
*)
tell table 1 of scroll area 3 of group 1 of window 1
tell (1st row whose value of text field 1 is "PDFwriter")
set selected to true
if value of checkbox 1 is 0 then
click checkbox 1
end if
end tell
end tell
end tell
end tell
tell me to activate
display dialog "Please confirm that " & thePrinter & " is checked in the list of printers in the Printer Sharing menu, then click OK." & return & return & "Add a checkmark if it is not present."
tell application "System Preferences" to quit
end if
set doPdfSetup to 0
end setupPdf
on makePdfShortcut()
-- display dialog "If you do not already have an alias to the output directory for PDF files created by the PDFwriter driver in the WPMacApp, I will create one for you." & return & return & "Please wait while I search for an existing alias." buttons {"OK"} with title msgTitle giving up after 7
set searchLoc to "-onlyin ~/ "
set prefixCmd to "mdfind "
-- 'Alias' is in (escaped) double quotes
-- the command is in single quotes
-- the string is in double quotes
set suffixCmd to "'kMDItemKind == \"Alias\"'"
-- use Spotlight to find aliases
set myCommand to prefixCmd & searchLoc & suffixCmd
set theList to paragraphs of (do shell script myCommand)
set foundAlias to 0
tell application "Finder"
repeat with p in theList
set thisAlias to p as POSIX file as alias -- coerce Unicode text to POSIX file path to AppleScript alias
try
if original item of thisAlias is folder "anonymous users" of folder "PDFwriter" of folder "spool" of folder "var" of item "private" of startup disk then
set foundAlias to 1
set aliasPath to p as string
exit repeat
end if
end try
end repeat
end tell
if foundAlias is 1 then
else
tell application "Finder"
try
set pdfFolder to (POSIX file "/private/var/spool/PDFwriter/anonymous users") as alias
on error
tell me to activate
display dialog "PDF output folder not found. Please reinstall PDFwriter."
end try
set madeAlias to 0
try
make new alias file at (path to the desktop folder from user domain) to pdfFolder with properties {name:"WPMac-PDF"}
set madeAlias to 1
on error
tell me to activate
display dialog "Could not create an alias to the PDF output folder"
end try
end tell
if madeAlias is 1 then
tell me to activate
display dialog "I created an alias on your desktop named WPMac-PDF. This is an alias to the folder that contains the output of the PDFwriter printer in the WPMacApp. You may move this alias anywhere you choose." & return & return & "If you choose to delete the alias, you may find the PDF output at" & return & return & "/Users/Shared/PDFwriter/anonymous users" buttons {"OK"} with title msgTitle
end if
end if
end makePdfShortcut
on printerPrompt(ptrFromWhere)
if suppressPrinterPrompt is 1 then
if Mountain is 1 then
tell me to activate
display dialog "Under OS X 10.8 or later, the only reliable method of printing from the WPMacApp is through the default “Print or Create PDF from OS X” desktop printer." & return & return & "Please read the “Read Me First.pdf” file for detailed instructions on printing." buttons {"OK"} with title msgTitle giving up after 10
try
do shell script "echo ContentOfNeverAskFile > " & quoted form of (posixFolder & "/NeverAsk")
end try
end if
else
set doPdfSetup to 0
set ptrButton to ""
tell me to activate
display dialog "Set up an OS X printer or a PDF writer for use in the WPMacApp?" & return & return & "(To install the PDF writer or a printer at a later time, hold down the Option key when starting the application.)" buttons {"Setup printer", "Setup PDF writer", "Not now"} default button 1 with title msgTitle
set ptrButton to button returned of the result
if ptrButton is "Setup printer" then
set doPrinterSetup to 1
set doPdfSetup to 0
else
if ptrButton is "Setup PDF writer" then
set doPrinterSetup to 0
set doPdfSetup to 1
end if
end if
end if
if doPrinterSetup is 1 then
my setupPrinter()
else if doPdfSetup is 1 then
my setupPdf()
end if
end printerPrompt
on setupUniversalAccess()
tell application "System Events"
if UI elements enabled then
else
-- GUI scripting not enabled; display an alert
tell me to activate
display dialog "Before you can use this option, I must turn on the OS X feature “Enable access for assistive devices”." & return & return & "May I turn on this feature?" & return & return & "If you answer Yes, OS X will prompt you for a password." buttons {"No", "Yes"} default button 2 with icon caution with title msgTitle
set enableGUI to button returned of result
if enableGUI is "No" then
tell application "System Preferences"
activate
set current pane to pane id "com.apple.preference.universalaccess"
end tell
tell me to activate
display dialog "You may enable the required feature in System Preferences, in the Universal Access pane, by adding a checkbox next to “Enable access for assistive devices”." & return & return & "This application will now close." buttons {"OK"} default button 1 with icon caution with title msgTitle
quit
error number -128
else
tell application "System Events" to set UI elements enabled to true
end if
end if
end tell
delay 1
end setupUniversalAccess
on setupMavericksAccess()
-- debug
(*
tell me to activate
display dialog "This feature is not currently available under OS X 10.9 Mavericks." & return & return & "With luck, it will be restored in a later version of this application." & return & return & "I will now close." buttons {"OK"} default button 1 with icon caution with title msgTitle
quit
error number -128
*)
tell application "System Events"
if UI elements enabled then
else
-- GUI scripting not enabled; display an alert
tell me to activate
display dialog "Before you can use this option, you must enable “Accessibility” for this application." & return & return & "May I turn on this feature?" & return & return & "If you answer Yes, OS X will present a prompt and open System Preferences. Click on the padlock at the lower left, enter your password, and check the box next to the name WPMacApp." buttons {"Cancel", "Yes"} default button 2 with icon caution with title msgTitle
set enableGUI to button returned of result
if enableGUI is "Cancel" then
error number -128
else
tell application "System Preferences"
activate
reveal anchor 5 of pane id "com.apple.preference.security"
end tell
tell me to activate
display dialog "Enable accessibility for this application in System Preferences, then return to the options menu." buttons {"OK"} with title msgTitle giving up after 10
end if
end if
end tell
delay 1
-- end debug
end setupMavericksAccess
on getMyName()
-- in case we need to use selected unix folder
set vmPath to (path to me) & "Contents:Resources:Files:MacOS.sheepvm" as string
set vmFile to vmPath as alias
set vmPosix to (POSIX path of vmFile) as string
-- set extfsPosix to (vmPosix & "extfsposix")
set extfsPath to (vmPosix & "extfspath")
tell application "System Events" to set myName to name of (get properties of (path to me))
set myName to text 1 thru -5 of myName
set extraString to " "
if myName contains "setup" then
set extraString to return & return & "Remove “Setup” from my name to hide this menu next time."
set fromWhere to "From getMyName"
my askforUnix(extraString, fromWhere)
end if
end getMyName
on askforUnix(extraString, fromWhere)
tell me to activate
display dialog "Select an OS X folder to use as the “Unix” folder in SheepShaver." & extraString buttons {"Documents folder", "Home folder", "Choose another…"} default button 1 with title msgTitle
if button returned of result is "Documents folder" then
set useHomeFolder to 0
try
-- do shell script "rm " & quoted form of extfsPosix
do shell script "rm " & quoted form of extfsPath
end try
else if button returned of result is "Home folder" then
set useHomeFolder to 1
try
-- do shell script "rm " & quoted form of extfsPosix
do shell script "rm " & quoted form of extfsPath
end try
else if button returned of result is "Choose another…" then
try
set myUnix to choose folder with prompt "Select a folder for the “Unix” folder in SheepShaver and click Choose:"
set unixPath to myUnix as text
-- do shell script "echo " & quoted form of unixPosixPath & " > " & quoted form of extfsPosix
do shell script "echo " & unixPath & " > " & quoted form of extfsPath
on error
-- if fromWhere is "From setOptions" then
-- my setOptions()
-- end if
end try
(*
-- set unixPosixPath to POSIX path of myUnix
set unixPath to myUnix as text
-- do shell script "echo " & quoted form of unixPosixPath & " > " & quoted form of extfsPosix
do shell script "echo " & unixPath & " > " & quoted form of extfsPath
*)
end if
if fromWhere is "From setOptions" then
my setOptions()
end if
end askforUnix
on transferImage(i)
tell application "Finder"
set dskName to name of (i as alias)
end tell
tell me to activate
display dialog dskName & " seems to be a disk image file. What do you want me to do with this file?" & return & return & "I can set it to be the boot disk of the WPMacApp, instead of the existing boot disk." & return & return & "Or I can add it to the WPMacApp as a second disk, retaining the existing boot disk." buttons {"Set as boot disk", "Keep existing and add new", "Cancel"} default button 3 with title msgTitle
if button returned of result is "Cancel" then
error number -128
-- replace existing disk
else if button returned of result is "Set as boot disk" then
set moveBootDisk to 0
display dialog "Which of these two steps do you want me to take?" & return & return & "Do you want me to replace the existing WPMacApp boot disk image file with the “" & dskName & "” disk image (and move the “" & dskName & "” disk image into the WPMacApp application bundle)?" & return & return & "Or do you want me to leave the “" & dskName & "” disk image where it is and set it to be the WPMacApp boot disk?" buttons {"Move disk to app", "Leave it and set as boot disk", "Cancel"} default button 3 with title msgTitle
if button returned of result is "Cancel" then
error number -128
else if button returned of result is "Move disk to app" then
set moveBootDisk to 1
end if
tell application "Finder" to set thisPosixName to POSIX path of (i as alias)
set macSystem to (path to me as text) & "Contents:Resources:Files:MacOS.sheepvm" as string
set macSystem to macSystem as alias
set oldPath to ((POSIX path of macSystem) & "WPMac86HD.dsk")
if moveBootDisk is 1 then
tell me to activate
display dialog "I will now move your existing boot disk to the trash and replace it with your “" & dskName & "” disk image. The “" & dskName & "” disk image will be moved into the WPMacApp application bundle." & return & return & "If you want to set the old boot disk as the non-booting second disk, then, after I quit, remove the “WPMac86HD.dsk” file from the trash and drop it on me to set it as the second disk." buttons {"OK", "Cancel"} default button 1 with title msgTitle
if button returned of result is "Cancel" then
error number -128
end if
try
do shell script "test -e " & quoted form of oldPath
on error
display dialog "Old system boot disk not found." buttons {"OK"} with title msgTitle giving up after 10
error number -128
end try
try
set oldPathAlias to (POSIX file oldPath) as alias
on error
display dialog "Can't create alias for old boot disk." buttons {"OK"} with title msgTitle giving up after 10
error number -128
end try
tell application "Finder"
try
delete oldPathAlias
on error
tell me to activate
display dialog "Error moving old disk image file to the trash." buttons {"OK"} with title msgTitle giving up after 10
error number -128
end try
end tell
tell me to activate
display dialog "Please wait a few seconds while I copy the file." & return & return & "I will reappear when the copy is complete." buttons {"OK"} with title msgTitle giving up after 2
try
do shell script "cp " & quoted form of thisPosixName & space & quoted form of oldPath
on error
tell me to activate
display dialog "Problem copying disk image file. Quitting." buttons {"OK"} with title msgTitle giving up after 10
error number -128
end try
tell me to activate
display dialog "The SheepShaver disk image file has been replaced with a copy of “" & dskName & "” disk image. The old disk image has been moved to the trash." & return & return & "Please restart me." & return & return & "If I fail to boot completely, press Ctrl-Esc to force me to quit and start me again." buttons {"OK"} with title msgTitle giving up after 10
error number -128
else
set prefsFile to (path to me as string) & "Contents:Resources:Files:MacOS.sheepvm:prefs" as string
set prefsFile to prefsFile as alias
set prefsPath to (POSIX path of prefsFile) as string
set savePath to ((POSIX path of prefsFile) & ".storage")
set tempPath to ((POSIX path of prefsFile) & ".tempfile")
set diskPath to ((POSIX path of prefsFile) & ".diskfile")
try
do shell script "cp " & quoted form of prefsPath & " " & quoted form of savePath
on error
set dialogText to "Problem backing up preferences file. No changes made."
end try
do shell script "grep -v '^disk' " & quoted form of prefsPath & " > " & quoted form of tempPath
do shell script "echo disk " & thisPosixName & ">> " & quoted form of diskPath
do shell script "cat " & quoted form of diskPath & space & quoted form of tempPath & " > " & quoted form of prefsPath
do shell script "rm " & quoted form of diskPath
do shell script "rm " & quoted form of tempPath
do shell script "rm " & quoted form of savePath
set oldBootDiskFound to 1
try
do shell script "test -e " & quoted form of oldPath
on error
set oldBootDiskFound to 0
end try
if oldBootDiskFound is 1 then
display dialog "Shall I move the old boot disk in the WPMacApp to the trash?" & return & return & "If you click No, the old boot disk image file will remain inside the WPMacApp but will not be used for any purpose." & return & return & "If you want to set the old boot disk as the non-booting second disk, click Yes, then, after I quit, remove the “WPMac86HD.dsk” file from the trash and drop it on me to set it as the second disk." buttons {"Yes, move to trash", "No, leave it in the app"} default button 1 with title msgTitle
if button returned of result is "Yes, move to trash" then
try
set oldPathAlias to (POSIX file oldPath) as alias
on error
display dialog "Can't create alias for old boot disk." buttons {"OK"} with title msgTitle giving up after 10
error number -128
end try
tell application "Finder"
try
delete oldPathAlias
on error
tell me to activate
display dialog "Error moving old disk image file to the trash." buttons {"OK"} with title msgTitle giving up after 10
error number -128
end try
end tell
end if
end if
tell me to activate
display dialog "The disk image file that you dropped on me will now be the boot disk image in the WPMacApp." & return & return & "Please restart me." & return & return & "If I fail to boot completely, press Ctrl-Esc to force me to quit and start me again." buttons {"OK"} with title msgTitle giving up after 10
error number -128
end if
-- keep existing and add new
else if button returned of result is "Keep existing and add new" then
set copyNewDisk to 0
display dialog "Do you want me to copy the “" & dskName & "” disk image into the WPMacApp application bundle or leave it where it is and link it to application?" buttons {"Copy disk to app", "Leave it and link it", "Cancel"} default button 3 with title msgTitle
if button returned of result is "Cancel" then
error number -128
else if button returned of result is "Copy disk to app" then
set copyNewDisk to 1
end if
tell application "Finder" to set thisPosixName to POSIX path of (i as alias)
set macSystem to (path to me as text) & "Contents:Resources:Files:MacOS.sheepvm" as string
set macSystem to macSystem as alias
-- set oldPath to ((POSIX path of macSystem) & "WPMac86HD.dsk")
set secondDiskName to "SecondDisk.dsk"
set moveNewPath to ((POSIX path of macSystem) & secondDiskName)
set oldDiskExists to 1
try
do shell script "test -e " & quoted form of moveNewPath
on error
set oldDiskExists to 0
end try
if oldDiskExists is 1 then
display dialog "A second disk image already exists. If you click OK I will move it to the trash and set the “" & dskName & "” disk image as the second disk." buttons {"OK", "Cancel"} default button 2 with title msgTitle
if button returned of result is "Cancel" then
error number -128
end if
try
set moveNewPathAlias to (POSIX file moveNewPath) as alias
on error
display dialog "Error setting old file as alias."
end try
tell application "Finder"
try
delete moveNewPathAlias
on error
tell me to activate
display dialog "Error moving disk image file to the trash." buttons {"OK"} with title msgTitle giving up after 10
error number -128
end try
end tell
display dialog "Old second disk image moved to trash." buttons {"OK"} with title msgTitle giving up after 10
end if
(*
try
do shell script "mv " & quoted form of oldPath & space & quoted form of renamePath
on error
tell me to activate
display dialog "Problem renaming old disk image file. Quitting." buttons {"OK"} with title msgTitle giving up after 10
error number -128
end try
*)
if copyNewDisk is 1 then
tell me to activate
display dialog "Please wait a few seconds while I copy the file." & return & return & "I will reappear when the copy is complete." buttons {"OK"} with title msgTitle giving up after 2
try
do shell script "cp " & quoted form of thisPosixName & space & quoted form of moveNewPath
on error
-- do shell script "mv " & quoted form of renamePath & space & quoted form of oldPath
tell me to activate
display dialog "Problem transferring new disk image file. Quitting." buttons {"OK"} with title msgTitle giving up after 10
error number -128
end try
end if
set prefsFile to (path to me as string) & "Contents:Resources:Files:MacOS.sheepvm:prefs" as string
set prefsFile to prefsFile as alias
set prefsPath to (POSIX path of prefsFile) as string
set savePath to ((POSIX path of prefsFile) & ".storage")
set tempPath to ((POSIX path of prefsFile) & ".tempfile")
set diskPath to ((POSIX path of prefsFile) & ".diskfile")
-- write prefs file
try
do shell script "cp " & quoted form of prefsPath & " " & quoted form of savePath
on error
set dialogText to "Problem backing up preferences file. No changes made."
end try
do shell script "grep -v '^disk' " & quoted form of prefsPath & " > " & quoted form of tempPath
do shell script "echo disk WPMac86HD.dsk > " & quoted form of diskPath
if copyNewDisk is 1 then
do shell script "echo disk " & secondDiskName & " >> " & quoted form of diskPath
else
do shell script "echo disk " & thisPosixName & ">> " & quoted form of diskPath
end if
do shell script "cat " & quoted form of diskPath & space & quoted form of tempPath & " > " & quoted form of prefsPath
do shell script "rm " & quoted form of diskPath
do shell script "rm " & quoted form of tempPath
do shell script "rm " & quoted form of savePath
tell me to activate
display dialog "The disk image file that you dropped on me will now be the second (non-booting) disk in the WPMacApp." & return & return & "Please restart me." & return & return & "If I fail to boot completely, press Ctrl-Esc to force me to quit and start me again." buttons {"OK"} with title msgTitle giving up after 10
error number -128
end if
end transferImage
on readPlist() -- put in variable here
set myPlist to "org.wpdos.wpmacapp"
set myPlistfile to ((path to preferences as Unicode text) & myPlist & ".plist")
set myPlistPosix to quoted form of POSIX path of myPlistfile
set runOnceFlag to ""
set writeDataPath to (quoted form of (POSIX path of (path to documents folder)))
tell application "System Events"
try
set runOnceFlag to value of property list item "RunOnce" of property list file myPlistfile
on error
do shell script "defaults write" & space & myPlist & space & "RunOnce" & space & "true"
set firstRun to true
my showFirstRunMsg()
end try
if runOnceFlag is "false" then
do shell script "defaults write" & space & myPlist & space & "RunOnce" & space & "true"
set firstRun to true
my showFirstRunMsg()
end if
set printPDFprompt to false
try
set printPDFprompt to value of property list item "printPDFprompt" of property list file myPlistfile
on error
do shell script "defaults write" & space & myPlist & space & "printPDFprompt" & space & "false"
end try
try
set dataPath to value of property list item "DataPath" of property list file myPlistfile
on error
-- set writeDataPath to (quoted form of (POSIX path of (path to documents folder)))
do shell script "defaults write" & space & myPlist & space & "DataPath" & space & writeDataPath
end try
try
set defaultWidth to value of property list item "DefaultWidth" of property list file myPlistfile
on error
do shell script "defaults write" & space & myPlist & space & "DefaultWidth" & space & "768"
end try
try
set defaultHeight to value of property list item "DefaultHeight" of property list file myPlistfile
on error
do shell script "defaults write" & space & myPlist & space & "DefaultHeight" & space & "1024"
end try
try
set forceFullScreen to value of property list item "ForceFullScreen" of property list file myPlistfile
on error
do shell script "defaults write" & space & myPlist & space & "ForceFullScreen" & space & "0"
end try
try
set wpStartup to value of property list item "WPStartup" of property list file myPlistfile
on error
do shell script "defaults write" & space & myPlist & space & "WPStartup" & space & "true"
set wpStartup to "true"
end try
-- tell me to activate
-- display dialog "debug forcefullscreen " & forceFullScreen
end tell
end readPlist
on setOptions()
set printPDFpromptName to "Set prompting option for default printing system"
set printOptionName to "Set WPMacApp printing options (10.6 and 10.7 only)"
set ipSetupOptionName to "Set up networked PostScript printer for WPMac"
set screenOptionName to "Set WPMacApp screen size options"
set unixOptionName to "Select OS X folder to use as the WPMacApp “Unix” folder"
set startWPName to "Start or don't start WPMac when WPMacApp launches"
set readmeOptionName to "Copy “Read Me First.pdf” file to OS X desktop"
set defaultsOptionsName to "Restore default settings (delete Preferences file)"
set backupOptionsName to "Copy WPMac hard disk image to OS X desktop"
set quitOptionsName to "Quit without opening WPMacApp"
set optionsList to {printPDFpromptName, ipSetupOptionName, screenOptionName, unixOptionName, startWPName, readmeOptionName, defaultsOptionsName, backupOptionsName, quitOptionsName}
if Mountain is 0 then
set the beginning of optionsList to printOptionName
end if
tell me to activate
set doOption to choose from list optionsList with prompt "Which option do you want to set?" OK button name "Set option" cancel button name "Finished setting options"
if doOption contains printPDFpromptName then
my printPDFsetup()
else if doOption contains printOptionName then
set showPrinterMenu to true
tell me to activate
display dialog "The printer setup menu will appear after you click “Finished setting options” on the option settings menu." buttons {"OK"} with title msgTitle giving up after 10
my setOptions()
else if doOption contains ipSetupOptionName then
set doIPSetup to true
tell me to activate
display dialog "The networked PostScript printer setup menu will appear after you click “Finished setting options” on the option settings menu." buttons {"OK"} with title msgTitle giving up after 10
my setOptions()
else if doOption contains screenOptionName then
my screenSizeMenu()
else if doOption contains unixOptionName then
set extraString to ""
set fromWhere to "From setOptions"
my askforUnix(extraString, fromWhere)
else if doOption contains startWPName then
my startWPOption()
else if doOption contains readmeOptionName then
set readmeFromWhere to "From setOptions"
my copyReadMeToDesktop(readmeFromWhere)
else if doOption contains defaultsOptionsName then
my resetDefaults()
else if doOption contains backupOptionsName then
my backupDisk()
else if doOption contains quitOptionsName then
tell me to quit
error number -128
end if
end setOptions
on printPDFsetup()
if printPDFprompt is "true" then
set buttonDefault to 1
set printPDFtext to "Yes"
else
set buttonDefault to 2
set printPDFtext to "No"
end if
tell me to activate
display dialog "Do you want the default printing system to ask whether to print to the default OS X printer or create a PDF file in OS X?" & return & return & "If you answer No, the system will print to the default OS X printer, and you can create PDF files by using a PDF macro in WordPerfect." & return & return & "The current setting is " & printPDFtext & "." buttons {"Yes", "No"} default button buttonDefault with title msgTitle
if button returned of result is "Yes" then
try
do shell script "defaults write" & space & myPlist & space & "printPDFprompt" & space & "true"
on error errMsg
tell me to activate
display dialog errMsg
end try
else if button returned of result is "No" then
try
do shell script "defaults write" & space & myPlist & space & "printPDFprompt" & space & "false"
on error errMsg
tell me to activate
display dialog errMsg
end try
end if
my setOptions()
end printPDFsetup
on startWPOption()
if wpStartup is "true" then
set buttonDefault to 1
set wpStartText to "Yes"
else if wpStartup is "false" then
set buttonDefault to 2
set wpStartText to "No"
end if
tell me to activate
display dialog "Do you want WordPerfect to start automatically when the WPMacApp starts up?" & return & return & "This option is currently set to" & space & wpStartText & "." buttons {"Yes", "No"} default button buttonDefault with title msgTitle
if button returned of result is "Yes" then
if wpStartup is "false" then
set wpStartup to "true"
try
do shell script "defaults write" & space & myPlist & space & "WPStartup" & space & "true"
on error errMsg
tell me to activate
display dialog errMsg
end try
end if
else if button returned of result is "No" then
if wpStartup is "true" then
set wpStartup to "false"
try
do shell script "defaults write" & space & myPlist & space & "WPStartup" & space & "false"
on error errMsg
tell me to activate
display dialog errMsg
end try
end if
end if
my setOptions()
end startWPOption
on allPrinterSetup()
if showPrinterMenu is true then
if doIPSetup is true then
tell me to activate
display dialog "I can only prepare WPMac to use either an OS X printer or a networked PostScript printer but not both at the same time." & return & return & "Which do you want to set up now?" & return & return & "You may set up a different printer when you next launch me." buttons {"Set up OS X printer", "Set up networked PostScript printer", "Cancel"} default button 1 with title msgTitle
if button returned of result is "Set up OS X printer" then
set doIPSetup to false
else if button returned of result is "Set up networked PostScript printer" then
set showPrinterMenu to false
else if button returned of result is "Cancel" then
return
end if
my allPrinterSetup()
end if
set ptrFromWhere to "From allPrinterSetup"
my printerPrompt(ptrFromWhere)
end if
if doIPSetup is true then
my prepareIPPrinter()
end if
end allPrinterSetup
on screenSizeMenu()
set prefsFile to (path to me) & "Contents:Resources:Files:MacOS.sheepvm:prefs" as string
set prefsFile to prefsFile as alias
set prefsUnixFile to quoted form of ((POSIX path of prefsFile) as string)
try
set curSize to do shell script "grep '^screen win\\/' " & prefsUnixFile & " | sed 's/^screen win\\///'"
on error
tell me to activate
display dialog "Error reading existing preferences file."
error number -128
end try
-- replace "/" with "x" to match menu display
set curMenu to searchReplaceText("/", "x", curSize)
set calculateSize to 0
set forceFullScreen to 0
set defaultScreenSize to 1
set sizeList to {"640x480", "800x600", "896x762", "1024x768"}
tell application "Image Events" to set numberOfDisplays to count displays
if numberOfDisplays is greater than 1 then
set ifLarge to space & "largest" & space
else
set ifLarge to space
end if
set dspsizes to getDspSizes()
set widthList to {}
set heightList to {}
repeat with thisItem in dspsizes
set the end of widthList to first item in thisItem as number
set the end of heightList to second item in thisItem as number
end repeat
set sortedWidths to simple_sort(widthList)
set sortedHeights to simple_sort(heightList)
set maxWidth to the first item in sortedWidths as number
set maxHeight to the first item in sortedHeights as number
-- set macSize to (maxWidth as string) & "x" & (maxHeight as string)
if maxWidth is greater than 1024 then
if maxHeight is greater than 800 then
set end of sizeList to "1152x870"
end if
end if
if maxWidth is greater than 1280 then
if maxHeight is greater than 800 then
set end of sizeList to "1280x1024"
end if
end if
if maxWidth is greater than 1599 then
set end of sizeList to "1600x1024"
if maxHeight is greater than 1199 then
set end of sizeList to "1600x1200"
end if
end if
set documentSize to "Document size (640x742)"
set landscapeSize to "Landscape, proportioned to OS X screen size"
set portraitSize to "Portrait, proportioned to OS X screen size"
set fullScreenSize to "Full-screen, same size as OS X screen"
set nameList to {documentSize, landscapeSize, portraitSize, fullScreenSize}
set screenSizeList to sizeList & nameList
set getSize to choose from list screenSizeList with prompt "Select a screen size for the WPMacApp" & return & return & "Current size is " & curMenu OK button name "Select" cancel button name "Cancel" with title msgTitle
if getSize is "Cancel" then
my setOptions()
else if getSize contains "1600x1200" then
set defaultWidth to 1600
set defaultHeight to 1200
else if getSize contains "1280x1024" then
set defaultWidth to 1280
set defaultHeight to 1024
else if getSize contains "1152x870" then
set defaultWidth to 1152
set defaultHeight to 870
else if getSize contains "1024x768" then
set defaultWidth to 1024
set defaultHeight to 768
else if getSize contains "896x762" then
set defaultWidth to 896
set defaultHeight to 762
else if getSize contains "800x600" then
set defaultWidth to 800
set defaultHeight to 600
else if getSize contains "640x480" then
set defaultWidth to 640
set defaultHeight to 480
else if getSize contains documentSize then
set defaultWidth to 640
set defaultHeight to 742
else if getSize contains landscapeSize then
set defaultScreenSize to 0
set calculateSize to 1
else if getSize contains portraitSize then
set defaultScreenSize to 0
set calculateSize to 2
else if getSize contains fullScreenSize then
set defaultScreenSize to 0
set forceFullScreen to 1
tell application "System Events"
if Mavericks is 0 then
if UI elements enabled then
else
my setupUniversalAccess()
end if
else
my setupMavericksAccess()
end if
end tell
end if
do shell script "defaults write" & space & myPlist & space & "DefaultWidth" & space & defaultWidth
do shell script "defaults write" & space & myPlist & space & "DefaultHeight" & space & defaultHeight
my setOptions()
end screenSizeMenu
on resetDefaults()
tell me to activate
display dialog "Do you want to reset all options to the initial defaults?" buttons {"Yes", "No"} default button "No" with title msgTitle
if button returned of result is "Yes" then
try
do shell script "rm" & space & myPlistPosix
end try
try
do shell script "rm" & space & quoted form of dataPath & "/.WPTransfer/*.*"
end try
end if
my setOptions()
end resetDefaults
on showFirstRunMsg()
-- offer to copy readme first to desktop, if you want to set options, hold down option key, etc.
tell me to activate
set copyPrompt to "Copy PDF to desktop"
display dialog "This seems to be the first time you have run this version of the WPMac Appliance." & return & return & "I strongly recommend that you study the “Read Me First.pdf” file before you transfer files to and from the WPMacApp and before printing from WordPerfect. I can copy this file to your OS X desktop and continue to open the WPMacApp." & return & return & "Or I can continue to launch the WPMacApp without copying the “Read Me First.pdf” document." & return & return & "Another copy of the “Read Me First.pdf” document may be found on the desktop of the WPMacApp." with title msgTitle buttons {copyPrompt, "Continue without copying", "Quit"} default button 1
if button returned of result contains copyPrompt then
set readmeFromWhere to "From ShowFirstRunMsg"
my copyReadMeToDesktop(readmeFromWhere)
else if button returned of result is "Quit" then
error number -128
end if
end showFirstRunMsg
on backupDisk()
tell me to activate
display dialog "Do you want to copy the WPMacApp disk image file to the OS X desktop?" & return & return & "This will take a minute or two. Please wait for the Options window to reappear when the copy is complete." buttons {"Yes", "No"} default button "No" with title msgTitle
if button returned of result is "Yes" then
set diskFile to (path to me) & "Contents:Resources:Files:MacOS.sheepvm:WPMac86HD.dsk" as string
set diskFile to diskFile as alias
set diskUnixFile to quoted form of ((POSIX path of diskFile) as string)
set deskPosix to POSIX path of (path to desktop folder from user domain)
try
do shell script "cp" & space & diskUnixFile & space & deskPosix
on error
tell me to activate
display dialog "Could not copy the WPMac86HD.dsk image file. I don't know why." buttons {"OK"} with title msgTitle
end try
end if
my setOptions()
end backupDisk
on copyReadMeToDesktop(readmeFromWhere)
set thisApp to path to me as text
set readmePDFFile to (thisApp & "Contents:Resources:Files:Read Me First.pdf")
set readmePDFPosix to quoted form of (POSIX path of readmePDFFile)
set deskPosix to POSIX path of (path to desktop folder from user domain)
set pdfTargetPosix to quoted form of (deskPosix & "WPMacApp Read Me First.pdf")
set pdfReadMeExists to true
try
do shell script "ls -a " & pdfTargetPosix
on error
set pdfReadMeExists to false
end try
-- display dialog pdfReadMeExists
if pdfReadMeExists is true then
tell me to activate
display dialog "The WPMacApp “Read Me First.pdf” file already exists on your desktop. Do you want me to overwrite it?" buttons {"Yes", "No"} default button 1 with title msgTitle
if button returned of result is "Yes" then
try
do shell script "cp " & readmePDFPosix & space & pdfTargetPosix
on error e
tell me to activate
display dialog e
end try
tell me to activate
display dialog "The “Read Me First.pdf” file has been copied to your desktop as “WPMacApp Read Me First.pdf.”" with title msgTitle buttons {"OK"} giving up after 5
else
tell me to activate
display dialog "The file has not been copied." buttons {"OK"} with title msgTitle giving up after 5
end if
else
try
do shell script "cp " & readmePDFPosix & space & pdfTargetPosix
on error e
tell me to activate
display dialog e
end try
tell me to activate
display dialog "The “Read Me First.pdf” file has been copied to your desktop as “WPMacApp Read Me First.pdf.”" with title msgTitle buttons {"OK"} giving up after 5
end if
if readmeFromWhere is "From setOptions" then
my setOptions()
end if
end copyReadMeToDesktop
on searchReplaceText(searchTerm, replaceTerm, theText)
set searchTerm to searchTerm as list
set replaceTerm to replaceTerm as list
set theText to theText as text
set oldTID to AppleScript's text item delimiters
repeat with i from 1 to count searchTerm
set AppleScript's text item delimiters to searchTerm's item i
set theText to theText's text items
set AppleScript's text item delimiters to replaceTerm's item i
set theText to theText as text
end repeat
set AppleScript's text item delimiters to oldTID
return theText
end searchReplaceText
on setupLaunchDaemon()
-- remove folder action script
set userPath to path to home folder as text
set libPath to path to library folder from user domain as text
set libPosix to POSIX path of libPath
set fasPosix to libPosix & "Scripts/Folder Action Scripts/WPTransferFolderScript.scpt"
tell application "System Events"
set dataPath to value of property list item "DataPath" of property list file myPlistfile
end tell
set printPath to (dataPath & ".WPTransfer") as text
-- remove old folder action script system
(* -- not needed, already done above?
try
do shell script "/bin/mkdir -p " & quoted form of dataPath & "/.WPTransfer"
end try
try
do shell script "ls" & space & quoted form of (POSIX path of userFldrPath & fldrScript)
end try
*)
try
tell application "System Events" to set FAScripts to name of every script of folder action ".WPTransfer"
repeat with EachScript in FAScripts
set ScriptName to contents of EachScript
tell application "System Events" to delete script ScriptName of folder action ".WPTransfer"
end repeat
--If we deleted all the scripts, delete the folder action object as well
tell application "System Events" to delete folder action ".WPTransfer"
end try
try
do shell script "rm" & space & quoted form of fasPosix
end try
--debug
--this repeats routine in setupPaths but may be needed anyway:
set contentsFldr to (path to me as string) & "Contents:Resources:Files:"
set filesFolder to contentsFldr as alias
set filesPosix to (POSIX path of filesFolder)
set scriptPosix to (filesPosix & "wpmacappfolder.scpt")
set daemonPosix to (filesPosix & "org.wpdos.wpmacfolder.plist")
try
do shell script "rm " & quoted form of daemonPosix
end try
do shell script "cp '" & filesPosix & "plisthead.txt' '" & filesPosix & "org.wpdos.wpmacfolder.plist'"
do shell script "echo \\<string\\>" & scriptPosix & "\\</string\\>>>'" & filesPosix & "org.wpdos.wpmacfolder.plist'"
do shell script "cat '" & filesPosix & "plistmiddle.txt' >>'" & filesPosix & "org.wpdos.wpmacfolder.plist'"
do shell script "echo \\<string\\>" & posixFolder & "\\</string\\>>>'" & filesPosix & "org.wpdos.wpmacfolder.plist'"
do shell script "cat '" & filesPosix & "plistfoot.txt'>>'" & filesPosix & "org.wpdos.wpmacfolder.plist'"
try
do shell script "launchctl remove org.wpdos.wpmacfolder"
end try
do shell script "launchctl load " & quoted form of daemonPosix
set sswp to false
end setupLaunchDaemon
on setupSSWPLaunchDaemon()
-- remove folder action script
set userPath to path to home folder as text
set libPath to path to library folder from user domain as text
set libPosix to POSIX path of libPath
set scriptPosix to libPosix & "Scripts/Folder Action ScriptsSheepShaver Print-PDF 1.4.1.scpt"
tell application "System Events"
set dataPath to value of property list item "DataPath" of property list file myPlistfile
end tell
set sswpPrintPath to (dataPath & "SheepShaver Data/SS > OSX") as text
set sswpPrintString to (dataPath & "SheepShaver Data/SS \\> OSX") as text
-- remove old folder action script system
(*
try
do shell script "mkdir -p " & quoted form of sswpPrintPath
end try
try
do shell script "ls" & space & quoted form of (POSIX path of userFldrPath & fldrScript)
end try
*)
-- not sure which of these two is needed:
try
tell application "System Events" to set FAScripts to name of every script of folder action "SheepShaver Data"
repeat with EachScript in FAScripts
set ScriptName to contents of EachScript
tell application "System Events" to delete script ScriptName of folder action "SheepShaver Data"
end repeat
--If we deleted all the scripts, delete the folder action object as well
tell application "System Events" to delete folder action "SheepShaver Data"
end try
try
tell application "System Events" to set FAScripts to name of every script of folder action "SS > OSX"
repeat with EachScript in FAScripts
set ScriptName to contents of EachScript
tell application "System Events" to delete script ScriptName of folder action "SS > OSX"
end repeat
--If we deleted all the scripts, delete the folder action object as well
tell application "System Events" to delete folder action "SS > OSX"
end try
(*
try
do shell script "rm" & space & quoted form of actionPosix
end try
*)
--debug
--this repeats routine in setupPaths but may be needed anyway:
set contentsFldr to (path to me as string) & "Contents:Resources:Files:"
set filesFolder to contentsFldr as alias
set filesPosix to (POSIX path of filesFolder)
set scriptPosix to (filesPosix & "SSWPprintpdf.scpt")
set daemonPosix to (filesPosix & "org.wpmacyahoogroup.sswpfolder.plist")
try
do shell script "rm " & quoted form of daemonPosix
end try
do shell script "cp '" & filesPosix & "plisthead-sswp.txt' '" & filesPosix & "org.wpmacyahoogroup.sswpfolder.plist'"
do shell script "echo \\<string\\>" & scriptPosix & "\\</string\\>>>'" & filesPosix & "org.wpmacyahoogroup.sswpfolder.plist'"
do shell script "cat '" & filesPosix & "plistmiddle.txt' >>'" & filesPosix & "org.wpmacyahoogroup.sswpfolder.plist'"
do shell script "echo \\<string\\>" & sswpPrintString & "\\</string\\>>>'" & filesPosix & "org.wpmacyahoogroup.sswpfolder.plist'"
do shell script "cat '" & filesPosix & "plistfoot.txt'>>'" & filesPosix & "org.wpmacyahoogroup.sswpfolder.plist'"
try
do shell script "launchctl remove org.wpmacyahoogroup.sswpfolder"
end try
do shell script "launchctl load " & quoted form of daemonPosix
set sswp to false
end setupSSWPLaunchDaemon