Total Commander Plugins(PAK) in PB, scan ISO-Files

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Total Commander Plugins(PAK) in PB, scan ISO-Files

Beitrag von Rings »

Hallo,
zum Wochenende was tolles von mir,
Hier ist der source um Total Commander-Plugin's zu
laden und auszuführen.
Es gibt 3 verschiedene Arten von total commander plugins
dieses ist die Implemetation für packer plugins.
Plugin's können von der totalcommanderwebsite
runtergeladen werden,
als beispiel hier das iso plugin.

zum testen passt das ISOfile an.

Code: Alles auswählen


; load and use Total Commander plugin's
; here the PACKER implementation
; Written by Siegfried Rings 4.september,2008 in 1 hour
; (C) by Siegfried Rings
; USE THE SOURCE, luke


#Lib=1
dllname.s="d:\isotest\iso.wcx" ;This is the total commanderplugin (A std DLL file)
isofile.s="d:\isotest\test.iso"


Structure tHeaderData ;=packed record
   ArcName.s{260};:array [0..259] of char;
   FileName.s{260};:array [0..259] of char;
   Flags.l
   PackSize.l
   UnpSize.l
   HostOS.l
   FileCRC.l
   FileTime.l
   UnpVer.l
   Method.l
   FileAttr.l;:longint;
   CmtBuf.l;:pchar;
   CmtBufSize.l
   CmtSize.l
   CmtState.l;:longint;
EndStructure

Structure tOpenArchiveData
    ArcName.l;char* 
    OpenMode.l;int 
    OpenResult.l;int 
    CmtBuf.l;char* 
    CmtBufSize.l;int
    CmtSize.l;int 
    CmtState.l;int 
EndStructure

  ;These are the results of a operation
  #E_NO_ERROR =        0;
  #E_END_ARCHIVE=     10;       {No more files in archive}
  #E_NO_MEMORY=       11;       {Not enough memory}
  #E_BAD_DATA=        12;       {Data is bad}
  #E_BAD_ARCHIVE=     13;       {CRC error in archive data}
  #E_UNKNOWN_FORMAT=  14;       {Archive format unknown}
  #E_EOPEN=           15;       {Cannot open existing file}
  #E_ECREATE=         16;       {Cannot create file}
  #E_ECLOSE=          17;       {Error closing file}
  #E_EREAD=           18;       {Error reading from file}
  #E_EWRITE=          19;       {Error writing to file}
  #E_SMALL_BUF=       20;       {Buffer too small}
  #E_EABORTED=        21;       {Function aborted by user}
  #E_NO_FILES=        22;       {No files found}
  #E_TOO_MANY_FILES=  23;       {Too many files to pack}
  #E_NOT_SUPPORTED=   24;       {Function not supported}

  ;{Unpacking flags}
  #PK_OM_LIST=           0;
  #PK_OM_EXTRACT=        1;

  ;{Flags For ProcessFile}
  #PK_SKIP=              0;     {Skip file (no unpacking)}
  #PK_TEST=              1;     {Test file integrity}
  #PK_EXTRACT=           2;     {Extract file to disk}

  ;{Flags passed through ChangeVolProc}
  #PK_VOL_ASK=           0;     {Ask user for location of next volume}
  #PK_VOL_NOTIFY=        1;     {Notify app that next volume will be unpacked}

  ;{Packing flags}
  ;{For PackFiles}
  #PK_PACK_MOVE_FILES=   1;    {Delete original after packing}
  #PK_PACK_SAVE_PATHS=   2;    {Save path names of files}

  ;{Returned by GetPackCaps}
  #PK_CAPS_NEW=          1;    {Can create new archives}
  #PK_CAPS_MODIFY=       2;    {Can modify exisiting archives}
  #PK_CAPS_MULTIPLE=     4;    {Archive can contain multiple files}
  #PK_CAPS_DELETE=       8;    {Can delete files}
  #PK_CAPS_OPTIONS=     16;    {Supports the options dialogbox}
  #PK_CAPS_MEMPACK=     32;    {Supports packing in memory}
  #PK_CAPS_BY_CONTENT=  64;    {Detect archive type by content}
  #PK_CAPS_SEARCHTEXT= 128;    {Allow searching for text in archives
  ;                            { created With this plugin}
  #PK_CAPS_HIDE=       256;    { Show as normal files (hide packer icon) }
  ;                            { open With Ctrl+PgDn, Not Enter }

  ;{Flags For packing in memory}
  #MEM_OPTIONS_WANTHEADERS=1;  {Return archive headers with packed data}

  ;{Errors returned by PackToMem}
  #MEMPACK_OK=           0;    {Function call finished OK, but there is more data}
  #MEMPACK_DONE=         1;    {Function call finished OK, there is no more data}




ISOLib=OpenLibrary(#Lib,dllname.s)
If IsoLib
 
 GetPackerCaps=GetFunction(#Lib, "GetPackerCaps")
 CanYouHandleThisFile=GetFunction(#Lib, "CanYouHandleThisFile")
 SetChangeVolProc=GetFunction(#Lib, "SetChangeVolProc")
 SetProcessDataProc=GetFunction(#Lib, "SetProcessDataProc")
 
 ;Prototypes are so nice :) 
 
 Prototype.l Proto_OpenArchive(OpenArchiveData.l);.tOpenArchiveData)
 OpenArchive.Proto_OpenArchive=GetFunction(#Lib, "OpenArchive")
 
 Prototype.l Proto_CloseArchive(Handle.l)
 CloseArchive.Proto_CloseArchive=GetFunction(#Lib, "CloseArchive")
 
 
 Prototype.l Proto_ReadHeader(HANDLEhArcData.l, tHeaderData.l )
 ReadHeader.Proto_ReadHeader=GetFunction(#Lib, "ReadHeader")
 
 Prototype.l Proto_ProcessFile(HANDLEhArcData.l, operation.l ,Destpath.s,Destname.s)
 ProcessFile.Proto_ProcessFile=GetFunction(#Lib, "ProcessFile")

 OpenArchiveData.tOpenArchiveData
 OpenArchiveData\ArcName=@isofile
 OpenArchiveData\OpenMode=#PK_OM_LIST	
 OpenArchiveData\OpenResult=0
 Buffer.s=Space(260)
 OpenArchiveData\CmtBuf=@buffer;
 OpenArchiveData\CmtBufSize=260
;     CmtSize,
;     CmtState:longint;


 IsoHandle.l=OpenArchive(OpenArchiveData)
 ;Debug Isohandle

 HeaderData.tHeaderData
 HeaderData\CmtBuf=@Buffer
 HeaderData\CmtBufsize=Len(Buffer)
 
 Repeat
  result=ReadHeader(IsoHandle,HeaderData)
  ;Debug PeekS(@HeaderData\ArcName,260)
  Debug PeekS(@HeaderData\FileName,260)
  
  ;Debug HeaderDataFileCRC
  
  Filetype.s=""
  ;Debug Hex(HeaderData\FileAttr)
  If  HeaderData\FileAttr & 1:Filetype +"Readonly ":EndIf
  If  HeaderData\FileAttr & 2:Filetype +"Hidden ":EndIf
  If  HeaderData\FileAttr & 4:Filetype +"System ":EndIf
  If  HeaderData\FileAttr & 8:Filetype +"Volume ID ":EndIf
  If  HeaderData\FileAttr & $10:Filetype +"Directory ":EndIf
  If  HeaderData\FileAttr & $20:Filetype +"Archive ":EndIf
  ;If  HeaderData\FileAttr & $3F:Filetype +"Any File":EndIf
  Debug Filetype

  res=ProcessFile(IsoHandle,#PK_SKIP,"","")
 Until Result<>#E_NO_ERROR
 
 
 CloseArchive(IsoHandle)
 
 CloseLibrary(#Lib)
EndIf
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Total Commander Plugins(PAK) in PB, scan ISO-Files

Beitrag von Kiffi »

da wird sich Thomas aber freuen ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Re: Total Commander Plugins(PAK) in PB, scan ISO-Files

Beitrag von Rings »

Kiffi hat geschrieben:da wird sich Thomas aber freuen ;-)
hab ich auch gedacht, schwört er doch den TC .
Anyway, es gibt echt viele nützliche plugins
siehe hier: http://www.ghisler.com/dplugins.htm
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Total Commander Plugins(PAK) in PB, scan ISO-Files

Beitrag von ts-soft »

Kiffi hat geschrieben:da wird sich Thomas aber freuen ;-)

Grüße ... Kiffi
Hab bisher nur die Strukturen für ListerPlugins umgesetzt, sowie ein
verbugtes Plugin damit erstellt für SyntaxHL PB :wink:

@Siggi
Werde ich bestimmt mal brauchen können :allright:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

Dies hier is ja die Seite von TC.
Obwohl man mit diesem wissen fast auch schon so
ein Plugin schreiben können müsste.
Anyway, hab grad mal MSI (Microsoft installer files)
und DiskettenImages (IMG) ausprobiert. Klappt alles
mit demselben source, nur wcx und testfile austauschen !
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Super Sache ! :allright:

Thanks for provide
Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Antworten