home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0689.ZIP / CCE_0689 / LHA3_SRC.LZH / SOURCE / LHARC.H < prev    next >
C/C++ Source or Header  |  1994-04-03  |  7KB  |  346 lines

  1.  
  2. #include <limits.h>
  3. #include <ctype.h>
  4.  
  5. #include <errno.h>
  6. #include <basepage.h>
  7.  
  8. #include <string.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <unistd.h>
  12. #include <osbind.h>
  13. #include <time.h>
  14. #include <mintbind.h>
  15.  
  16. #define GERMAN        0
  17. #define    BETA        0
  18. #define VERSNO    "3.00"
  19.  
  20. #ifdef __SHELL__
  21. #define LZHVERSION VERSNO
  22. #else
  23. #define LZHVERSION VERSNO" junior"
  24. #endif
  25.  
  26. #if GERMAN
  27. #define PERSON    "einem unbekannten Genie"
  28. #else
  29. #define PERSON    "an unknown genius"
  30. #endif
  31.  
  32. #define close_file(f)    {if (f!=NULL) fclose(f);f=NULL;}
  33.  
  34. #define FA_SELECTED    2
  35. #define FA_DELETED    4
  36. #define FA_DONE        8
  37. #define FA_EDITED    16
  38. #define FA_COMALLOC    32
  39.  
  40. #define _PC_CASE        6
  41. #define    _PC_CASESENS    0
  42. #define    _PC_CASECONV    1
  43. #define    _PC_CASEINSENS    2
  44.  
  45. #define BUFFERSIZ    (24*1024L)
  46. #define    FILEBUFSIZ    16384L
  47.  
  48. #define MAXBUFFER    (1L<<17)
  49. #define MAXBUFFERL2    (1L<<19)
  50.  
  51. #define DICBIT        13
  52. #define DICSIZ        (1U<<DICBIT)
  53.  
  54. #define MATCHBIT    8
  55. #define MAXMATCH    256
  56.  
  57. #define THRESHOLD    2
  58. #define PERC_FLAG    0x8000U
  59. #define NC            (UCHAR_MAX+MAXMATCH+1-THRESHOLD)
  60. #define CBIT        9
  61. #define CODE_BIT    16
  62.  
  63. #define NP            (DICBIT+1)
  64. #define NT            (CODE_BIT+3)
  65.  
  66. #define PBIT        4
  67. #define TBIT        5
  68.  
  69. #if NT > NP
  70. #define NPT    NT
  71. #else
  72. #define NPT NP
  73. #endif
  74.  
  75. #define MAX_HASH_VAL    (3*DICSIZ+((DICSIZ>>9)+1)*UCHAR_MAX)
  76.  
  77. #define MAXPATH        224
  78. #define MAXCOMMENT    1024
  79. #define MAXEXT        1024
  80. #define MAX_PAT     1024
  81. #define MAX_EXCLD    128
  82. #define MAX_ARC        512
  83.  
  84. #define N            4096
  85. #define F            18
  86. #define NIL         N
  87.  
  88. #define UNKNOWNERR    0
  89. #define INVCMDERR    1
  90. #define MANYPATERR    2
  91. #define NOARCNMERR    3
  92. #define NOFNERR     4
  93. #define NOARCERR    5
  94. #define RENAMEERR    6
  95. #define MKTMPERR    7
  96. #define DUPFNERR    8
  97. #define TOOMANYERR    9
  98. #define TOOLONGERR    10
  99. #define NOFILEERR    11
  100. #define MKFILEERR    12
  101. #define RDERR        13
  102. #define WTERR        14
  103. #define MEMOVRERR    15
  104. #define INVSWERR    16
  105. #define CTRLBRK     17
  106. #define NOMATCHERR    18
  107. #define COPYERR     19
  108. #define NOTLZH        20
  109. #define OVERWT        21
  110. #define MKDIR        22
  111. #define MKDIRERR    23
  112. #define CRCERR        24
  113. #define RDONLY        25
  114.  
  115. #define EXTEND_GENERIC        0
  116. #define EXTEND_UNIX            'U'
  117. #define EXTEND_ATARI        'a'
  118. #define EXTEND_MSDOS        'M'
  119. #define EXTEND_MACOS        'm'
  120. #define EXTEND_OS9            '9'
  121. #define EXTEND_OS2            '2'
  122. #define EXTEND_OS68K        'K'
  123. #define EXTEND_OS386        '3'
  124. #define EXTEND_HUMAN        'H'
  125. #define EXTEND_CPM            'C'
  126. #define EXTEND_FLEX            'F'
  127. #define EXTEND_RUNSER        'R'
  128. #define EXTEND_TOWNSOS        'T'
  129. #define EXTEND_XOSK            'X'
  130.  
  131. #define    TEXT        (DICSIZ*2+MAXMATCH)
  132. #define LEVEL        ((DICSIZ+UCHAR_MAX+1+8)*sizeof(*level))
  133. #define POSITION    ((DICSIZ+UCHAR_MAX+1)*sizeof(*position))
  134. #define PARENT        (DICSIZ*2*sizeof(*parent))
  135. #define PREV        (DICSIZ*2*sizeof(*prev))
  136. #define    NEXT        ((MAX_HASH_VAL+1)*sizeof(*next))
  137. #define ENCODE5        (TEXT+LEVEL+POSITION+PARENT+PREV+NEXT+128)
  138.  
  139. #define LSON        ((N+1)*sizeof(*lson))
  140. #define RSON        ((N+257)*sizeof(*rson))
  141. #define DAD            ((N+1)*sizeof(*dad))
  142. #define ENCODE        (LSON+RSON+DAD+128)
  143.  
  144. #define FAULT        0
  145. #define SUCCS        ~FAULT
  146.  
  147. #define COM_ID        "-com-"
  148.  
  149. #define EXCLUDE        '!'
  150. #define FILE_LIST    '@'
  151. #define TEMPFILE    "LHA)(T)(."
  152.  
  153. #define MINHDR        20
  154. #define HDRSIZ0        22
  155. #define HDRSIZ1        25
  156. #define HDRSIZ2        24
  157.  
  158. #define ITIME(t)    itime((ulong *) &t)
  159. #define getch()        gemdos(0x08)
  160.  
  161. typedef unsigned char    uchar;
  162. typedef unsigned int    uint;
  163. typedef unsigned short    ushort;
  164. typedef unsigned long    ulong;
  165.  
  166. typedef unsigned long    clock_t;
  167. typedef struct
  168. {
  169.     int dirs,files,items,selected;
  170.     long bytes;
  171. } SELECT;
  172.  
  173. typedef struct
  174. {
  175.     uchar    *ptr;
  176.     long    cnt;
  177.     uchar    *base;
  178.     long    len;
  179. } OutRec;
  180.  
  181. extern OutRec outrec;
  182.  
  183. typedef struct
  184. {
  185.     void    *next;
  186.     _DOSTIME time;
  187. #if 0
  188.     _DOSTIME Mtime;
  189. #endif
  190.     int        cluster;
  191. #ifdef __SHELL__
  192.     uint    crc,index;
  193.     int        sel_files,sel_dirs;
  194.     long    seek_pos,packed,unpacked,sel_size,sel_pack;
  195.     uchar    *name,*comment;
  196.     uchar    method,system,level;
  197.     uchar    view[20],id[3];
  198. #endif
  199.     uchar    fpos,cpos,flag,Case,attr;
  200.     uchar    dir[MAXPATH];
  201. } filebuf;
  202.  
  203. typedef struct
  204. {
  205.     uchar        HeadSiz,HeadChk,HeadID[5];
  206.     ulong        PacSiz,OrgSiz;
  207.     _DOSTIME    Ftime;
  208.     uchar        Attr,Level;
  209.     uchar        Fname[MAXPATH];
  210.     uchar        crypted;
  211. #if 0
  212.     _DOSTIME    Mtime;
  213. #endif
  214.     uint        crc;
  215. } LzHead;
  216.  
  217. typedef struct
  218. {
  219.     unsigned hour:5;
  220.     unsigned min:6;
  221.     unsigned sec:5;
  222.     unsigned year:7;
  223.     unsigned mon:4;
  224.     unsigned day:5;
  225. } ftime;
  226.  
  227. typedef struct xattr {
  228.     ushort    mode;
  229.     long    index;
  230.     ushort    dev;
  231.     ushort    reserved1;
  232.     ushort    nlink;
  233.     ushort    uid;
  234.     ushort    gid;
  235.     long    size;
  236.     long    blksize;
  237.     long    nblocks;
  238.     short    mtime, mdate;
  239.     short    atime, adate;
  240.     short    ctime, cdate;
  241.     short    attr;
  242.     short    reserved2;
  243.     long    reserved3[2];
  244. } XATTR;
  245.  
  246. #define METHOD_TYPE_STRAGE 5
  247.  
  248. extern    int __mint,bad_tab,*rson,*lson,*dad,bitcount,blkcnt,RotInd;
  249. extern    int match_position,match_length,matchlen,ship,star;
  250. extern    uint crc,crc_u,subbitbuf,bitbuf;
  251. extern    FILE *file1,*file3;
  252. extern    long textsize,codesize,compsize,blocksize;
  253. extern    uchar flg_n,flg_5,*text,text_buf[],upper[];
  254. extern    short matchpos,*position,*parent,*prev,*next;
  255. extern    ulong origsize;
  256. extern    ushort *sortptr;
  257.  
  258. extern    uint *level,*childcount;
  259.  
  260. extern    ushort prnt[],son[],hfreq[];
  261.  
  262. long    afxonoff(long);
  263. int     arc_ext(uchar *);
  264. int        Attrib(uchar *);
  265. uchar    *backpath(uchar *);
  266. void    block_crc(long,uchar *);
  267. void    buf_putc(uchar);
  268. int        case_sensitive(uchar *);
  269. int     chk_wild(uchar *,uchar *,int,int);
  270. clock_t clock(void);
  271. void    code(uchar *,long len);
  272. void    copyfile(FILE *,FILE *,uchar *,long,int,int);
  273. void    copy_to_view(uchar*,long);
  274. void    count_len(int);
  275. int        crc_getc(FILE *);
  276. void    Decode(void);
  277. int        decode5(uint,uchar*);
  278. int        decode_lh5(ulong,ulong);
  279. void    DecodeOld(void);
  280. int        decrypt(long);
  281. void    delete_node(void);
  282. void    DeleteONode(int);
  283. void    dos_2_unixtime(void *);
  284. int        drive(uchar *,uchar **);
  285. void    Encode(void);
  286. void    encode5(void);
  287. void    EncodeOld(void);
  288. void    end_huf(void);
  289. void    error(int,uchar*,int);
  290. void    fillbuf(int);
  291. int     fread_crc(uchar*,int,FILE*);
  292. ulong    FTimeToULong(_DOSTIME*);
  293. uint    getbits(int);
  294. int     gethdr(FILE *,LzHead *);
  295. void    get_comment(FILE*);
  296. uchar    *get_ext(void);
  297. uchar    *get_fname(uchar*);
  298. void    get_next_match(void);
  299. void    huf_encode_end(void);
  300. void    huf_encode_start(void);
  301. void    ilong(ulong*);
  302. void    InitTree(void);
  303. void    init_encode5(void);
  304. void    init_lharc(void);
  305. void    itime(ulong*);
  306. void    insert_node(void);
  307. void    InsertONode(int);
  308. void    lha_exit(void);
  309. void    MakeBuffers(void);
  310. void    make_attr(uchar*,int);
  311. int        make_table(int,uchar*,int,ushort*);
  312. int     make_tree(int,ushort*,uchar*,ushort*);
  313. int        matchpattern(uchar*,uchar*);
  314. void    mkcrc(void);
  315. uchar    mksum(LzHead*,int);
  316. int     openarc1(long,uchar *);
  317. void    OpenOut(OutRec *,uchar *);
  318. void    output(uint,uint);
  319. void    output5(uint,uint);
  320. int        path_conf(uchar*,int);
  321. void    print(uchar*,int);
  322. void    Print(int);
  323. void    ProcInd(void);
  324. void    proc_ind(void);
  325. void    putbits(int,uint);
  326. uint     ratio(ulong,ulong);
  327. int        read_attr(uchar *,_DTA *);
  328. int        read_pt_len(int,int,int);
  329. int     read_c_len(void);
  330. int        search_lzh(FILE*,int);
  331. void    send_block(void);
  332. void    shipout(void);
  333. void    ShipOut(void);
  334. int     slash(uchar *,int);
  335. uchar    *stpcpy(uchar*,uchar*);
  336. int     sseek(FILE *,long);
  337. uchar     *sysid(char);
  338. int     test_afx(uchar*);
  339. void    TruncFile(uchar *);
  340. int        tst_fname(uchar *);
  341. int     tstID(uchar *);
  342. void    unix2dos(uchar *,int);
  343. void    unix_2_dostime(void *);
  344. int        wildcard(uchar *);
  345. void    yen2slash(uchar *);
  346.