home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / vp21beta.zip / AEXMPSRC.RAR / UNRAR / UNRAR.H < prev    next >
C/C++ Source or Header  |  2000-08-15  |  5KB  |  177 lines

  1. /******    *****   ******
  2.  **   **  **   **  **   **      unRAR utility version 1.01
  3.  ******   *******  ******       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4.  **   **  **   **  **   **         FREE portable version
  5.  **   **  **   **  **   **         ~~~~~~~~~~~~~~~~~~~~~
  6.  
  7.      Definitions header
  8.  
  9.    UNCOMMENT ONE OF THE INITIAL LINES TO DEFINE YOUR OS TYPE.
  10. */
  11.  
  12. #define DOS          /* PC DOS is used */
  13. /*#define OS2 */         /* if OS/2 is used */
  14. /*#define UNIX*/         /* if Unix branch OS is used */
  15.  
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include <ctype.h>
  20.  
  21. /*
  22.     In following generic OS definitions you can define the optional
  23.     macro SETFILETIME in order to allow UNRAR properly handle the time
  24.     format of your operating media.
  25.  
  26.     The first argument of SETFILETIME is FILE *DestFile, and the
  27.     second one - pointer to the DOS time structure.
  28.  
  29.     You can disable SETFILETIME by single ';' after the macro name:
  30.  
  31.     #define SETFILETIME(FPtr,DosTimePtr)  ;
  32. */
  33.  
  34.  
  35. /* DOS generic definitions */
  36. #ifdef DOS
  37. #include <fcntl.h>
  38. #include <io.h>
  39. #include <dir.h>
  40. #include <alloc.h>
  41.  
  42. typedef unsigned char   UBYTE;       /*  unsigned 8 bits value type  */
  43. typedef unsigned short  UWORD;       /*  unsigned 16 bits value type */
  44. typedef unsigned long   UDWORD;      /*  unsigned 32 bits value type */
  45. typedef long            SDWORD;      /*  signed 32 bits value type   */
  46. typedef UBYTE huge *    HPBYTE;      /*  pointer type addressing     */
  47.                                      /*  up to 96 kilobytes          */
  48.  
  49. #define MEMALLOC(Size)                farmalloc(Size)
  50. #define MEMFREE(Ptr)                  farfree(Ptr)
  51. #define MAKEDIR(Name)                 mkdir(Name)
  52. #define SETFILETIME(FPtr,DosTimePtr)  setftime(fileno(FPtr),DosTimePtr)
  53. #define PATHDIV                       '\\'
  54. #define FOPENREADMODE                 "rb"
  55. #define FOPENWRITEMODE                "wb"
  56.  
  57. #endif
  58.  
  59.  
  60. /* OS/2 generic definitions */
  61. #ifdef OS2
  62. #include <fcntl.h>
  63.  
  64. typedef unsigned char   UBYTE;
  65. typedef unsigned short  UWORD;
  66. typedef unsigned long   UDWORD;
  67. typedef long            SDWORD;
  68. typedef UBYTE *         HPBYTE;
  69.  
  70. #define MEMALLOC(Size)                malloc(Size)
  71. #define MEMFREE(Ptr)                  free(Ptr)
  72. #define MAKEDIR(Name)                 mkdir(Name)
  73. #define SETFILETIME(FPtr,DosTimePtr)  setftime(fileno(FPtr),DosTimePtr)
  74. #define PATHDIV                       '\\'
  75. #define FOPENREADMODE                 "rb"
  76. #define FOPENWRITEMODE                "wb"
  77.  
  78. #endif
  79.  
  80.  
  81. /* Unix generic definitions */
  82. #ifdef UNIX
  83. #include <unistd.h>
  84.  
  85. typedef unsigned char   UBYTE;
  86. typedef unsigned short  UWORD;
  87. typedef unsigned long   UDWORD;
  88. typedef long            SDWORD;
  89. typedef UBYTE *         HPBYTE;
  90.  
  91. #define MEMALLOC(Size)                malloc(Size)
  92. #define MEMFREE(Ptr)                  free(Ptr)
  93. #define MAKEDIR(Name)                 mkdir(Name,0777)
  94. #define SETFILETIME(FPtr,DosTimePtr)  ;
  95. #define PATHDIV                       '/'
  96. #define FOPENREADMODE                 "r"
  97. #define FOPENWRITEMODE                "w"
  98. #endif
  99.  
  100. #define  UNP_VER       15       /* current version of unpacking method */
  101.  
  102. /* DOS specific file atributes flags */
  103. #define DOSFA_RDONLY   0x01
  104. #define DOSFA_HIDDEN   0x02
  105. #define DOSFA_SYSTEM   0x04
  106. #define DOSFA_LABEL    0x08
  107. #define DOSFA_DIREC    0x10
  108. #define DOSFA_ARCH     0x20
  109.  
  110. /* Exit codes */
  111. enum { SUCCESS,WARNING,FATAL_ERROR,CRC_ERROR,LOCK_ERROR,WRITE_ERROR,
  112.        OPEN_ERROR,USER_ERROR,MEMORY_ERROR,USER_BREAK=255 };
  113.  
  114. /* Status for shutdown */
  115. enum { SD_MEMORY=1,SD_FILES=2 };
  116.  
  117. /* Status for path comparison */
  118. enum { COMPARE_PATH,NOT_COMPARE_PATH };
  119.  
  120. /* Archive header flags */
  121. #define  MHD_MULT_VOL       1
  122. #define  MHD_COMMENT        2
  123. #define  MHD_LOCK           4
  124. #define  MHD_SOLID          8
  125.  
  126. /* File header flags */
  127. #define  LHD_SPLIT_BEFORE   1
  128. #define  LHD_SPLIT_AFTER    2
  129. #define  LHD_PASSWORD       4
  130. #define  LHD_COMMENT        8
  131. #define  SKIP_IF_UNKNOWN    0x4000
  132. #define  LONG_BLOCK         0x8000
  133.  
  134. /* Archive internal block types */
  135. enum { ALL_HEAD=0,MARK_HEAD=0x72,MAIN_HEAD=0x73,FILE_HEAD=0x74,
  136.        COMM_HEAD=0x75 };
  137.  
  138. /* HostOS code */
  139. enum { MS_DOS=0 };
  140.  
  141. /* Error codes */
  142. enum { EEMPTY = -1,EWRITE = 1,EREAD,EOPEN,ECLOSE,ESEEK,EMEMORY,EARCH };
  143.  
  144. /* Headers definitions */
  145.  
  146. struct MarkHeader
  147. {
  148.   UBYTE Mark[5];
  149.   UWORD HeadSize;
  150. };
  151.  
  152. struct ArchiveHeader
  153. {
  154.   UWORD  HeadCRC;
  155.   UBYTE  HeadType;
  156.   UWORD  Flags;
  157.   UWORD  HeadSize;
  158.   UBYTE  Reserved[6];
  159. };
  160.  
  161. struct FileHeader
  162. {
  163.   UWORD  HeadCRC;
  164.   UBYTE  HeadType;
  165.   UWORD  Flags;
  166.   UWORD  HeadSize;
  167.   UDWORD PackSize;
  168.   UDWORD UnpSize;
  169.   UBYTE  HostOS;
  170.   UDWORD FileCRC;
  171.   UDWORD FileTime;
  172.   UBYTE  UnpVer;
  173.   UBYTE  Method;
  174.   UWORD  NameSize;
  175.   UDWORD FileAttr;
  176. };
  177.