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