#COMPILE EXE "linkexec.exe"
#DIM ALL
#RESOURCE "linkexec.pbr"
$VER = "0.3"

'------------------------------------------------------------------------------
'   ** Changelog **
'------------------------------------------------------------------------------
' - v0.3 (2026-01-21)
'  o fix for Wine 11.0 breaking 'start.exe' retrocompatibility
' - v0.2 (2025-10-07)
'  o propose to install program as a Linux App
'  o improve behavior under Linux
' - v0.1 (2025-04-23)
'  o initial release
'------------------------------------------------------------------------------

MACRO MyMsgBox(hd,m,t,st) = MessageBox(hd,m,t,st)

'------------------------------------------------------------------------------
'   ** Includes **
'------------------------------------------------------------------------------
#INCLUDE ONCE "WIN32API.INC"
#INCLUDE ONCE "inc/SHORTCUT.INC"
#INCLUDE ONCE "inc/EXE2UNIX.INC"
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'   ** Main Application Entry Point **
'------------------------------------------------------------------------------
FUNCTION PBMAIN()
    LOCAL lnk   AS LINKTYPE
    LOCAL arg     AS STRING
    LOCAL s     AS STRING

    ' Create exe icon in Unix dock and Unix file explorer
    Me2Unix 1, 1 ' askConfirmation=%TRUE, showInAppMenu=%TRUE

    s = TRIM$(COMMAND$(1), ANY $SPC+$TAB+$DQ)

    ' If no argument passed: select source file
    IF RIGHT$(LCASE$(s), 4) <> ".lnk" THEN
        DISPLAY OPENFILE 0, , , "Open shortcut...", "", _
            CHR$("Windows shortcut (*.lnk)", 0, "*.lnk", 0), "", "", _
            %OFN_FILEMUSTEXIST OR %OFN_NODEREFERENCELINKS OR _
            %OFN_SHOWHELP OR %OFN_NONETWORKBUTTON OR %OFN_ENABLESIZING _
            TO s
        IF s = "" THEN EXIT FUNCTION ' canceled by user
    END IF

    ' Get the remaining arguments
    arg = TRIM$(REMOVE$(COMMAND$, COMMAND$(1)))

    ' Parse shortcut filepath from argument
    lnk.zLinkFolder = PATHNAME$(PATH, s)
    lnk.zLinkName   = PATHNAME$(NAMEX, s)

    ' Read all fields shortcut
    ReadShortcut(lnk)

    ' Merge arguments
    lnk.zArguments = TRIM$(lnk.zArguments + " " + arg)

    ' Launch the target program with its parameters, in the specified workdir
    SHELLEXECUTE BYVAL 0, "open", lnk.zExeName, lnk.zArguments, lnk.zWorkDir, %SW_SHOWNORMAL

END FUNCTION
'------------------------------------------------------------------------------
