home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 600-699 / ff623.lha / PPLib / Oberon / PowerPacker.mod < prev   
Text File  |  1992-03-21  |  5KB  |  126 lines

  1. (* ------------------------------------------------------------------------
  2.   :Program.       PowerPacker
  3.   :Contents.      Interface to Nico François' powerpacker.library
  4.   :Author.        Kai Bolay [kai] (C-Version by Nico François)
  5.   :Address.       Hoffmannstraße 168
  6.   :Address.       D-7250 Leonberg 1 (Germany)
  7.   :Address.       UUCP: ...!cbmvax!cbmehq!cbmger!depot1!amokle!kai
  8.   :Address.       FIDO: 2:247/706.3
  9.   :History.       v1.0 [kai] long ago  (translated from C)
  10.   :History.       v1.3 Nico  some time (updated)
  11.   :History.       v1.3 [kai] 22-Nov-91 (bug fixes)
  12.   :History.       v1.3a [kai] 24-Nov-91 (fixed missing exports)
  13.   :History.       v1.3b [kai] 07-Dec-91 (little bugfixes)
  14.   :Copyright.     Freeware
  15.   :Language.      Oberon
  16.   :Translator.    AMIGA OBERON v2.12e, A+L AG
  17.   :Remark.        Thanks to Nico for his great library
  18. ------------------------------------------------------------------------ *)
  19.  
  20. MODULE PowerPacker;
  21.  
  22. (*
  23. **      Filename: libraries/PowerPacker.mod
  24. **      Release: 1.3
  25. **
  26. **      (C) Copyright 1991 Nico François
  27. **          All Rights Reserved
  28. **
  29. *)
  30.  
  31. IMPORT
  32.    e: Exec, I: Intuition, d: Dos;
  33. CONST
  34.    PPName* = "powerpacker.library";
  35.    PPVersion* = 35;
  36.    (* decrunch colors for LoadData and DecrunchBuffer *)
  37.    DecrCol0*  = 0;
  38.    DecrCol1*  = 1;
  39.    DecrPoint* = 2;
  40.    DecrScrol* = 3;
  41.    DecrNone*  = 4;
  42.    (* error codes returned by LoadData *)
  43.    LoadOk*    =  0;
  44.    OpenErr*   = -1;
  45.    ReadErr*   = -2;
  46.    NoMemory*  = -3;
  47.    Crypted*   = -4;
  48.    PassErr*   = -5;
  49.    UnknownPP* = -6;
  50.    (* size of speedup buffer *)
  51.    SpeedupBuffLarge*  = 0;
  52.    SpeedupBuffMedium* = 1;
  53.    SpeedupBuffSmall*  = 2;
  54.    (* crunching efficiency *)
  55.    CrunFast*     = 0;
  56.    CrunMediocre* = 1;
  57.    CrunGood*     = 2;
  58.    CrunVeryGood* = 3;
  59.    CrunBest*     = 4;
  60.    (* possible return values from ppCrunchBuffer() *)
  61.    CrunchAborted*  =  0;
  62.    BufferOverflow* = -1;
  63. TYPE
  64.    PPBase* = STRUCT (libNode* : e.Library);
  65.                 flags* : SHORTSET;
  66.                 pad* : SHORTINT;
  67.                 segList* : e.BPTR;
  68.              END; (* STRUCT *)
  69.    PPBasePtr* = UNTRACED POINTER TO PPBase;
  70.    (** These two function must preserve all Registers an may not deallocate
  71.        their parameters. Stack checking is not allowed! This means:
  72.        "DeallocPars-" and "SaveAllRegs+" and "StackChk-!! **)
  73.    PassFunc* = PROCEDURE (checksum: LONGINT; password: e.ADDRESS): BOOLEAN;
  74.    PercFunc* = PROCEDURE (userdata: e.ADDRESS; totlen: LONGINT;
  75.                           crunlen: LONGINT; lensofar: LONGINT): BOOLEAN;
  76. VAR
  77.    pp* : PPBasePtr;
  78.  
  79. PROCEDURE LoadData* {pp, -30} (    filename{8}: ARRAY OF CHAR;
  80.                                    col{0}: LONGINT;
  81.                                    memtype{1}: LONGSET;
  82.                                VAR buffer{9}: e.ADDRESS;
  83.                                VAR len{10}: LONGINT;
  84.                                    func{11}: PassFunc): LONGINT;
  85. PROCEDURE DecrunchBuffer* {pp, -36} (endcrun{8},
  86.                                      decrbuf{9},
  87.                                      effptr{10}: e.ADDRESS;
  88.                                      col{0}: LONGINT);
  89. PROCEDURE CalcCheckSum* {pp, -42} (string{8}: ARRAY OF CHAR): INTEGER;
  90. PROCEDURE CalcPasskey* {pp, -48} (password{8}: ARRAY OF CHAR): LONGINT;
  91. PROCEDURE Decrypt* {pp, -54} (buffer{8}: e.ADDRESS;
  92.                               len{0}, key{1}: LONGINT);
  93. PROCEDURE GetPassword* {pp, -60} (screen{8}: I.ScreenPtr;
  94.                                   buffer{9}: e.ADDRESS;
  95.                                   maxchars{0}: LONGINT;
  96.                                   checksum{1}: INTEGER): BOOLEAN;
  97. PROCEDURE AllocCrunchInfo* {pp, -96} (eff{0}: LONGINT;
  98.                                       speedup{1}: LONGINT;
  99.                                       func{8}: PercFunc;
  100.                                       userdata{9}: e.ADDRESS): e.ADDRESS;
  101. PROCEDURE FreeCrunchInfo* {pp, -102} (crunchinfo{8}: e.ADDRESS);
  102. PROCEDURE CrunchBuffer* {pp, -108} (crunchinfo{8}: e.ADDRESS;
  103.                                     buffer{9}: e.ADDRESS;
  104.                                     len{0}: LONGINT): LONGINT;
  105. PROCEDURE WriteDataHeader* {pp, -114} (handle{0}: d.FileHandlePtr;
  106.                                        eff{1}: LONGINT;
  107.                                        crypt{2}: BOOLEAN;
  108.                                        checksum{3}: LONGINT): BOOLEAN;
  109. PROCEDURE EnterPassword* {pp, -120} (screen{8}: I.ScreenPtr;
  110.                                      buffer{9}: e.ADDRESS): BOOLEAN;
  111. PROCEDURE ErrorMessage* {pp, -132} (error{0}: LONGINT): e.STRPTR;
  112.  
  113. BEGIN
  114.    pp := e.OpenLibrary (PPName, PPVersion);
  115.    IF pp = NIL THEN
  116.       IF I.DisplayAlert (I.recoveryAlert,
  117.            "\x00\x64\x14missing powerpacker.library V35\o\o", 50) THEN END;
  118.       HALT (20)
  119.    END; (* IF *)
  120. CLOSE
  121.    IF pp # NIL THEN
  122.       e.CloseLibrary (pp);
  123.       pp := NIL;
  124.    END; (* IF *)
  125. END PowerPacker.
  126.