ASP编程 PHP编程 JSP编程 NET编程 CGI编程 XML编程 
Google adsense申请技巧本站核心代理域名注册主机业务 快速发布你的买卖域名买卖网站信息 1元注册 cn域名
站长每日新闻导读 √ ·推荐万网空间¥120元 150m 站长网:站长必上的网站网站联盟大全本站代理万网域名55空间120元
 2006-12-10 10:04:57

一个C++及Delphi做的压缩程序

来源: 字体:[ ]
{ This is interface of C++ code.
  C++ source code not included to this archive.
  Look README.TXT file for more information. }

#ifndef __CODING_H__
#define __CODING_H__

#ifndef coding_impex
#define coding_impex __declspec(dllimport)
#endif

class coding_impex avlDecode
{
   public:
     ~avlDecode();
      avlDecode();

      virtual int ReadBuf            
                  ( void     *buf,   
                    unsigned  maxLen,
                    unsigned &rdlen  
                  ) = 0;             

      int  Get(void *buf, unsigned  maxLen);
      int  Get(void *buf, unsigned  maxLen, unsigned &rdLen)
      {  return ((int)(rdLen = Get(buf, maxLen)) < 0)? rdLen :0 ;
      }

      void Reset();

   private:

   ????????? private part not included ???????????????????

};


class coding_impex avlEncode
{
   public:
     ~avlEncode();
      avlEncode();

      virtual int WriteBuf           
                  ( void     *buf,   
                    unsigned  len    
                  ) = 0;             


      int  Put(void *buf, unsigned  n);
      void Reset();

   private:
  ?????????? Private part not icluded ?????????????

};

#endif //__CODING_H__


///encode.pas
{$M 8192,120000,120000}
uses avlcodes;

const BUFSIZE=60000;

var p: pointer;
    f,f1: file;
    s: string;
    buf: pointer;
    num: word;

{$F+}

Function WriteToFile(var buf; n: integer): integer;
var num: word;
Begin
BlockWrite(f1,buf,n,num);
End;

{$F-}

Begin
if not GetMemory then
  Begin
   WriteLn('Not enough memory in HEAP to compress file.');
   halt;
  End;
s:=paramstr(1);
SetEncodeOutBuffer(@WriteToFile);
assign(f,s);
{$I-}
  if s<>'' then Reset(f,1);
{$I+}
if (IoResult<>0) or (s='') then
  Begin
   WriteLn;
   WriteLn('The author of this Turbo Pascal program and original C++ code is');
   WriteLn('Alexander Larkin   ( translated to Turbo Pascal from C++ on 27/09/1999 )');
   WriteLn;
   WriteLn('E-mail:      avlarkin@writeme.com');
   WriteLn('Internet:    http://www.geocities.com/SiliconValley/6235/tpdl.htm');
   WriteLn;
   WriteLn('Usage: encode.exe InFile OutFile [password]');
   WriteLn;
   FreeMemory;
   halt;
  End;
s:=paramstr(2);
Assign(f1,s);
{$I-}
if s<>'' then ReWrite(f1,1);
{$I+}
if (IoResult<>0) or (s='') then
  Begin
   Close(f);
   WriteLn('Cannot create find file '+s);
   FreeMemory;
   halt;
  End;
SetPassword(ParamStr(3));
  GetMem(buf,BUFSIZE);
   repeat
    BlockRead(f,buf^,BUFSIZE,num);
    EncodePut(buf^,num);
   until num<=0;
  if num<0 then WriteLn('Cannot compress file. You do something wrong.');
EncodeReset;
Close(f);
Close(f1);
FreeMemory;
End.

///decode.pas
{$M 8192,120000,120000}
uses avlcodes;

const BUFSIZE=60000;

var p: pointer;
    f,f1: file;
    s: string;
    buf: pointer;
    num: word;

{$F+}

Function ReadFromFile(var buf; n: integer; var rdlen: integer): integer;
Begin
BlockRead(f,buf,n,rdlen);
ReadFromFile:=0;
End;

{$F-}

Begin
if not GetMemory then
  Begin
   WriteLn('Not enough memory in HEAP to decompress file.');
   halt;
  End;
s:=paramstr(1);
SetDecodeInBuffer(@ReadFromFile);
assign(f,s);
{$I-}
  if s<>'' then Reset(f,1);
{$I+}
if (IoResult<>0) or (s='') then
  Begin
   WriteLn;
   WriteLn('The author of this Turbo Pascal program and original C++ code is');
   WriteLn('Alexander Larkin   ( translated to Turbo Pascal from C++ on 27/09/1999 )');
   WriteLn;
   WriteLn('E-mail:      avlarkin@writeme.com');
   WriteLn('Internet:    http://www.geocities.com/SiliconValley/6235/tpdl.htm');
   WriteLn;
   WriteLn('Usage: decode.exe InFile OutFile [password]');
   WriteLn;
   FreeMemory;
   halt;
  End;
s:=paramstr(2);
Assign(f1,s);
{$I-}
if s<>'' then ReWrite(f1,1);
{$I+}
if (IoResult<>0) or (s='') then
  Begin
   Close(f);
   WriteLn('Cannot create file '+s);
   FreeMemory;
   halt;
  End;
  GetMem(buf,BUFSIZE);
  SetPassword(ParamStr(3));
   repeat
    num:=DecodeGet(buf^,BUFSIZE);
    if num<65535 then BlockWrite(f1,buf^,num,num);
   until (num=0) or (num=65535);
if num=65535 then WriteLn('Error! Data corrupted. Cannot decompress file.');
Close(f);
Close(f1);
FreeMemory;
End.


网站地图 - 域名注册续费虚拟主机代理 - 交易论坛 - 网站投稿 - 广告服务 - 帮助中心 - 联系我们
Copyright ©2003-2007 www.Admin5.com All Rights Reserved