#code=936
ENVI^ EnviMode=1    //避免意外错误，空变量，外部变量，避免反复解释   

SET$ &NL=0d 0a
SET &FBINSTCMD=fbinst

FIND $udautolink=%~1,
{
//IFEX udautolink.LOG, LOGS * udautolink.LOG
    MSTR &&arg=<2->%*
    CALL udautolink  %&arg%   
    EXIT FILE
}
FIND $--udload=%~1,
{
//IFEX  udload.LOG,LOGS * udload.LOG
    MSTR &&arg=<2->%*
    MSTR &&FN=<2>%&arg%
    CALL UD_RUNEXE    %&arg% 
    EXIT FILE
}
FIND $--udloadexef=%~1,
{
//IFEX  udloadexef.LOG,LOGS * udload.LOG
    MSTR &&arg=<2->%*
    MSTR &&FN=<2>%&arg%
    FEXT &ext=%&FN%
    CALL UD_RUNEXEF    %&arg% 
    EXIT FILE
}

FIND $--loadico=%~1,
{
//IFEX  udLoadIcon.LOG,LOGS * udLoadIcon.LOG
    CALL udLoadIcon  %2
    EXIT FILE
}
EXIT FILE

//  udLoadIcon  
_SUB udLoadIcon *
    FIND $:=:%&UDICON%,!!  SET &UDICON=%SystemDrive%\UDIcon
    IFEX %&UdIcon%\Icon_Loaded,  EXIT _SUB 
    FIND $:=:%~1,!!   EXIT _SUB 
    EXEC =*%&FBINSTCMD%  %~1 output "PETOOLS/*.ico"        %&UDICON%\
    EXEC =*%&FBINSTCMD%  %~1 output "PETOOLS/*/*.ico"      %&UDICON%\
    EXEC =*%&FBINSTCMD%  %~1 output "PETOOLS/*/*/*.ico"    %&UDICON%\
    EXEC =*%&FBINSTCMD%  %~1 output "PETOOLS/*/*/*/*.ico"  %&UDICON%\
    PUTF -dd -len=0  %&UdIcon%\Icon_Loaded,0,zero
_END

// udAutoLink  [--icon  默认icon文件] [--exef]  设备  文件 参数 
_SUB udAutoLink
    //All Users的开始菜单
    NAME  &&NM1=%StartMenu%
    FDIR  &&P1=%StartMenu%\..
    SET &StartMenuAll=%P1%\All Users\%NM1%
    IFEX  %&StartMenuAll%,!   SET &StartMenuAll=%StartMenu%

    SET &DEV=(hd0)
    SET &UDICON=%SystemDrive%\UDIcon
    SET &&arg=%*
    SET &ICON0=
    SET &bexef=
    SET &&AsUsr=
    MSTR &&a1=<1>%&arg%
    FIND  $%&a1%=--icon,!!   TEAM SET &ICON0=%2| MSTR &&arg=<3->%&arg%
    MSTR &&a1=<1>%&arg%
    FIND  $%&a1%=--exef,!!   TEAM SET &bexef=exef| MSTR &&arg=<2->%&arg%
    MSTR &&a1=<1>%&arg%
    FIND  $%&a1%=--doc,!!    TEAM SET &bexef=doc|  MSTR &&arg=<2->%&arg%
    MSTR &&a1=<1>%&arg%
    FIND  $%&a1%=--userexe,!!   TEAM MSTR &AsUsr=<~2>%&arg%| MSTR &&arg=<3->%&arg%
    MSTR &&DEV=<1>%&arg%
    MSTR &&args=<3->%&arg%
    LSTR  &&D1=1,%&DEV%
    SET &allud=0
    SET   &ALL=
    SET   &DEV0=
    FIND  $%&DEV%=(ud),!!   SET &allud=1
    FIND  $%&D1%=*,!!   TEAM SET &allud=2| MSTR &&DEV=2,1000,%&DEV%| SET &ALL=%&DEV%| SET &DEV0=%&DEV%
    FIND  $%&DEV0%=(ud),!!   SET &DEV0=
    MSTR &&FN=<2>%&arg%
    FDIR  &&DIR1=Z:\%&FN%
    MSTR  &DIR1=4,1000,%&DIR1%
    SET &ALL=%&DEV%
    SET &ALLDEV=%&DEV%
    SET &bmany=0
    //FIND  $0=%&allud%,! 
    {*
        SET ALL=%&DEV0%
        EXEC*  &&ALL0=*%&FBINSTCMD%  -l 
        SED &ALL0=,:, ,%&ALL0% 
        forx *NL &ALL0,&&line, TEAM MSTR &&V1=<1>%&line%| FIND $%&DEV0%=%&V1%,!  SET   ALL=%&ALL%   %V1%
        MSTR &DEV0=<1>%&ALL%
        MSTR &DEV1=<2>%&ALL%
        FIND $:=:%&DEV1%,!  SET bmany=1
        FIND  $0=%&allud%,!    SET   ALLDEV=%&ALL%
    }
    MSTR &&DEV1=<1>%&ALLDEV%

    CALL  udLoadIcon  %&DEV1% 
    forx *  %&ALLDEV%,&&DEV,  CALL udautolink1  %&DEV%  %&FN%  %&args% 
_END

// udAutoLink1   设备  UD文件 参数 
_SUB udAutoLink1
    SET &PRE=
    FIND $%&bmany%=1,!! FIND $%&DEV0%=%&DEV%,!  SET &PRE=[%&DEV%]
    EXEC* &&UDList0EXE=*%&FBINSTCMD%  %&DEV% filelist   %&FN% 
    EXEC* &&UDList0=*%&FBINSTCMD%  %&DEV% filelist   "%&DIR1%/*.*" 
    SET &UDList0=%&NL%%&UDList0%%&NL%
    forx *NL &UDList0EXE,&&line,
    {*
        SET &ICON=%&ICON0%
        SET &ICONF=%&NL%%&line%.ico%&NL%
        @LPOS*   &&P2=%&ICONF%,1,%&UDList0%
        IFEX $%&P2%>0,!! FDIR --fullfile &ICON=%&UDICON%\%&line%.ico

        FDIR --fullfile &&LKNAME=%&StartMenuAll%\%&PRE%%&line%
        FNAM &&NM=%&LKNAME%
        FDIR &&LKDIR=%&LKNAME%
        PATH  %&LKDIR%
        SET &ext=wim
        
        FIND $exef=%&bexef%, SET  ext=exe
        FIND $doc=%&bexef%,  FEXT &ext=%&line%
        FIND $wim=%&ext%,!!     LINK %&LKDIR%\%&NM%,%MyName%, %&AsUsr% EXEC !fbinst --udload "%&line%" %TEMP%,%&ICON%
        FIND $exef=%&bexef%,!!  LINK %&LKDIR%\%&NM%,%MyName%, %&AsUsr% LOAD  "%CurFile%" --udloadexef %&DEV% "%&line%" %&args%,%&ICON% 
        FIND $wim=%&ext%,! FIND $exef=%&bexef%,!  LINK %&LKDIR%\%&NM%,%MyName%, %&AsUsr% LOAD  "%CurFile%" --udload %&DEV% "%&line%" %&args% ,%&ICON%

        @LPOS*   &&P2=%&NL%%&line%.PINT_StartMenu%&NL%,1,%&UDList0%
        IFEX $%&P2%>0,!! PINT %&LKDIR%\%&NM%.LNK,StartMenu

        @LPOS*   &&P2=%&NL%%&line%.PINT_TaskBand%&NL%,1,%&UDList0%
        IFEX $%&P2%>0,!! PINT %&LKDIR%\%&NM%.LNK,TaskBand

        @LPOS*   &&P2=%&NL%%&line%.Desktop%&NL%,1,%&UDList0%
        IFEX $%&P2%>0,!! FILE  %&LKDIR%\%&NM%.LNK=>%Desktop%
    }

_END

/////////////////
// UD_RUNEXEF  UD磁盘 UD运行文件   参数 
_SUB UD_RUNEXEF * 
    SET &udisk=%~1
    FIND $:=:%udisk%,!!  SET udisk=(ud)
    ENVI &&nm2=%TEMP%\UDUPLOAD\%~2
    FDIR --fullfile  &&nm2=%&nm2%
    NAME -ext &&nm0=%&nm2%
    FDIR &&dir2=%&nm2%
    @IFEX %&dir2%\,!  PATH %&dir2%
    exec  =*%&FBINSTCMD% %udisk% output  %2   %TEMP%\UDUPLOAD\ 
    MSTR &&args=<3->%*
    //TEAM SET &&LastDir=%_CD%| PATH @"%&dir2%"| exec  --pid:&&pid   $"%&nm0%"  %&args%| PATH @%&LastDir% 
    EXEC  --pid:&&pid --exe:"%&nm2%"  --wd:"%&dir2%"   "%&nm0%"  %&args%  
    IFEX $%&PECMDVER%<201201800000,!! EXEC --exe:"%MyName%"  *del  WAIT  *%&pid%  -del "%&nm2%"  
    IFEX $%&PECMDVER%<201201800000,!  WAIT  *syscmd THREAD$#  WAIT  *%&pid%  -del "%&nm2%"  
_END


// UD_RUNEXE  UD磁盘 UD运行文件   参数 
_SUB UD_RUNEXE * 
    SET &udisk=%~1
    FIND $:=:%udisk%,!!  SET udisk=(ud)
    ENVI &&nm2=%TEMP%\UDUPLOAD\%~2
    FDIR --fullfile  &&nm2=%&nm2%
    NAME -ext &&nm0=%&nm2%
    FDIR &&dir2=%&nm2%
    @IFEX %&dir2%\,!  PATH %&dir2%
    exec  =*%&FBINSTCMD% %udisk% output  %2   %TEMP%\UDUPLOAD\ 
    pecmd   REGI HKCU\Software\WimTool\AutoMountPath=C:\TOOLS\WimTool\MountPath
    MSTR &&args=<3->%*
    FEXT  &&ext=%&nm2%
    FIND $wim=%&ext%,!!  exec  --pid:&&pid   wimtool "%&nm0%"   /Openfile
    FIND $wim=%&ext%,!   TEAM SET &&LastDir=%_CD%| PATH @"%&dir2%"| exec  --pid:&&pid   $"%&nm0%"  %&args%| PATH @%&LastDir% 
    // 用 EXEC  $
    //EXEC  --pid:&&pid --exe:"%&nm2%"  --wd:"%&dir2%"   "%&nm0%"  %&args%  
    IFEX $%&PECMDVER%<201201800000,!! EXEC --exe:"%MyName%"  *del  WAIT  *%&pid%  -del "%&nm2%"  
    IFEX $%&PECMDVER%<201201800000,!  WAIT  *syscmd THREAD$#  WAIT  *%&pid%  -del "%&nm2%"  
_END
_ENDFILE

//                 　　　  　ＵＤＴＯＯＬ　 
// 
//  Fbinst扩展工具
//  （1）快捷方式支持自己的图标文件。 
//       ABC文件同位置放一个ico后缀的文件，即为ABC快捷方式的图标文件。
//       如 PETOOLS/DIR1/APP1.EXE.ICO   PETOOLS/DIR1/APP1.WIM.ICO   PETOOLS/DIR1/APP1.TXT.ICO
//  （2）隐藏Fbinst的黑窗口。 
//  （3）可带运行参数。 --udloadexef    --udload  
//  （4）可以自动PINT到任务栏、开始菜单，可以拷贝到桌面。
//        
// 
//用法及参数：
//1： LOAD 本文件 udautolink  [--icon  默认icon文件] [--exef|--doc] [--userexe PECMD参数名]  UD设备  文件 [参数]
//     --exef: 指定EXE等 windows 内部可执行文件。 此时可带参数。用本文件的 --udloadexef 运行
//     --doc: 指定EXE等 windows 内部可执行文件。 此时可带参数。用本文件的 --udload 运行.
//     否则用 fbinst --udload 来运行。此时不可带参数。
//       --userexe   "EXEC  --user:abc --passwd*l6nA  PECMD"
//      这样连接以 abc 用户运行
//
//2： LOAD 本文件 --udloadexef     UD设备  文件 [参数]
//     运行EXE等 windows 内部可执行文件。 可带参数。此时EXE的后缀可以随便写。
//     用【exec --exe:文件 命令行】  运行。
//
//3： LOAD 本文件 --udload     UD设备  文件 [参数]
//     用【exec $命令行】  运行。 可带参数。此时根据文件后缀来运行的，不可改后缀！
//
//4： LOAD 本文件 --loadico     UD设备  
     //加载ICO

