## Coverage profiler SDK - Pakovací komponenty

### Pakovací komponenta BIX

BIX je WIN32 konzolová aplikace pro kompresi a dekompresi souborů. Dokáže komprimovat obsah adresáře včetně podadresářů.

    #INCLUDE "Main.h"

    *************************************************************
    * Procedura, která vrátí objekt pro pakování a rozpakování
    *************************************************************
    PROCEDURE GetInterface(loObj)
    *@loObj - Vlastnost do které se zapíše odkaz na objekt pro pakování
    loObj=CREATEOBJECT("_bix_Archiver")

    *************************************************************
    * Vlastní třída pro pakování a rozpakování
    *************************************************************
    DEFINE CLASS _bix_Archiver AS Custom
       Name="_bix_Archiver"

       * Dekompresní metoda
       PROCEDURE Decompress(loPack)
          * loPack - Objekt pro rozpakování
          LOCAL lcDir,lcProgram,lctmpFile,lcUnpackPath,liz,lcStartupInfo,lcProcessInfo,liRet
          LOCAL ARRAY laDir(1)

          lctmpFile=loPack.File_S && Převezmi název zdrojového souboru
          lcDir=ExtractPathFromFile(lctmpFile) + CHR(0)
          lcUnpackPath=GetTempPathEx()+SYS(2015)+"\" && Název pomocného adresáře
          =MKD(lcUnpackPath) && Vytvoř pomocný adresář

          * Vytvoř C++ strukturu z VFP objektu
          lcStartupInfo=loPack.SI.CreateString()
          lcProcessInfo=loPack.PI.CreateString()

          lcProgram = loPack.PU.D_File+" e "+lctmpFile+" -o"+lcUnpackPath+" -y" + CHR(0)
          =SetLastError(0) && Resetuj chybu pro vlákno
          liRet=_PP_ProcessFailed
          IF CreateProcess(.NULL., lcProgram, 0, 0, 1,  NORMAL_PRIORITY_CLASS, 0, @lcDir, @lcStartupInfo, @lcProcessInfo)#0
             * Výborně neselhalo to
             loPack.PI.ReadString(@lcProcessInfo) && Načti informace o spuštěném procesu.
             * Nyní běhej ve smyčce tak dlouho, dokud proces běží
             DO WHILE WaitForSingleObject(loPack.PI.hProcess, 250 ) = WAIT_TIMEOUT

             ENDDO
             =CloseHandle(loPack.PI.hProcess) && Uzavři handle
             liz=ADIR(laDir,lcUnpackPath+"*.*","ASRH") && Načti všechny soubory

             liRet=IIF(liz=0,_PP_PAUNFailed,;
                   IIF(MoveFile((lcUnpackPath+laDir(1,1)+CHR(0)),(loPack.File_D+CHR(0)))=1,_PP_ErrOK,_PP_PAUNFailed))

          ENDIF
          =RemoveDirectoryAll(lcUnpackPath) && Zlikviduj pracovní cestu
          RETURN liRet
       ENDPROC

       * Kompresní metoda
       PROCEDURE Compress(loPack)
          * loPack - Objekt pro zpakování

          LOCAL lcDir,lcProgram,lcStartupInfo,lcProcessInfo,liRet,liExitCode

          lcDir=ExtractPathFromFile(loPack.File_S) + CHR(0) && Zjisti adresář, ve kterém se soubor nachází.
          lcProgram = loPack.PU.C_File+" a "+loPack.File_D+" "+ExtractFileFromFile(loPack.File_S) + CHR(0)

          * Vytvoř C++ strukturu z VFP objektu
          lcStartupInfo=loPack.SI.CreateString()
          lcProcessInfo=loPack.PI.CreateString()

          =SetLastError(0)&& Resetuj chybu pro vlákno
          liRet=_PP_ProcessFailed
          IF CreateProcess(.NULL., lcProgram, 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, @lcDir, @lcStartupInfo, @lcProcessInfo)#0
             * Výborně neselhalo to
             loPack.PI.ReadString(@lcProcessInfo) && Načti informace o spuštěném procesu.

             * Nyní běhej ve smyčce tak dlouho, dokud proces běží
             liExitCode=STILL_ACTIVE
             DO WHILE liExitCode=STILL_ACTIVE
                =Sleep(500) && Počkej půl vteřiny
                =GetExitCodeProcess(loPack.PI.hProcess,@liExitCode ) && Zjisti návratový hodnotu z procesu
             ENDDO

             =CloseHandle(loPack.PI.hProcess) && Uzavři handle
             liRet=_PP_ErrOK
          ENDIF
          RETURN liRet
       ENDPROC
    ENDDEFIN