Recent Forum Posts
From categories:
page 1123...next »

Now that Adobe has ended flash support I'm trying to find a means to run Adobe content on a Mac. With windows it can easily be done by running a Firefox Portable app. I understand the possible vulnerabilities but really have no choice since my employer is still using flash in some of their online courses. Does anyone have any suggestions?

Thanks, we can try.
Please contact me via mail moc.liamg|gumseerf#moc.liamg|gumseerf

Re: Chromium discontinued? by CGandCGand, 10 Nov 2020 22:59

Hi Carlo,

Is there some way for you to have a new build machine in AWS? Would it work if I provide you an EC2 instance on AWS?

Thanks

Re: Chromium discontinued? by sjforumssjforums, 10 Nov 2020 21:32

During last months I got building errors I couldn’t solve.

Now, due Covid lockdown here in Italy, I can’t also access to my remote machine.
I’m sad after 10 years that I’ve to suspend builds. Please switch to Firefox or Safari.

You can find other Chromium builds here:
https://chromium.woolyss.com/#mac

Re: Chromium discontinued? by CGandCGand, 10 Nov 2020 14:18

Chromium eingestellt?
Die letzte Version 85.0.4183.102 ist 2 Monate alt.

Opera, Vivaldi, Edge bringen laufend Updates.

LG
Fritz


Nice Greetings
Fred

Chromium eingestellt? by macusergurumacuserguru, 10 Nov 2020 11:32

Chromium discontinued?
The last version 85.0.4183.102 is 2 months old.
Opera, Vivaldi, Edge bring constantly updates.

nice greetings
Fritz


Nice Greetings
Fred

Chromium discontinued? by macusergurumacuserguru, 10 Nov 2020 11:30

@rupinderkaur: Chromium FreeSMUG builds has not Sparkle update since January 2015.

Its happen with me also
Snap error continues to appear and cannot clear caches or anything.

now all usage of CocoaDialog, from above "SCRIPT" are changed, to use Pashua based dialog.

i have temporarily renamed main "SCRIPT" from "script" into "script.sh" to test syntaxes in it:
┌────────────────────────────────────────────
│MacName:~ MyUserName$ sh -n /System/Volumes/Data/MyProjects/PortableFirefox/script.sh
│MacName:~ MyUserName$ echo $?
│MacName:~ MyUserName$ 0
└────────────────────────────────────────────

then tried to create a new Platypus based "Portable Firefox OSX" in macOSX 10.15.5 (Catalina),
but getting errors,
platypus can show which line of "SCRIPT" has error in some cases,
fixing those.

and my question related to PLATYPUS for previous DEV(s) & to community, is:

i have added these below 4-files + 2-folders + 2-app-bundles in platypus,
are these suffice ? am i suppose to add anything else ? ?

dir : English.lproj
dir : profile
bundle : Firefox.app
bundle : Pashua.app
icon-file : P_Firefox_Caution.icns
icon-file : appIcon.icns
sh-script-file : pashua.sh
sh-script-file : script
…all above files+directories+bundles are placed here:
/System/Volumes/Data/MyProjects/PortableFirefox/

then, i have these settings in Platypus interface:
Script Type : Shell : /bin/sh
Script Path : /System/Volumes/Data/MyProjects/PortableFirefox/script
Interface : Text Window
Unselected options : Run with root privileges , Run in background , Accept dropped items
Selected options : Remain running after execution

after the platypus "Create App" button , & it's build stages
i click on new "Portable Firefox OSX.app" …
icon on dock-bar keeps on bouncing, then finally it shows below various/ERRORs/prompts:

​Could not find disk: /Contents/Resources
Could not find disk: /Contents/Resources
mkdir: /Contents/Resources/profile: Read-only file system
/System/Volumes/Data/MyProjects/PortableFirefox/Portable Firefox OSX.app/Contents/Resources/script: line 1213: /Contents/Resources/Firefox.app/Contents/MacOS/firefox-bin: No such file or directory
2020-06-05 10:08:15.184 Pashua[10759:293245] CGImageDestinationFinalize failed for output type 'public.tiff'
2020-06-05 10:08:15.184 Pashua[10760:293246] CGImageDestinationFinalize failed for output type 'public.tiff'

  • So to check, i right-click on "/System/Volumes/Data/MyProjects/PortableFirefox" folder,
    & select "Get Info" option, it shows:
    ┌──────────────────
    Sharing & Permissions:
    ├──────────────────
    You have custom access
    ├──────────────────
    MyUserName (Me) | Read & Write
    wheel | Read only
    everyone | Read only
    └──────────────────
  • and the "profile" folder's "Get Info" is:
    ┌──────────────────
    Sharing & Permissions:
    ├──────────────────
    You can read & write
    ├──────────────────
    MyUserName (Me) | Read & Write
    everyone | No Access
    └──────────────────

… so to me it appears, that file/folder(s) permission(s) are fine, so it should get full Read+Write access, right ? or not ?

in Pashu dialog's image item/object/type, i have used icon files, is that why Pashua showing those 2-errors ?

Platypus generated .app is not showing Firefox fox/earth icon on its icon in Finder,
( i selected the "appIcon.icns" icon file )

HELP PLEASE.

EXTRA-NOTEs:

  • to create "MyProjects" folder in my mac hard drive, i had to do these: Edit:
    ┌───────────────────────
    sudo nano /etc/synthetic.conf
    └───────────────────────
    and then add below 2-lines of settings:
    ┌───────────────────────
    MyProjects System/Volumes/Data/MyProjects
    Development System/Volumes/Data/Development
    └───────────────────────
    then Press Ctrl+X , Enter . Note: press "tab"-button after typing "MyProjects"/"Development"
    and Execute below Terminal/shell command(s) to create those 2-folders:
    ┌───────────────────────
    sudo mkdir -p /System/Volumes/Data/MyProjects
    sudo mkdir -p /System/Volumes/Data/Development
    └───────────────────────
    and then you must Reboot.
  • To see all files in Finder (inlcuding Hidden/System), i executed below 2-commands:
    ┌───────────────────────
    defaults write com.apple.finder AppleShowAllFiles TRUE
    killall Finder
    └───────────────────────
    or, in "Finder", press these 3-buttons together at-same-time: [⇧Shift] + [⌘Command] + [>.]
  • in WikiDot based this (FreeSmug) forum, to indent a textLine : wrap 'space' char with @@ , like this @@ @@

EDIT: utc Jun 06, 2020, 07:40am: added error related more info. added Extra-Note section.
EDIT: utc Jun 05, 2020, 05:10pm: added errors here, shown by FF OSX app build with Platypus.
EDIT: utc Jun 05, 2020, 03:45pm: added QUESTION on Platypus.
EDIT: utc Jun 05, 2020, 03:42pm: added development status/build/output status of previous post/SCRIPT.

Hi Community & Developer(s),
Let us please help each-others to Update the Platypus wrapper to a newer version &
change the CocoaDialog into Pashua dialog, to run older FreeSMUG/OsxPortableApps apps
in 64-bit/Catalina macOSX.

FF = Firefox . a web-browser from Mozilla Foundation.
ESR = Extended Support Release.

i use the PortableFirefoxOSX,
& have updated the FF inside this OsxPortableApp bundle:
in one instance/folder i upd into FF v56.0.2 (the last security-updated gecko-based non-ESR Firefox),
& in another instance/folder updated FF to v52.9.0 (the last security-updated gecko-based Firefox-ESR),
etc.

my each gecko-based FF has lots of ADDONS/EXTENSIONS,etc which i (must) need for my research to investigate,
those Addons are not yet available in servo/quantum based new Firefox, & will not be anytime soon :(

FF v56.0.2 dmg file's sha1: 79a0013664134ced2307c8e1ffa5d36f6256e8f,
md5: a5608df45832df3ff302a7ccbe7ec3f6, 54.5 MBytes,
https://ftp.mozilla.org/pub/firefox/releases/56.0.2/

FF v52.9.0 esr dmg file's sha1: d879f5423d79393f2384e0f97a5581f9d89d7977,
md5: 34e8280bb9b33ca202ba22cf9daf25e4, 82.8 MBytes,
https://ftp.mozilla.org/pub/firefox/releases/52.9.0esr/

( btw, any latest FF.app can also be placed+replaced inside the "Portable Firefox.app"
& still can be run fine in macOSX Sierra/10.12.x, .., (Mojave/10.14.x, ..,)
but not in Catalina/10.15.x )

i need-to/must run those (old) OsxPortableApps
inside macOSX Sierra (10.12.x), Mojave (10.14.x) & Catalina (10.15.x).

Please HELP me & let us help each-others to modify+update the codes,
so that i & other users who need-to , can continue to use them in mentioned+other macOSes,
& this effort will HELP+allow other/many users as well,
to run PortableFirefox ( & OTHER OSX PortableApps )
not-only-in 64-bit-only macOSX (Catalina, …) , but also run in 64+32-bit supported macOSes
(which were released before-Catalina) : in Mojave, …, Sierra, …, etc

From release apps & dates shown in this site & in twitter, it appears that
this/related site(s) only sharing/have PortableChromium OSX, which is based on "Google"-Chromium.

Last "Portable Firefox OSX" : "PortableFirefox_4.0.1_en-US-OSX_r4.1.dmg"
( sha1: 50ff626452dfadb9cbb6a2a5e2ddf60848adf256,
md5: fa6691336e22a2d83e5629533b830300, 28.2 MBytes,
https://sourceforge.net/projects/osxportableapps/files/Portable%20Firefox%20OS%20X/4.0.1%20r4.1/ )

We/i will work on this "SCRIPT" FILE : http://www.freesmug.org/portableapps:code:firefox

above SCRIPT file is located/found at below location inside .app bundle:
"/MyPortableDrive/PortableApps/FF_for_Test/Portable Firefox OS X/Portable Firefox.app/Contents/Resources/script"

i have updated this/above "Shell script" ("SCRIPT") to use "Pashua" dialog instead of CocoaDialog,
( as there is no 64-bit CocoaDialog for Catalina/64bit macOSX yet afaik ) ,
& i added a version-number 4.1.3 myself, for now, for easier handling.

is there a github/sourceforge page where i can submit this below updated 'script' codes
for your/DEV's review & modification & addition ?

i'm hoping community & others devs will review & help me & help themselves & others,
to fix the shortcomings in my submitted new SCRIPT code:

i have placed "Pashua.app", "Pashua.sh"
( obtained from/via https://www.bluem.net/en/projects/pashua/ )
into below Folder/Dir:
"/MyPortableDrive/PortableApps/FF_for_Test/Portable Firefox OS X/Portable Firefox.app/Contents/Resources/"

i have obtained NEW Platypus v5.3 portable app WRAPPER ( it seems 64-bit supported & compatible with Catalina/64bit macOSX )
from here: https://sveinbjorn.org/platypus
( and Platypus v4.9, which is for running 32-bit apps in Mojave/Sierra/etc ).

HOW DO WE/I CREATE A NEW "Portable Firefox" binary-file ( based on NEW PLATYPUS v5.3 ) HERE ?
"/MyPortableDrive/PortableApps/FF_for_Test/Portable Firefox OS X/Portable Firefox.app/Contents/MacOS/Portable Firefox"
We/community/users/devs/i need to work to achieve above.

and, in below here is i'm sharing my updated SCRIPT REVISION v4.1.3
To View Updated Code & To Collaborate/Contribute Codes, Please Go here in GitHub

#!/bin/sh -x

##########################################################################
#
#   Portable Firefox OS X
#   $Revision: 4.1
#
#   The Contents of this file are made available subject to the terms
#   of the following license
#
#          - GNU General Public License Version 3
#
#   Carlo Gandolfi, Paolo Portaluri January 2010
#
#   GNU General Public License Version 3
#   =============================================
#   Copyright 2006-2011 by:
#      Carlo Gandolfi - http://www.freesmug.org
#      Paolo Portaluri - http://plus2.it/~paolo/
#
#   This program is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
##########################################################################
# Portable Firefox OS X
# Revision: 4.1.3
# Modified by Erik T Ashfolk <atErik at Out Look dot com>
#             ______ <______ at ________ dot ___>
#   to use Pashua dialog (instead of CocoaDialog) & new Platypus, etc
#   for 64bit macOSX (Catalina,...) compatibility.
#
#   The Contents of this file are made available subject to the terms
#   of the following license+restrictions+permissions:
#   - GNU General Public License Version 3  (GPL v3)
#   - Do not use my/our contributions to kill/harm(or steal-from) any Human/Community,Earth,etc
#   Copyright (c) 2020 by Erik T Ashfolk - <atErik at Out Look dot com>
#   ...
#
#   GPL v3
#   This program is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see <http://www.gnu.org/license/>.
#
#################################################################################

# Reset PATH
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

appID=Firefox
appBin=firefox-bin

# Modified by atErik : Changed below from "userprefbase" into "userPref"
userPref="Library/Application Support"
# Modified by atErik : Changed below from "userpref" into "userPrefBase"
userPrefBase="$HOME/$userPref/$appID/Profiles"
# export userPrefBase
userCacheBase="$HOME/Library/Caches"
userCache="$userCacheBase/$appID"

PA_userBase="$1/Contents/Resources"
# export PA_userBase
PA_userPref="$PA_userBase/profile"
copy_pref="$PA_userBase/CopyPref_Done"

CD="$PA_userBase/CocoaDialog.app/Contents/MacOS/CocoaDialog"
# export CD
# Added/Modified by atErik, to use Pashua (instead of CocoaDialog)
PD="$PA_userBase/Pashua.app/Contents/MacOS/Pashua";
# export PD

appICON="$PA_userBase/appIcon.icns"
# export appICON
cautionICON="$PA_userBase/P_${appID}_Caution.icns"
# export cautionICON

# Below line added by atErik, to use bash-functions inside "pashua.sh" file:
# source "$PA_userBase/pashua.sh"
# when above line is enabled, then below 2-functions are not necessary to enable here.
# Temporarily including below 2-functions from "pashua.sh":
# ========================================================
# This section/function copied from Pashua example.sh file
# Pashua’s source code is released under the Open Source Software (3-clause BSD license)
#
# Tries to find the Pashua executable in one of a few default search locations or in
# a custom path passed as optional argument. When it can be found, the filesystem
# path will be in $pashuapath, otherwise $pashuapath will be empty. The return value
# is 0 if it can be found, 1 otherwise.
#
# Argument 1: Path to a folder containing Pashua.app (optional)
# ========================================================
locate_pashua() {

    local bundlepath="Pashua.app/Contents/MacOS/Pashua"
    local mypath=`dirname "$0"`

    pashuapath=""

    if [ ! "$1" = "" ]
    then
        searchpaths[0]="$1/$bundlepath"
    fi
    searchpaths[1]="$mypath/Pashua"
    searchpaths[2]="$mypath/$bundlepath"
    searchpaths[3]="./$bundlepath"
    searchpaths[4]="/Applications/$bundlepath"
    searchpaths[5]="$HOME/Applications/$bundlepath"

    for searchpath in "${searchpaths[@]}"
    do
        if [ -f "$searchpath" -a -x "$searchpath" ]
        then
            pashuapath=$searchpath
            return 0
        fi
    done

    return 1
}

# ========================================================
# This section/function copied from Pashua example.sh file
# Pashua’s source code is released under the Open Source Software (3-clause BSD license)
#
# Function for communicating with Pashua
#
# Argument 1: Configuration string
# Argument 2: Path to a folder containing Pashua.app (optional)
# ========================================================
pashua_run() {

    # Write config file
    local pashua_configfile=`/usr/bin/mktemp /tmp/pashua_XXXXXXXXX`
    echo "$1" > "$pashua_configfile"

    locate_pashua "$2"

    if [ "" = "$pashuapath" ]
    then
        >&2 echo "Error: Pashua could not be found"
        exit 1
    fi

    # Get result
    local result=$("$pashuapath" "$pashua_configfile")

    # Remove config file
    rm "$pashua_configfile"

    oldIFS="$IFS"
    IFS=$'\n'

    # Parse result
    for line in $result
    do
        local name=$(echo $line | sed 's/^\([^=]*\)=.*$/\1/')
        local value=$(echo $line | sed 's/^[^=]*=\(.*\)$/\1/')
        eval $name='$value'
    done

    IFS="$oldIFS"
}

# ========================================================
# CDokMsg      # Modified by atErik : local, "--yes-cancel"/$3, $4/tooltip/tV
# CocoaDialog Ok/Cancel message box
# $1 "text"
# $2 "informative text"
# $3 optional "--no-cancel" = don't show a cancel button, & "--yes-cancel" to show a Cancel button
# $4 optional "tooltip_img|tooltip_text|tooltip_okButton|tooltip_cancelButton", or specify "-" to show no-tooltip
# ========================================================

function CDokMsg {    # Modified by atErik : local, "--yes-cancel"/$3, tV/$4/tooltip
    local tV=""
    local conf="
        # Set window title
        *.title = $1
        # show an image
        imgOk.type = image
        imgOk.x = 50
        imgOk.y = 50
        imgOk.maxwidth = 64
        imgOk.path = $appICON
        # Introductory text
        txtOk.type = text
        txtOk.default = $2
        txtOk.height = 180
        txtOk.width = 310
        txtOk.x = 50
        txtOk.y = 120
        # Show an “Ok” general-button at default position
        okB.type = button
        okB.label = Ok
        "
    # we will not specify okB.x or okB.y in above,
    # so that macOSX can place this general-button at-default position, left-bottom corner

    if [ ! -z $3 ] ; then
        if [ "$3" == "--yes-cancel" ] ; then
            conf="$conf
                # Add a “Cancel” button with default-label & show in default-positon
                okCB.type = cancelbutton
                "
        fi;
    fi;
    if [ ! -z $4 ] ; then
        if [ "$4 " != " " ] ; then
            if [ "${4%%|*}" != "-" ] ; then
                # tooltip msg for image
                conf="$conf
                    imgOk.tooltip = ${4%%|*}
                    "
            fi;
            tV=${4#*|}
            if [ "${tV%%|*}" != "-" ] ; then
                # tooltip msg for text
                conf="$conf
                    txtOk.tooltip = ${tV%%|*}
                    "
            fi;
            tV=${tV#*|}
            if [ "${tV%%|*}" != "-" ] ; then
                # tooltip msg for a button showing “Ok”
                conf="$conf
                    okB.tooltip = ${tV%%|*}
                    "
            fi;
            if [ ! -z $3 ] ; then
                if [ "$3" == "--yes-cancel" ] ; then
                    tV=${tV#*|}
                    if [ "${tV%%|*}" != "-" ] ; then
                        # tooltip msg for a button showing “Cancel”/etc
                        conf="$conf
                            okCB.tooltip = ${tV%%|*}
                            "
                    fi;
                fi;
            fi;
        fi;
    fi;
    beep
    pashua_run "$conf" "$PA_userBase"
    # beep
    # "$CD" ok-msgbox  --icon-file "$appICON" \
    # --text "$1" --informative-text "$2" "$3"
}

function CDokMsgC {   # Modified by atErik : local, "--yes-cancel"/$3, tV/$4/tooltip
    local tV=""
    local conf="
        # Set window title
        *.title = $1
        # show an image
        imgOkC.type = image
        imgOkC.x = 50
        imgOkC.y = 50
        imgOkC.maxwidth = 64
        imgOkC.path = $cautionICON
        # Introductory text
        txtOkC.type = text
        txtOkC.default = $2
        txtOkC.height = 180
        txtOkC.width = 310
        txtOkC.x = 50
        txtOkC.y = 120
        # Show an “Ok” general-button at default position
        bOkC.type = button
        bOkC.label = Ok
        "
    # we will not specify okb.x or okb.y in above,
    # so that macOSX can place this general-button at-default position, left-bottom corner

    if [ ! -z $3 ] ; then
        if [ "$3" == "--yes-cancel" ] ; then
            conf="$conf
                # Add a “Cancel” button with default-label & show in default-positon
                cbOkC.type = cancelbutton
                "
        fi;
    fi;
    if [ ! -z $4 ] ; then
        if [ "$4 " != " " ] ; then
            if [ "${4%%|*}" != "-" ] ; then
                # tooltip msg for image
                conf="$conf
                    imgOkC.tooltip = ${4%%|*}
                    "
            fi;
            tV=${4#*|}
            if [ "${tV%%|*}" != "-" ] ; then
                # tooltip msg for text
                conf="$conf
                    txtOkC.tooltip = ${tV%%|*}
                    "
            fi;
            tV=${tV#*|}
            if [ "${tV%%|*}" != "-" ] ; then
                # tooltip msg for a button showing “Ok”
                conf="$conf
                    bOkC.tooltip = ${tV%%|*}
                    "
            fi;
            if [ ! -z $3 ] ; then
                if [ "$3" == "--yes-cancel" ] ; then
                    tV=${tV#*|}
                    if [ "${tV%%|*}" != "-" ] ; then
                        # tooltip msg for a button showing “Cancel”/etc
                        conf="$conf
                            cbOkC.tooltip = ${tV%%|*}
                            "
                    fi;
                fi;
            fi;
        fi;
    fi;
    beep
    pashua_run "$conf" "$PA_userBase"
    # beep
    # "$CD" ok-msgbox  --icon-file "$cautionICON" \
    # --text "$1" --informative-text "$2" "$3"
}

function beep {
    /usr/bin/osascript << EOT
    tell application "Finder"
    beep
    end tell
EOT
}

# ========================================================
# PDbubble      # Written by atErik, to use Pashua (instead of CocoaDialog)
# $1 "title text"
# $2 "message or informative text"
# $3 "icon/image path"
# $4 "autoCloseTime" is interger-numbers as seconds, or "-" for no-autoCloseTime
#      when "-" is specified as $4 then "Ok"-button will be shown
# $5 "tooltip_image" msg : shows this msg when UI-pointer hovers/moves over the image shown in bubble-msg box,
#      or specify "tooltip_image|tooltip_text|tooltip_okButton", or specify "-" or "-|-|-" to show no-tooltip
# $6 "bm1"/"bm2"/... indicating dialog/bubble-message box at different positions,
#       (and textbox inside "bmN" msgbox can have different size & position)
#       Use differnet numbered "bmN" bubble/dialog msg box, so that msgbox is shown without overlapping,
#       or specify "bm1|bm1_x_position|bm1_y_position|text_height|text_width||text_x_position|text_y_position"
# ========================================================

function PDbubble {   # Written by atErik, to use Pashua (instead of CocoaDialog)
    # NOTES: The GUI elements are displayed in the order in which they appear in the config string.
    #  The only exception to this rule are buttons: the default button is always in the lower right
    #  corner of the window, the cancel button (if defined) is located left to the default button
    #  and any other buttons will appear in the lower left corner, from left to right, in the order
    #  they were defined.
    local tV=""
    local conf="
        # Set window title
        *.title = $1    
        # show an image
        imgBbl.type = image
        imgBbl.x = 50
        imgBbl.y = 50
        imgBbl.maxwidth = 64
        imgBbl.path = $3
        # Introductory text
        txtBbl.type = text
        txtBbl.default = $2
        "
    if [ ! -z $4 ] ; then
        # $4 is either "-" or "integer-NUMBER"
        if [ "$4" != "-" ] ; then
            conf="$conf
                # add a auto close timeout in seconds, for this shown dialog/bubble/msg box
                *.autoclosetime = $4
                "
        else
            if [ "$4" == "-" ] ; then
                conf="$conf
                    # Show an “Ok” general-button at default-position
                    BokBbl.type = button
                    BokBbl.label = Ok
                    "
                # we will not specify okb.x or okb.y in above,
                # so that macOSX can place this general-button at-default position, left-bottom corner
            fi;
        fi;
    fi;
    if [ ! -z $5 ] ; then
        if [ "$5 " != " " ] ; then
            # "tooltip_image|tooltip_text|tooltip_okButton"  or "-"  or "-|-|-"
            if [ "$5" != "-" ] && [ "$5" != "-|-|-" ] ; then
                if [ "${5%%|*}" != "-" ] ; then
                    # tooltip msg for image
                    conf="$conf
                        imgBbl.tooltip = ${5%%|*}
                        "
                fi;
                tV=${5#*|}
                if [ "${tV%%|*}" != "-" ] ; then
                    # tooltip msg for text
                    conf="$conf
                        txtBbl.tooltip = ${tV%%|*}
                        "
                fi;
                if [ "$4" == "-" ] ; then
                    tV=${tV#*|}
                    if [ "${tV%%|*}" != "-" ] ; then
                        # tooltip msg for a button showing “Ok”
                        conf="$conf
                            BokBbl.tooltip = ${tV%%|*}
                            "
                    fi;
                fi;
            fi;
        fi;
    fi;
    tV=""
    if [ ! -z $6 ] ; then
        # "bm1|bm1_x_position|bm1_y_position|text_height|text_width||text_x_position|text_y_position"
        if [ "${6:3:1}" == "|" ] ; then
            tV="${6:4}"
            conf="$conf
                # bmN dialog msg box's vertical x position
                *.x = ${tV%%|*}
                "
            tV=${tV#*|}
            conf="$conf
                # bmN dialog msg box's horizontal y position
                *.y = ${tV%%|*}
                "
            tV=${tV#*|}
            conf="$conf
                # height of text box/area inside bmN msgbox
                txtBbl.height = ${tV%%|*}
                "
            tV=${tV#*|}
            conf="$conf
                # width of text box/area inside bmN msgbox
                txtBbl.width = ${tV%%|*}
                "
            tV=${tV#*|}
            conf="$conf
                # vertical x position of text box/area inside bmN msgbox
                txtBbl.x = ${tV%%|*}
                "
            tV=${tV#*|}
            conf="$conf
                # horizontal y position of text box/area inside bmN msgbox
                txtBbl.y = ${tV%%|*}
                "
        else
            conf="$conf
                # vertical & horizontal position of text box inside bubble/dialog msg box
                txtBbl.x = 50
                txtBbl.y = 120
                # height & width of text box inside bubble/dialog msg box
                txtBbl.height = 100
                txtBbl.width = 310
                "
            case "${6:0:3}" in
                ('bm1')  # adding a fixed/specific vertical & horizontal position, to show the “bm1” bubble/dialog msg box
                    conf="$conf
                        # vertical & horizontal position of “bm1” bubble/dialog msg box
                        *.x = 50
                        *.y = 400
                        "
                ;;
                ('bm2')  # adding a fixed/specific vertical & horizontal position, to show the “bm2” bubble/dialog msg box
                    conf="$conf
                        # vertical & horizontal position of “bm2” bubble/dialog msg box
                        *.x = 200
                        *.y = 400
                        "
                ;;
                ('bm3')  # adding a fixed/specific vertical & horizontal position, to show the “bm3” bubble/dialog msg box
                    conf="$conf
                        # vertical & horizontal position of “bm3” bubble/dialog msg box
                        *.x = 350
                        *.y = 400
                        "
                ;;
                ('bm4')  # adding a fixed/specific vertical & horizontal position, to show the “bm4” bubble/dialog msg box
                    conf="$conf
                        # vertical & horizontal position of “bm4” bubble/dialog msg box
                        *.x = 500
                        *.y = 400
                        "
                ;;
            esac;
        fi;
    else
        conf="$conf
            # vertical & horizontal position of text box inside bubble/dialog msg box
            txtBbl.x = 50
            txtBbl.y = 120
            # height & width of text box inside bubble/dialog msg box
            txtBbl.height = 100
            txtBbl.width = 310
            "
        # We are not adding *.x & *.y in above,
        # so that MacOS can show this bubble/dialog msg box in its default position
    fi;
    beep
    pashua_run "$conf" "$PA_userBase"
}

# ========================================================
# PDfileOrDirSelect      # Written by atErik, to use Pashua (instead of CocoaDialog)
# $1 "title text"
# $2 "label or informative text"
# $3 "dirOrFileLocation" = path/directoryOrFile location
# $4 "fileTypeExtension or directory" = if its "directory" then only "directory" selection is allowed,
#        if its filetypes (i.e: "jpg gif") then that/those fileType(s) selection is/are allowed
# $5 optional "tooltip_img|tooltip_txt|tooltip_fileBrowser|tooltip_okButton|tooltip_cancelButton"
#        or specify "-" to show no-tooltip
# ========================================================

function PDfileOrDirSelect {   # Written by atErik, to use Pashua (instead of CocoaDialog)
    local tV=""
    local conf="
        # Set window title
        *.title = $1
        # show an image
        imgSlct.type = image
        imgSlct.x = 50
        imgSlct.y = 50
        imgSlct.maxwidth = 64
        imgSlct.path = $appICON
        # Introductory text
        txtSlct.type = text
        txtSlct.default = $2
        txtSlct.height = 100
        txtSlct.width = 310
        txtSlct.x = 50
        txtSlct.y = 120
        # Add a filesystem browser (openFileOrDirBrowser)
        SlctFB.type = openbrowser
        SlctFB.label = $2
        # SlctFB.label = Example filesystem browser (textfield + open panel)
        SlctFB.width=380
        SlctFB.height=350
        SlctFB.default = $3
        SlctFB.x = 180
        SlctFB.y = 50
        # Add a “Cancel” button with default-label & show at default-positon
        SlctCB.type = cancelbutton
        # Show an “Ok” general-button at default-position
        SlctOkB.type = button
        SlctOkB.label = Ok
        "
    # we will not specify SlctOkB.x or SlctOkB.y in above,
    # so that macOSX can place this general-button at-default position, left-bottom corner

    if [ ! -z $4 ] ; then
        # setting by-default mode to select "directory":
        if [ "$4" != "directory" ] ; then
            conf="$conf
                # user-specified fileTypes selection is allowed
                SlctFB.filetype = $4
                "
        else
            conf="$conf
                # only-directory selection is allowed
                SlctFB.filetype = directory
                "
        fi;
    else

    fi;
    if [ ! -z $5 ] ; then
        if [ "$5 " != " " ] ; then
            if [ "${5%%|*}" != "-" ] ; then
                # tooltip msg for img
                conf="$conf
                    imgSlct.tooltip = ${5%%|*}
                    "
            fi;
            tV=${5#*|}
            if [ "${tV%%|*}" != "-" ] ; then
                # tooltip msg for text
                conf="$conf
                    txtSlct.tooltip = ${tV%%|*}
                    "
            fi;
            tV=${tV#*|}
            if [ "${tV%%|*}" != "-" ] ; then
                # tooltip msg for openFileOrDirBrowser
                conf="$conf
                    SlctFB.tooltip = ${tV%%|*}
                    "
            fi;
            tV=${tV#*|}
            if [ "${tV%%|*}" != "-" ] ; then
                # tooltip msg for a button showing “Ok”
                conf="$conf
                    SlctOkB.tooltip = ${tV%%|*}
                    "
            fi;
            tV=${tV#*|}
            if [ "${tV%%|*}" != "-" ] ; then
                # tooltip msg for a button showing “Cancel”/etc
                conf="$conf
                    SlctCB.tooltip = ${tV%%|*}
                    "
            fi;
        fi;
    fi;
    beep
    pashua_run "$conf" "$PA_userBase"
}

# ========================================================
# PDmultiButtons      # Written by atErik, to use Pashua (instead of CocoaDialog)
# $1 "title text"
# $2 "label or informative text"
# $3 "app icon/image path" = path/directory location
# $4 "buttonN_Show_Text" : when 4th & next items begin with "button1_", "button2_", etc, THEN
#                        : text-specified after the 1st "_" will be displayed in the shown-button
#                        : other-than 1st "_", all other "_" will be converted into "space" symbol
# ========================================================

function PDmultiButtons {   # Written by atErik, to use Pashua (instead of CocoaDialog)
    local tV=""
    local conf="
        # Set window title
        *.title = $1
        # show an image
        imgMB.type = image
        imgMB.x = 50
        imgMB.y = 50
        imgMB.maxwidth = 64
        imgMB.tooltip = This is an element of type “image”
        imgMB.path = $appICON
        # Introductory text
        txtMB.type = text
        txtMB.default = $2
        txtMB.height = 180
        txtMB.width = 310
        txtMB.x = 50
        txtMB.y = 120
        txtMB.tooltip = This is an element of type “text”
        "
    if [ ! -z $4 ] ; then
        if [ "${4:0:8}" == "button1_" ] ; then
            tV="${4:8}";      # get all text after the 1st-underscore symbol
            tV=${tV//_/ };    # change all "underscore" into "space" character/symbol
            conf="$conf
                # add a button with user-specified text
                gb1MB.type = button
                gb1MB.label = $tV
                gb1MB.x = 260
                gb1MB.y = 50
                "
        fi
    fi;
    if [ ! -z $5 ] ; then
        if [ "${5:0:8}" == "button2_" ] ; then
            tV="${5:8}"
            tV=${tV//_/ }
            conf="$conf
                # add another button with user-specified text
                gb2MB.type = button
                gb2MB.label = $tV
                gb2MB.x = 260
                gb2MB.y = 140
                "
        fi
    fi;
    if [ ! -z $6 ] ; then
        if [ "${6:0:8}" == "button3_" ] ; then
            tV="${6:8}"
            tV=${tV//_/ }
            # "Configuration error: Element “gb3” lacks a type attribute. In other words: you have to add a line like the following one: gb3.type = textfield"
            conf="$conf
                # add another button with user-specified text
                gb3MB.type = button
                gb3MB.label = $tV
                gb3MB.x = 260
                gb3MB.y = 240
                "
        fi
    fi;
    if [ ! -z $7 ] ; then
        if [ "${7:0:8}" == "button4_" ] ; then
            tV="${7:8}"
            tV=${tV//_/ }
            conf="$conf
                # add another button with user-specified text, in another row, under the previous 3-buttons
                gb4MB.type = button
                gb4MB.label = $tV
                gb4MB.x = 300
                gb4MB.y = 50
                "
        fi
    fi;
    beep
    pashua_run "$conf" "$PA_userBase"
}

# ========================================================
# PDprogressBarDirsFilesCpOrMv      # Written by atErik, to use Pashua (instead of CocoaDialog)
# $1 "Operation | title text" : Operation can be "Copy" or "Move" : either Copy or Move operation
#       "title text" part is for displaying given text on title of the shown dialog box
# $2 "Source Folder/File"
# $3 "Destination Folder/File"
# $4 "Elapsed_Time | Refresh_Time" : Files+Dirs ReCounting Event Occurred How Many Seconds After Beginning
#      "RefreshTime" is indicating the time after which current dialog box is removed, & new updated is shown
# $5 "extra info 1" : Multi Lines are separated by "|" symbol , use "-" to keep it empty
# $6 "extra info 2" : use "-" to keep it empty
# $7...$9 : format: "ProgressBAR/PERCENT_NUMBER|nominatorNumber|denominatorNumber"
#   $7 is for Files, $8 is for Directories, $9 is for Size
# ========================================================

function PDprogressBarDirsFilesCpOrMv {
    local tV="" Src="" Dest="" oped="copied" tymP=""
    local cp=1 tymPsd=0 p1=0 p1n=0 p1d=0 p2=0 p2n=0 p2d=0 p3=0 p3n=0 p3d=0
    local L1="" L2="" L3="" L4="" L5="" L6="" L7="" L8="" L9=""
    local conf=""
    # local CpOrMv=""
    if [ ! -z $1 ] ; then
        tV=${1%%|*}
        if [ "$tV" == "Move" ]; then
        #    CpOrMv="mv"
            cp=0
        #elif [ "$tV" == "Copy" ]; then
        #    CpOrMv="cp -R"
        fi
        conf="
            # Set window title
            *.title = ${1#*|}
            "
    fi
    if [ ! -z $2 ] ; then
        Src=$2
    fi
    if [ ! -z $3 ] ; then
        Dest=$3
    fi
    if [ ! -z $4 ] ; then
        # Getting Elapsed Time:
        tymPsd=${4%%|*}
        # Getting Refresh Time:
        # adding Auto-Closing TIMEOUT in seconds for this dialog/progress/bar/info msg box
        conf="$conf
            # auto close this dialog box after this second(s)
            *.autoclosetime = ${4#*|}
            "
    fi
    if [ ! -z $7 ] ; then
        # 1ST "ProgressBarNUMBER|nominator|denominator" for FILES
        # "progressBarNUMBER|CopiedNumberOrAmount|TotalNumberOrAmount"
        tV="${7#*|}"
        p1n=${tV%%|*}
        tV=${tV#*|}
        p1d=${tV%%|*}
        # Calculating the PERCENT-NUMBER for What % amount of FILES are so far Copied:
        # p1=$((200*$p1n/$p1d % 2 + 100*$p1n/$p1d))
        p1=$(( ($p1n*1000/$p1d+5)/10 ))
    fi;
    if [ ! -z $8 ] ; then
        # 2ND "ProgressBarNUMBER|nominator|denominator" for DIRECTORIES
        # "progressBarNUMBER|CopiedNumberOrAmount|TotalNumberOrAmount"
        tV="${8#*|}"
        p2n=${tV%%|*}
        tV=${tV#*|}
        p2d=${tV%%|*}
        # Calculating the PERCENT-NUMBER for What % amount of DIRECTORIES/FOLDERS are so far Copied:
        # p2=$((200*$p2n/$p2d % 2 + 100*$p2n/$p2d))
        p2=$(( ($p2n*1000/$p2d+5)/10 ))
    fi;
    if [ ! -z $9 ] ; then
        # 3RD "ProgressBarNUMBER|nominator|denominator" for SIZE
        # "progressBarNUMBER|CopiedNumberOrAmount|TotalNumberOrAmount"
        tV="${9#*|}"
        p3n=${tV%%|*}
        tV=${tV#*|}
        p3d=${tV%%|*}
        # Calculating the PERCENT-NUMBER for What % amount of DATA-SIZE/MegaBYTES are so far Copied:
        # p3=$((200*$p3n/$p3d % 2 + 100*$p3n/$p3d))
        # p3=$(( ($p3n*1000/$p3d+5)/10 ))
        # We will add PERCENTAGE for FILES & DIRS SIZE, later
        # p3=0
    fi;
    # PERCENT-AMOUNT CAN BE CONVERTED INTO A TEXT-BASED PROGRESS BAR SHOWN ON GUI DIALOG BOX EASILY,
    # we will improve it later, now lets focus on core/important functions, stability, security of other codes

    if [ "$cp" -eq 0 ] ; then
        oped="moved"
    fi;
    if [ "$tymPsd" -gt 60 ] ; then
        tymP="$(( $tymPsd / 60 )) minute(s) & $(( $tymPsd % 60 )) second(s)"
    else
        tymP="$tymPsd second(s)"
    fi;
    # Later, PERCENT % will be shown as a  [******  ]  based ProgressBar on this Pashua GUI dialog box
    L1="${1}ing...[return]"
    L2="From: \"$Src\"[return]"
    L3="To: \"$Dest\"[return]"
    L4="Total $p1d files & $p2d directories ( $pfCTS )[return]"
    L5="So far $oped: ${p1}% : $p1n file(s)[return]"
    L6="So far $oped: ${p2}% : $p2n directory(s)[return]"
    L7="So far $oped: Total Size calculation for Files & Dirs is now off[return]"
    L8="Time Elapsed/Passed since $1 started: $tymP[return]"
    L9="Info will be updated after ${4#*|}-seconds, so PLEASE WAIT..."
    # Adding text box(es) to show all info:
    conf="
        # Introductory text
        txt1Prgrs.type = text
        txt1Prgrs.height = 180
        txt1Prgrs.width = 500
        txt1Prgrs.x = 35
        txt1Prgrs.y = 200
        txt1Prgrs.default = ${L1}${L2}${L3}${L4}${L5}${L6}${L7}${L8}${L9}
        "
        # txt2Prgrs.type = text
        # txt3Prgrs.type = text
        # txt4Prgrs.type = text
    pashua_run "$conf" "$PA_userBase"
}

# ========================================================
# bsd_command_check
# Check that the required BSD command are installed
# ========================================================

function command_check_msg {   # Modified by atErik : adding 'local'
local message1="One or more *BSD commands* to run Portable $appID were not found on \
this machine. You must install the BSD Subsystem package that is in the \
following folder on disk 1 of your Mac OS X installation DVD:\n/Welcome to Mac \
OS X/Optional Installs.\n\nNow quit."
local button=` /usr/bin/osascript << EOT
    tell application "Finder"
    beep
    display dialog "$message1" buttons {"Quit"} \
        with icon caution default button "Quit"
    set result to button returned of result
    end tell
EOT`
if test "$button" == "Quit"; then                # Quit application
    exit 112
fi
}

function bsd_command_check {    # written by Patrick Luby    # Modified by atErik : adding 'local', wait df du cut tail find wc
local commands="awk cp defaults diskutil echo grep ln mkfifo mkdir mv plutil ps rm sed sleep touch wait df du cut tail find wc"
for i in $commands ; do
    if [ ! -x "/usr/bin/$i" -a ! -x "/bin/$i" -a ! -x "/usr/sbin/$i" -a ! -x "/sbin/$i" ] ; then
        # Return 96 + 16 if a command is not found
        command_check_msg;
        exit 112;
    fi
done
}

# ========================================================
# osx_version_check
# Check that the user is running Mac OS X 10.4 or higher
# ========================================================

function version_check_msg {   # Modified by atErik : adding 'local'
local message1="You are running OS X version $version.\n\
Portable $appID can only be opened on Mac OS X 10.4 or higher."
local button=`/usr/bin/osascript << EOT
    tell application "Finder"
    beep
    display dialog "$message1" buttons {"Quit"} \
        with icon caution default button "Quit"
    set result to button returned of result
    end tell
EOT`
if test "$button" == "Quit"; then                # Quit application
    exit 113
fi

}

function osx_version_check {     # written by Patrick Luby    # Modified by atErik : adding 'local'
local version="";
if [ -x "/usr/bin/sw_vers" ] ; then
    # Return 96 + 17 if it is a bad version
    version=`/usr/bin/sw_vers | grep '^ProductVersion:' | awk '{ print $2 }'`
    case "$version" in
        10.[0123]) version_check_msg ; exit 113;;
        10.[0123].*) version_check_msg ; exit 113;;
    esac
fi
}

# ========================================================
# quitApp
# Check if local app is open and quit
# ========================================================

function quitApp {   # Modified by atErik : adding 'local'
    local rv=0;
    if ps cx | grep '[0-9] '"$appBin"'$' > /dev/null; then
        rv=` CDokMsg "$appID is already running on this system" \
         "Only one copy can be run at a time. \
Quit runnig $appID and reopen Portable $appID." "--no-cancel" `
        if [ "$rv" == "1" ] ; then                # Quit application
            exit 0
        fi
    fi
}

# ========================================================
# check_p_asf
# Check and create Portable Application Support folders
# ========================================================

function check_p_asf {   # Modified by atErik : adding 'local'
    # "Read Only" string in till OsX 10.5
    local readonly5=`diskutil info "$PA_userBase" | grep "Read Only" | awk '{ print $3 }'`
    # "Read-Only Volume:" string on OsX 10.6
    local readonly6=`diskutil info "$PA_userBase" | grep "Read-Only Volume" | awk '{ print $3 }'`
    if [ "$readonly5" = Yes ] || [ "$readonly6" = Yes ]; then
        CDokMsgC "Portable $appID is on a locked volume" "Portable $appID can't \
be opened on a locked volume. Now quit." "--no-cancel" > /dev/null
        exit 0
    else
        if [ ! -d "$PA_userPref" ] ; then
            mkdir -p "$PA_userPref"
        fi
    fi
}

# ========================================================
# copy_local_pref
# Copy local preferences to Portable Application
# ========================================================

function select_profile {    # Modified by atErik : adding 'local', "chosen", PDfileOrDirSelect
    local rv=0;
    rvpf=` PDfileOrDirSelect "Select local $appID Profile folder" \
        "Look for a folder named \"********.default\" or similar." \
        "$userPrefBase"  "directory" `
    # rvpf=` "$CD" fileselect --title "Select local $appID Profile folder" \
    #     --text "Look for a folder named \"********.default\" or similar." \
    #     --select-only-directories --with-directory "$userPrefBase" `
    if [ -f "$rvpf/prefs.js" ] ; then
        profilepath="$rvpf"
        export profilepath
    else
        rv=` CDokMsgC "$appID Profile folder not selected" \
            "Sorry you have not chosen/selected $appID Profile folder. You have selected: \"$rvpf\". Try again?" `
        if [ "$rv" == "1" ] ; then
            select_profile
        elif [ "$rv" == "2" ] ; then
            rv=` CDokMsg "Portable $appID now quit" \
                "You have not chosen/selected $appID Profile folder, now Portable $appID quit." \
                "--no-cancel" `
            if [ "$rv" == "1" ] ; then                # Quit application
                exit 0
            fi
        fi
    fi
}

function runCopyPref {    # written by Kevin Hendricks     # Modified by atErik : converting codes for Pashua-dialog based PDprogressBar
    local pfTD=0 ;  # Portable Firefox Total Dirs (Number of total Directories)
    local pfTF=0 ;  # Total Files (Number of total Files)
    local pfTS=0 ;  # "Dir+File Size Not-Counted" ;  # Total Size of all Dirs & Files
    local pfCTD=0 ;  # Total Number of Copied Dirs
    local pfCTF=0 ;  # Ttl_Num of Copied Files
    local pfCTS=$pfTS ;  # Total SIZE(MegaBytes/...) Copied Dirs & Files
    local pfCTP=0 ;  # Number of seconds/Time Passed
    # local pfCTDp=0 ;  # Percent % of Copied Dirs
    # local pfCTFp=0 ;  # % of Copied Files
    # local pfCTSp=0 ;  # % of Copied Dirs+Files SIZE
    local UniqNumbr=5 ;  # an Unique Number (interger number), except "1" & except What Other OsxPortableFirefox Using
    local FIFO_pOsxFt="/tmp/pOsxFt${UniqNumbr}" ;  # temp purpose fifo file-name . It needs to have an UNIQUE-NUMBER in filename
    local FIFO_pOsxFps="/tmp/pOsxFps${UniqNumbr}" ;  # contains fifo file-name for Source-profile folder-name
    local FIFO_pOsxFpd="/tmp/pOsxFpd${UniqNumbr}" ;  # ... Destination-profile folder-name
    local i=0 s=0
    rm -f "/tmp/pOsxFt1" ;  # a temp fifo to pass the UniqNumber number to sub-process
    mkfifo "/tmp/pOsxFt1"
    rm -f "$FIFO_pOsxFt" ;  # remove previous fifo file (if it wasn't removed earlier)
    mkfifo "$FIFO_pOsxFt" ;  # create a (temp) fifo file, as its persistent/accessible across different processes
    rm -f "$FIFO_pOsxFps"
    mkfifo "$FIFO_pOsxFps"
    rm -f "$FIFO_pOsxFpd"
    mkfifo "$FIFO_pOsxFpd"
    # Getting directory-location of profile from "profilepath" ENV Variable:
    rvpf="$profilepath"
    # Getting TOTAL-NUMBER of files & sub-dirs count, in SOURCE-PROFILE folder/directory, before copy-process:
    pfTD=`find "$rvpf/" -type d -print | wc -c`
    pfTF=`find "$rvpf/" -type f -print | wc -c`
    # For now, avoiding finding total size of all files+dirs, as it takes longer time:
    # pfTS=0
    PDprogressBarDirsFilesCpOrMv  "Copy|Copying $appID Profile"  "$rvpf"  "$PA_userPref" \
        "${pfCTP}|$s"  "-"  "-"  "p1|$pfCTF|$pfTF"  "p2|$pfCTD|$pfTD"
    # "$CD" progressbar --indeterminate --title "Copying $appID Profile" \
    #     --text "Copying \"$rvpf\". Please wait..." < /tmp/hpipe &
    # FD = File Descriptor
    # exec 3<> /tmp/hpipe
    exec 3<> "$FIFO_pOsxFt"
    exec 4<> "$FIFO_pOsxFps"
    exec 5<> "$FIFO_pOsxFpd"
    exec 6<> "/tmp/pOsxFt1"
    # echo -n . >&3
    echo -n "$rvpf" >&4
    echo -n "$PA_userPref" >&5
    echo -n "$UniqNumbr" >&6
    # SECONDS=0 ; sleep 5 ; echo $SECONDS ; # output will be "5" after 5-seconds-of-sleep
    SECONDS=0
    # Below section inside { ... } will be run under a different sub-process in background (to copy files)
    # below section can be another script-file too, & then it can be run/initiated/started by this function
    {
        # This is a sub-process section code, (it is to be run/executed in the background)
        # Obtaining data from fifo pipe(s):
        exec 6<> "/tmp/pOsxFt1"
        UniqN="$(< "/tmp/pOsxFt1")"
        wait
        # exec 6>&-
        # wait
        exec >"/tmp/pOsxFt1"
        # Deleting the fifo pipe(s):
        rm -f "/tmp/pOsxFt1"
        exec 4<> "/tmp/pOsxFps${UniqN}"
        srcProfile="$(< "/tmp/pOsxFps${UniqN}")"
        wait
        # exec 4>&-
        # wait
        exec >"/tmp/pOsxFps${UniqN}"
        rm -f "/tmp/pOsxFps${UniqN}"
        exec 5<> "/tmp/pOsxFpd${UniqN}"
        destProfile="$(< "/tmp/pOsxFpd${UniqN}")"
        wait
        # exec 5>&-
        # wait
        exec >"/tmp/pOsxFpd${UniqN}"
        rm -f "/tmp/pOsxFpd${UniqN}"
        # Below fifo/pipe we will use to transfer data back to the function which created this sub-process:
        exec 3<> "/tmp/pOsxFt${UniqN}"
        # Add your commands/work below, for which a progressive bar/info-msg box will be shown+updated:
        # At-end of your commands/work, write "pfC_done" or "pfC_fail" word/data into fifo/pipe
        # BEGIN all of your commands/work here:
            # cp -R "$rvpf/" "$PA_userPref"
            # cp -R "$srcProfile/" "$destProfile" && { echo -n "pfC_done" >&3 ; } || { echo -n "pfC_fail" >&3 ; };
            cp -R "$srcProfile/" "$destProfile" && {
                echo -n "pfC_done" > "/tmp/pOsxFt${UniqN}" ;
            } || {
                echo -n "pfC_fail" > "/tmp/pOsxFt${UniqN}" ;
            };
        # END of your commands.
        # deleting the fifo, which we were using to send "done"/"fail" msg
        wait
        exec >"/tmp/pOsxFt${UniqN}"
        rm -f "/tmp/pOsxFt${UniqN}"
    } &
    # ... Back to the Function which initiated/ran the above sub-process (in background) to Copy files.
    # when fifo/pipe still exists then delete each, except one fifo that we will monitor:
    sleep 1
    if [ -p "/tmp/pOsxFt1" ] ; then
        exec 6>&-
        wait
        # sleep 1
        exec >"/tmp/pOsxFt1"
        rm -f "/tmp/pOsxFt1"
    fi;
    if [ -p "$FIFO_pOsxFps" ] ; then
        exec 4>&-
        wait
        # sleep 1
        exec >"$FIFO_pOsxFps"
        rm -f "$FIFO_pOsxFps"
    fi;
    if [ -p "$FIFO_pOsxFpd" ] ; then
        exec 5>&-
        wait
        # sleep 1
        exec >"$FIFO_pOsxFpd"
        rm -f "$FIFO_pOsxFpd"
    fi;
    # Repeatedly check if background operation completed or not:
    while [ "$(< "$FIFO_pOsxFt")" != "pfC_done" ] || [ "$(< "$FIFO_pOsxFt")" != "pfC_fail" ] ; do
        i=$(( $i+1 ))
        # setting different update times for the PDprogressBar dialog
        case "$i" in
            (1) s=2; ;;
            (2|3|4) s=3; ;;
            (5) s=4; ;;
            (*) s=5; ;;
        esac
        sleep $s
        # Finding-out the number of files & dirs so-far copied into DESTINATION profile folder/directory:
        pfCTD=`find "$PA_userPref/" -type d -print | wc -c`
        pfCTF=`find "$PA_userPref/" -type f -print | wc -c`
        # pfCTS="Dir+File Size Not-Counted"
        pfCTP=$SECONDS
        # Finding PERCENT of files & dirs which are copied
        # pfCTFp=$((200*$pfCTF/$pfTF % 2 + 100*$pfCTF/$pfTF))
        # pfCTFp=$(( ($pfCTF*1000/$pfTF+5)/10 ))
        # pfCTDp=$((200*$pfCTD/$pfTD % 2 + 100*$pfCTD/$pfTD))
        # pfCTFp=$(( ($pfCTD*1000/$pfTD+5)/10 ))
        # pfCTSp=0
        # Show updated info on PDprogressBar dialog box:
        PDprogressBarDirsFilesCpOrMv  "Copy|Copying $appID Profile"  "$rvpf"  "$PA_userPref" \
            "${pfCTP}|$s"  "-"  "-"  "p1|$pfCTF|$pfTF"  "p2|$pfCTD|$pfTD"
        if [ ! -p "$FIFO_pOsxFt" ] ; then
            break
        fi;
    # done < "$FIFO_pOsxFt"
    done
    # We will erase the last fifo with Unique number, which we were using to receive "done"/"fail" msg:
    if [ -p "$FIFO_pOsxFt" ] ; then
        exec 3>&-
        # wait
        rm -f "$FIFO_pOsxFt"
    fi
}

function check_asf {
    if [ -d "$PA_userPref" ] ; then
        # delete PA_userPref if it still exist
        rm -Rf "$PA_userPref"
    else
        mkdir -p "$PA_userPref"
    fi
}

# copy Preferences Folder
function copy_pf {    # Modified by atErik : adding 'local', PDbubble
    local userPrefSize=`du -hc "$userPrefBase" | cut -f1 | tail -1`
    local freeSize=`df -H "$PA_userBase" | tail -1 | awk '{print $4}'`
    local bUserPrefSize=`du -c "$userPrefBase" | cut -f1 | tail -1`
    local bFreeSize=`df "$PA_userBase" | tail -1 | awk '{print $4}'`
    local rv=0;
    if [ $bUserPrefSize -lt $bFreeSize ] ; then
        # Getting directory-location of profile from "profilepath" ENV Variable:
        rvpf="$profilepath"
        rv=` CDokMsg "Copy $appID Profile" \
            "Your $appID Profile folder \"$rvpf\" is $userPrefSize. \
You have $freeSize available. Copy to Portable $appID?" `
        if [ "$rv" == "1" ] ; then
            if check_asf ; runCopyPref ; then
                touch -f "$copy_pref"
                PDbubble "$appID Profile copied" \
                    "Local $appID Profile copied to Portable $appID with success." \
                    "$appICON"  "20"
                # "$CD" bubble --title "$appID Profile copied" --text "Local \
                #     $appID Profile copied to Portable $appID with success." \
                #     --icon-file "$appICON"
            else
                PDbubble "$appID Profile copy error" \
                "An error occurred copying $appID Profile to Portable $appID." \
                "$cautionICON"  "-"
                # "$CD" bubble --title "$appID Profile copy error" \
                # --text "An error occurred copying $appID Profile to Portable $appID." \
                # --icon-file "$cautionICON" --no-timeout
            fi
        fi
    else
        CDokMsgC "No space to copy $appID Profile" \
            "Your $appID Profile folder is $userPrefSize. \
You have $freeSize available. There is not enough space. Portable $appID will \
open without copy existing $appID Profile."  "--no-cancel" > /dev/null
    fi
}

function copy_local_pref {  # Modified by atErik : adding 'local'
    local text=""
    local informativeText=""
    local rv=0
    if [ ! -f "$copy_pref" ] && [ -d "$userPrefBase" ] ; then
    beep
    text="Copy local Profile"
    informativeText="Copy the existing $appID Profile \
on this system to Portable $appID?"
    rv=` PDmultiButtons  "$text"  "$informativeText"  "$appICON" \
        "button1_Copy"  "button2_Don't_Copy"  "button3_Never" `
    # rv=` "$CD" msgbox --no-newline --icon-file "$appICON" \
    #     --text "$text" --informative-text "$informativeText" \
    #     --button1 "Copy" --button2 "Don't Copy" --button3 "Never" `
        if [ "$rv" == "1" ] ; then
            select_profile
            copy_pf
        elif [ "$rv" == "3" ] ; then
            touch -f "$copy_pref" 
        fi
    fi
}

# ========================================================
# bkup/recover cache        bu=bkup=backup
# BackUp existing cache
# ========================================================

function bkup_cache {
    if [ -d "$userCache" ] ; then
        mv "$userCache" "$userCache.pabu"
    fi
}

function recover_cache {
    if [ -d "$userCache.pabu" ] ; then
        mv "$userCache.pabu" "$userCache"
    fi
}

function remove_p_cache {
    if [ -d "$userCache" ] ; then
        rm -rf "$userCache"
    fi
}

# ========================================================
# run
# Open Portable Application
# ========================================================

function run_app {
    "$PA_userBase/$appID.app/Contents/MacOS/$appBin" -profile "$PA_userPref"
}

# ========================================================
# open_p_app
# Run Portable Application script
# ========================================================

function set_p_app {
    bkup_cache            # Backup exixting Cache folder
}

function close_p_app {
    remove_p_cache        # Remove portable cache
    recover_cache        # Restore existing cache
}

function open_p_app {    # Modified by atErik : PDbubble
    if set_p_app ; then
        PDbubble "Portable $appID setup ok" \
            "Portable $appID open with success."  "$appICON"  "-" &
        # "$CD" bubble --title "Portable $appID setup ok" \
        #     --text "Portable $appID open with success." --icon-file "$appICON" &
    else
        CDokMsgC "Portable $appID setup error" \
            "An error occour while opening portable preferences. Now quit." "--no-cancel" > /dev/null
        close_p_app
    exit 0
    fi
    run_app                 # Run application from external drive
    if close_p_app ; then
        PDbubble "Portable $appID quit" \
            "Portable $appID quit with success."  "$appICON" &
        # "$CD" bubble --title "Portable $appID quit" \
        #     --text "Portable $appID quit with success." --icon-file "$appICON" &
    else
        CDokMsgC "Portable $appID quit error" \
            "Portable $appID can't restore local cache." "--no-cancel" > /dev/null
    fi
}

bsd_command_check
osx_version_check
check_p_asf
quitApp
copy_local_pref
open_p_app
exit 0

i will keep updating above codes in SCRIPT, (whenever possible).

and add more info on how to change the old Platypus into new one, in the next post, for this topic/thread.

Please HELP to solve this (updating the old Platypus & changing/switching
the CocoaDialog into Pashua dialog),
so that We/users can (continue to) use PortableFirefox/etc on 64bit/Catalina/… macOSX.

Please SHARE+add your HELPFUL suggestions/codes/improvements, THANKS in advance.

WHAT I'M WORKING-ON, trying to solve/figure-out (now or when i checked this last time) :

  • in v4.1 script, inside some function, why "$rvpf" variable was used in such way that it holds a/some path,
    but this variable isn't defined in main script, ( so i changed code so it gets a path value from "$profilepath" env var,
    the "$profilepath" was exported as env var in function select_profile ,
    when multiple PortableFirefox (from different parent dirs) will be run then using same "profilepath" env var will conflict or not ?
  • solved (partially, for now) : Pashua doesn't support ProgressBar type of dialog
    so i could not change that part of the old-codes.
    but it must be changed into something, (as CocoaDialog does not work in Catalina).
    So i have planned to show a text-based BAR/line on a GUI dialog, & update it after (few/one)-second(s),
    dialog will be shown in same x/y co-ordinate, & auto-closed after 1 second,
    & then updated text-based BAR/line will be shown at same co-ordinate,
    until 100% is reached, or job is done.

EDIT: utc: Jun6, 2020, 05:08am: updated codes (to v4.1.3), changed codes related to fifo, "gbN" button type, etc
EDIT: utc: Jun5, 2020, 03:12pm: updated codes (to v4.1.2) with a (Pashua based) ProgressBar function to show what % of (profile-storage) files+dirs are copied.
EDIT: utc: Jun4, 2020, 01:10pm: added a separate copyright notice.
EDIT: utc: Jun4, 2020, 10:50am: a note on Pashua dialog's lack of ProgressBar.
EDIT: utc: Jun4, 2020, 10:30am: added updated codes v4.1.1 here for the PA Firefox OSX "script" v4.1, & added hash/checksum of few files.
EDIT: utc: Jun4, 2020, 09:00am: Thanks to Dev Carlo Gandolfi for this forum, & for allowing to comment on script page.

Hi Community & Developer(s), please let us help each others
to update the code, to run PortableApps in 64-bit macOSX, specially the PortableFirefox for OSX,
Please let us collaborate here in forum:
http://www.freesmug.org/forum/t-13404441/hi-community-devs-lets-help-each-others-to-run-osxportableap
(thanks in advance).

by aterikaterik, 04 Jun 2020 08:43

Tanks for your support but this is an old issue. Chromium FreeSMUG builds have not Sparkle update since Jan. 2015.

We are unable to see the crash logs. Please provide some more information so that we can help you out

I typed in the address bar:
chrome://plugins/
After that I disabled the Flash plugin, enabled again, restarted chrome… and fixed. Hope it helps someone.

Till today all new Chromium Versions works well now!


Nice Greetings
Fred

Sorry no, project is no more supported.
Also the concept of portable apps on OSX is outdated with a lot of concern about security and privacy.

Hello,
I rely on portable apps [firefox, thunderbird] for my job, and I was wondering if there would be a chance that an update that makes these apps compatible with Catalina would be a project the former developer could consider? What would it take to get this going?

Much Appreciated, M

With the new FreeSMUG build Chromium Version 79.0.3945.88 (Entwickler-Build) (64-Bit) it works now on my both Macs.
What was wrong in the other FreeSMUG Chromium builds?


Nice Greetings
Fred

With the new FreeSMUG build Chromium Version 79.0.3945.88 (Entwickler-Build) (64-Bit) it works now on my both Macs.
What was wrong in the other FreeSMUG Chromium builds?


Nice Greetings
Fred

page 1123...next »
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License