home *** CD-ROM | disk | FTP | other *** search
/ The Best of the Best / _.img / w037 / wuz.pas < prev    next >
Pascal/Delphi Source File  |  1992-08-16  |  12KB  |  193 lines

  1. Unit WUZ;
  2.  
  3. { UNZIP100.DLL
  4.  
  5.   Copyright (c) 1992 by Ralf Hertsch, Mannheim.
  6.  
  7.   Schnittstellen-Unit zum Zugriff auf die Bibliothek UNZIP100.DLL.
  8.  
  9.   Die Bibliothek und Unit wurden mit Turbo Pascal for Windows v1.00 erstellt,
  10.   es sollte jedoch kein Problem darstellen, die Schnittstellen Unit durch eine
  11.   entsprechende C-Header Datei zu ersetzen.
  12.  
  13.   Mit Hilfe der Bibliothek UNZIP100.DLL ist es m÷glich, *.ZIP Archive die mit dem
  14.   Programm PKZIP 1.xx erstellt wurden, unter Windows zu entpacken OHNE auf die
  15.   DOS-Ebene zu wechseln und PKUNZIP aufzurufen.
  16.  
  17.   Die Bibliothek wurde in erster Linie erstellt, um komfortable Installations-
  18.   Routinen bzw. -Programme schreiben zu k÷nnen.
  19.  
  20.   Es k÷nnen durch entsprechende Nachrichten, die von der DLL verschickt werden,
  21.   Selektionen vorgenommen werden (bereits bestehende Dateien ⁿberschreiben, nur
  22.   bestimmte Dateien aus dem Archiv entpacken usw.).
  23.  
  24.   Der jeweilige Stand des Entpackens wird in Prozent gemeldet. Damit ist es
  25.   m÷glich Balkenanzeigen zu realisieren usw. usf.
  26.  
  27.   Die Bibliothek prⁿft generell, ob der Speicherplatz auf dem DatentrΣger zum
  28.   Entpacken ausreichend ist.
  29.  
  30.   Die Bibliothek ist auch geeignet, bestimmte Dateien eines Programms erst bei
  31.   Bedarf zu entpacken (z.B. Hilfedateien oder nicht stΣndig ben÷tigte Unter-
  32.   programme, die Archivbezeichnung *.ZIP ist nicht zwingend notwendig).
  33.  
  34.  
  35.   BEISPIEL        : Siehe Programm TEST, das im Quellcode vorliegt.
  36.  
  37.   SHAREWARE       : Die Bibliothek UNZIP100.DLL ist Shareware !
  38.                     Wenn Sie mit dieser Biblithek nach einer angemessenen
  39.                     Testphase von etwa 4 Wochen weiterarbeiten m÷chten, oder
  40.                     diese mit eigenen Programmen zusammen weitergeben wollen,
  41.                     mⁿssen Sie sich als Anwender registrieren lassen.
  42.  
  43.   EINSCHR─NKUNGEN : Die Sharewareversion ist funktional nicht eingeschrΣnkt.
  44.                     Beim Schlie▀en der Bibliothek wird eine Meldung mit dem
  45.                     Shareware-Hinweis ausgeben.
  46.  
  47.   WICHTIG         : Wenn Sie die Bibliothek nicht ordnungsgemΣ▀ Schlie▀en, weil
  48.                     Sie den Shareware-Hinweis unterdrⁿcken wollen, wird der
  49.                     durch die DLL belegte Speicher nicht freigegeben !
  50.                     Dies kann spΣtestens bei einem erneuten Aufruf der DLL
  51.                     fatale Folgen haben !
  52.  
  53.   REGISTRIERUNG   : Kostet DM 15,--.
  54.                     Sie erhalten die neuste Version der Bibliothek UNZIP100.DLL
  55.                     und k÷nnen diese beliebig mit eigenen Programmen verwenden
  56.                     sowie weitergeben.
  57.  
  58.   KONTAKT         : Ralf Hertsch
  59.                     Riedfeldstra▀e 3
  60.                     D-W-6800 Mannheim 1
  61.                     (0621) 35630
  62.  
  63. }
  64.  
  65.  
  66. INTERFACE
  67.  
  68. Uses
  69.   WinTypes,  { KompatibilitΣt zu anderen Windows Programmiersprachen }
  70.   WinProcs;  { wird fⁿr RegisterWindowMessage ben÷tigt               }
  71.  
  72. Var
  73.   { Messages die von UNZIP100.DLL verschickt werden }
  74.  
  75.   wm_PercentDoneOneStep         : Word;  { Lokale Datei ist zu xx Prozent entpackt. Angabe in  1 % Schritten,  }
  76.                                          { Der Wert wird in Msg.wParam ⁿbergeben.                              }
  77.   wm_PercentDoneTenStep         : Word;  { Lokale Datei ist zu xx Prozent entpackt. Angabe in 10 % Schritten   }
  78.                                          { Der Wert wird in Msg.wParam ⁿbergeben.                              }
  79.   wm_NameOfLocalZIPFile         : Word;  { Dateiname der lokalen Datei, die gerade entpackt wird               }
  80.                                          { ▄bergabe erfolgt mit:                                               }
  81.                                          {          - Offset  des Meldungstrings in Msg.wParam                 }
  82.                                          {          - Segment des Meldungstrings in Msg.lParam                 }
  83.   wm_WUZErrorStr                : Word;  { Fehlermeldung, enthΣlt einen vollstΣndigen Meldungsstring           }
  84.                                          { ▄bergabe erfolgt mit:                                               }
  85.                                          {          - Offset  des Meldungstrings in Msg.wParam                 }
  86.                                          {          - Segment des Meldungstrings in Msg.lParam                 }
  87.   wm_WUZErrorID                 : Word;  { Fehlermeldung, enthΣlt die Kennziffer in Msg.wParam                 }
  88.   wm_WUZQuestionOverWrite       : Word;  { Anfrage, ob eine bereits bestehende Datei ⁿberschrieben werden soll }
  89.                                          { ▄bergabe des Dateinamens erfolgt mit:                               }
  90.                                          {          - Offset  des Meldungstrings in Msg.wParam                 }
  91.                                          {          - Segment des Meldungstrings in Msg.lParam                 }
  92.   wm_WUZQuestionID              : Word;  { dto. - nur Kennziffer, ist fⁿr automatische Prozesse gedacht.       }
  93.                                          { Diese M÷glichkeit wird von UNZIP100.DLL noch nicht unterstⁿtzt.     }
  94.   wm_WUZUnzipThisFile           : Word;  { Anfrage, ob diese Datei aus dem Archiv entpackt werden soll         }
  95.                                          { ▄bergabe des Dateinamens erfolgt mit:                               }
  96.                                          {          - Offset  des Meldungstrings in Msg.wParam                 }
  97.                                          {          - Segment des Meldungstrings in Msg.lParam                 }
  98.  
  99.  
  100. Const
  101.   { Fehlercodes von UNZIP100.DLL, werden von wm_WUZErrorID in Msg.wParam ⁿbergeben.
  102.     Die Implementierung der Codes ist nur notwendig, wenn Sie auf deren Grundlage eigene
  103.     Fehlermeldungen erstellen und anzeigen wollen.
  104.  
  105.     UNZIP100.DLL gibt mit wm_WUZErrorStr eine vollstΣndige Fehlermeldung an das aufrufende
  106.     Programm weiter.
  107.     Die verwendeten Strings sind als Ressourcen in der DLL eingebunden und k÷nnen mit WRT
  108.     oder RESOURCE WORKSHOP ⁿberarbeitet werden. Der reservierte Puffer in der Bibliothek
  109.     kann max. 250 Zeichen aufnehmen. Die String-IDs sind mit den Fehlercodes identisch.       }
  110.  
  111.   ef_WrongZIPVersion            = 10001; { Archiv wurde mit PKZIP 1.93a oder 2.xx erstellt                      }
  112.   ef_BadShannonFanoData         = 10002; { SHANNON-FANO Entschlⁿsselungsbaum enthΣlt fehlerhafte Daten          }
  113.   ef_BadShannonFanoTree         = 10003; { SHANNON-FANO Entschlⁿsselungsbaum ist fehlerhaft aufgebaut           }
  114.   ef_BadLocalFileHeader         = 10004; { Der lokale Dateikopf enthΣlt fehlerhafte Angaben                     }
  115.   ef_BadLocalFileNameLength     = 10005; { Der lokale Dateiname enthΣlt eine ungⁿltige LΣngenangabe             }
  116.   ef_BadLocalExtraField         = 10006; { Das lokale Feld fⁿr Extra Informationen ist fehlerhaft               }
  117.   ef_BadCodeDetected            = 10007; { fehlerhafter Verschlⁿsselungscode, Datei kann nicht gelesen werden   }
  118.   ef_StackOverflow              = 10008; { Stapelⁿberlauf                                                       }
  119.   ef_NoMemoryForIOBuffers       = 10009; { Nicht genug Speicher um die I/O Puffer zu allozieren                 }
  120.   ef_NotEnoughDiskSpace         = 10010; { Nicht genug freier Speicherplatz auf dem DatentrΣger                 }
  121.   ef_NoDirectorySelected        = 10011; { Es wurde kein Verzeichnis angegeben                                  }
  122.   ef_DirectoryNotExist          = 10012; { Das angegebene Verzeichnis existiert nicht                           }
  123.   ef_OpenFileError              = 10013; { Fehler beim ╓ffnen der Datei                                         }
  124.   ef_FileFindError              = 10014; { gesuchte Datei nicht gefunden                                        }
  125.   ef_DirectoryFindError         = 10015; { gesuchtes Verzeichnis nicht gefunden                                 }
  126.   ef_FileAccessError            = 10016; { Fehler beim Zugriff auf Datei                                        }
  127.   ef_UnknownError               = 10017; { unbekannter Fehler. Kennziffer findet sich in Msg.lParam             }
  128.   ef_Code256                    = 10018; { Verschlⁿsselungssegment ⁿberschreitet 256 Zeichen                    }
  129.   ef_NotEnoughMemorySkipFile    = 10019; { Nicht genⁿgend Speicher, DLL geht zur nΣchsten lokalen Datei         }
  130.   ef_UnknownCompressMethod      = 10020; { unbekannter Kompressions Algorithmus                                 }
  131.   ef_CRCCheckError              = 10021; { Prⁿfsummenfehler. Entpackte Datei ist wahrscheinlich Fehlerhaft !    }
  132.  
  133.   { Anfragen an das aufrufende Programm }
  134.  
  135.   qf_OverWriteFile              = 12001; { Datei existiert schon. Soll die Datei ⁿberschrieben werden ?         }
  136.                                          { Ist fⁿr automatische Prozesse gedacht, wird noch nicht unterstⁿtzt.  }
  137.  
  138.  
  139. { verfⁿgbare Methoden der DLL }
  140.  
  141. Procedure InitDLL;
  142.           { initialisiert die DLL, mu▀ jedesmal aufgerufen werden       }
  143.  
  144. Procedure DoneDLL;
  145.           { setzt die DLL zurⁿck, mu▀ explizit aufgerufen werden,
  146.             damit allozierter Speicher wieder freigegeben wird          }
  147.  
  148. Function  ProzessUnzip(AZipFile : PChar; ATarget : PChar): Bool;
  149.           { Startet das eigentiche Entpacken des ZIP-File.
  150.             AZIPFile enthΣlt den vollstΣndigen Suchpfad zum ZIP-Archiv,
  151.             ATarget enthΣlt das Verzeichnis, in dem Entpackt werden
  152.             soll.
  153.             HINWEIS: Existiert ATarget NICHT, bricht UNZIP100.DLL ab.   }
  154.  
  155. Procedure WUZReplyMessage(AMsg : Word; AReply : Word);
  156.           { Ist die Antwortmethode der aufrufenden Application          }
  157.  
  158.  
  159. Procedure WUZQuiet(APercent : Bool);
  160.           { Ist APercent TRUE, werden die Botschaften
  161.                          - wm_PercentDoneOneStep
  162.                          - wm_PercentDoneTenStep
  163.             unterdrⁿckt. Voreinstellung ist FALSE. Sinn ist die Erh÷hung
  164.             der Performance, wenn keine Prozent-Angaben ⁿber den Stand
  165.             des Entpackens der einzelnen Archivdateien ben÷tigt werden. }
  166.  
  167. Procedure WUZOverWriteAlways(AllFiles : Bool);
  168.           { Ist AllFiles TRUE, wird die Botschaft wm_WUZQuestionOverWrite
  169.             unterdrⁿckt. Bereits bestehende Dateien werden generell
  170.             ⁿberschrieben.                                              }
  171.  
  172. IMPLEMENTATION
  173.  
  174. Procedure InitDLL;              External 'UnZip100' Index 1;
  175. Procedure DoneDLL;              External 'UnZip100' Index 2;
  176. Function  ProzessUnzip;         External 'UnZip100' Index 3;
  177. Procedure WUZReplyMessage;      External 'UnZip100' Index 4;
  178. Procedure WUZQuiet;             External 'UnZip100' Index 5;
  179. Procedure WUZOverWriteAlways;   External 'UnZip100' Index 6;
  180.  
  181. Begin
  182.   { Wichtig : Die einzelnen Messages der DLL mⁿssen registriert sein ! }
  183.  
  184.   wm_PercentDoneOneStep     := RegisterWindowMessage('PercentDoneOneStep');
  185.   wm_PercentDoneTenStep     := RegisterWindowMessage('PercentDoneTenStep');
  186.   wm_NameOfLocalZIPFile     := RegisterWindowMessage('NameOfLocalZIPFile');
  187.   wm_WUZErrorStr            := RegisterWindowMessage('WUZErrorStr');
  188.   wm_WUZErrorID             := RegisterWindowMessage('WUZErrorID');
  189.   wm_WUZQuestionOverWrite   := RegisterWindowMessage('WUZQuestionOverWrite');
  190.   wm_WUZQuestionID          := RegisterWindowMessage('WUZQuestionID');
  191.   wm_WUZUnzipThisFile       := RegisterWindowMessage('WUZUnzipThisFile');
  192. End.
  193.