home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_progs / fileutil / scan.lha / src / lharc.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-05-21  |  9.1 KB  |  296 lines

  1. /*----------------------------------------------------------------------*/
  2. /*              LHarc Archiver Driver for UNIX                          */
  3. /*                                                                      */
  4. /*              Copyright(C) MCMLXXXIX  Yooichi.Tagawa                  */
  5. /*                                                                      */
  6. /*  V1.00  Fixed                                1989.09.22  Y.Tagawa    */
  7. /*----------------------------------------------------------------------*/
  8.  
  9.  
  10. #include <ctype.h>
  11. #include <signal.h>
  12.  
  13. #include <exec/types.h>
  14. #include <time.h>
  15. #include <fcntl.h>
  16. #include <stat.h>
  17.  
  18. #include <string.h>
  19.  
  20. #define WRITE_BINARY    "w"
  21. #define READ_BINARY     "r"
  22.  
  23. /*----------------------------------------------------------------------*/
  24. /*                      MEMORY FUNCTIONS                                */
  25. /*----------------------------------------------------------------------*/
  26.  
  27. #ifdef __ANSI__
  28. #include "mem.h"
  29. #define bcmp(a,b,n) memcmp ((a),(b),(n))
  30. #define bcopy(s,d,n) memmove((d),(s),(n))
  31. #define bzero(d,n) memset((d),0,(n))
  32. #else   /* not __ANSI__ */
  33. #include <exec/memory.h>
  34. #define bcmp(a,b,n) memcmp ((a),(b),(n))
  35. #define bcopy(s,d,n) memcpy ((d),(s),(n))       /* movmem((s),(d),(n)) */
  36. #define bzero(d,n) memset((d),0,(n))
  37. #endif  /* not __ANSI__ */
  38.  
  39.  
  40. /*----------------------------------------------------------------------*/
  41. /*                      YOUR CUSTOMIZATIONS                             */
  42. /*----------------------------------------------------------------------*/
  43. /* These definitions are changable to you likings. */
  44. /* #define ARCHIVENAME_EXTENTION        ".LZH"          */
  45. /* #define BACKUPNAME_EXTENTION         ".BAK"          */
  46. /* #define TMP_FILENAME_TEMPLATE        "/usr/tmp/lhXXXXXX" */
  47. /* #define MULTIBYTE_CHAR                               */
  48. /* #define USE_PROF                                     */
  49.  
  50.  
  51. #ifndef ARCHIVENAME_EXTENTION
  52. #       define ARCHIVENAME_EXTENTION    ".lzh"
  53. #endif
  54. #ifndef BACKUPNAME_EXTENTION
  55. #       define BACKUPNAME_EXTENTION     ".bak"
  56. #endif
  57. #ifndef TMP_FILENAME_TEMPLATE
  58. #       define TMP_FILENAME_TEMPLATE    "/tmp/lhXXXXXX"
  59. #endif
  60.  
  61. #define SJC_FIRST_P(c)                  \
  62.   (((unsigned char)(c) >= 0x80) &&      \
  63.    (((unsigned char)(c) < 0xa0) ||      \
  64.     ((unsigned char)(c) >= 0xe0) &&     \
  65.     ((unsigned char)(c) < 0xfd)))
  66. #define SJC_SECOND_P(c)                 \
  67.   (((unsigned char)(c) >= 0x40) &&      \
  68.    ((unsigned char)(c) < 0xfd) &&       \
  69.    ((ungigned char)(c) != 0x7f))
  70.  
  71. #ifdef MULTIBYTE_CHAR
  72. #       define MULTIBYTE_FIRST_P        SJC_FIRST_P
  73. #       define MULTIBYTE_SECOND_P       SJC_SECOND_P
  74. #endif
  75.  
  76. /*----------------------------------------------------------------------*/
  77. /*                      OTHER DIFINITIONS                               */
  78. /*----------------------------------------------------------------------*/
  79.  
  80. /* Your C-Compiler has no 'void' */
  81. #ifdef NO_VOID
  82. #       define void
  83. #endif
  84.  
  85. #ifndef SEEK_SET
  86. #       define SEEK_SET 0
  87. #       define SEEK_CUR 1
  88. #       define SEEK_END 2
  89. #endif
  90.  
  91. #       define FILENAME_LENGTH  255
  92.  
  93. #include <stdio.h>
  94.  
  95. /* non-integral functions */
  96. extern struct tm *localtime ();
  97. extern char *getenv ();
  98. extern char *malloc ();
  99. extern char *realloc ();
  100.  
  101.  
  102. /* external variables */
  103. extern int errno;
  104.  
  105.  
  106. #define FALSE   0
  107. #define TRUE    1
  108. typedef int boolean;
  109.  
  110.  
  111. /*----------------------------------------------------------------------*/
  112. /*              LHarc FILE DIFINITIONS                                  */
  113. /*----------------------------------------------------------------------*/
  114. #define METHOD_TYPE_STRAGE      5
  115. #define LZHUFF0_METHOD          "-lh0-"
  116. #define LZHUFF1_METHOD          "-lh1-"
  117. #define LZHUFF5_METHOD          "-lh5-"
  118. #define LARC4_METHOD            "-lz4-"
  119. #define LARC5_METHOD            "-lz5-"
  120.  
  121. #define I_HEADER_SIZE                   0
  122. #define I_HEADER_CHECKSUM               1
  123. #define I_METHOD                        2
  124. #define I_PACKED_SIZE                   7
  125. #define I_ORIGINAL_SIZE                 11
  126. #define I_LAST_MODIFIED_STAMP           15
  127. #define I_ATTRIBUTE                     19
  128. #define I_NAME_LENGTH                   21
  129. #define I_NAME                          22
  130.  
  131. #define I_CRC                           22 /* + name_length */
  132. #define I_EXTEND_TYPE                   24 /* + name_length */
  133. #define I_MINOR_VERSION                 25 /* + name_length */
  134. #define I_UNIX_LAST_MODIFIED_STAMP      26 /* + name_length */
  135. #define I_UNIX_MODE                     30 /* + name_length */
  136. #define I_UNIX_UID                      32 /* + name_length */
  137. #define I_UNIX_GID                      34 /* + name_length */
  138. #define I_UNIX_EXTEND_BOTTOM            36 /* + name_length */
  139.  
  140. #define I_GENERIC_HEADER_BOTTOM         I_EXTEND_TYPE
  141.  
  142.  
  143.  
  144. #define EXTEND_GENERIC  0
  145. #define EXTEND_UNIX     'U'
  146. #define EXTEND_MSDOS    'M'
  147. #define EXTEND_MACOS    'm'
  148. #define EXTEND_OS9      '9'
  149. #define EXTEND_OS2      '2'
  150. #define EXTEND_OS68K    'K'
  151. #define EXTEND_OS386    '3'
  152. #define EXTEND_HUMAN    'H'
  153. #define EXTEND_CPM      'C'
  154. #define EXTEND_FLEX     'F'
  155.  
  156. #define GENERIC_ATTRIBUTE               0x20
  157. #define GENERIC_DIRECTORY_ATTRIBUTE     0x10
  158.  
  159. #define CURRENT_UNIX_MINOR_VERSION      0x00
  160.  
  161.  
  162.  
  163. typedef struct LzHeader {
  164.   unsigned char         header_size;
  165.   char                  method[METHOD_TYPE_STRAGE];
  166.   long                  packed_size;
  167.   long                  original_size;
  168.   long                  last_modified_stamp;
  169.   unsigned short        attribute;
  170.   char                  name[256];
  171.   unsigned short        crc;
  172.   boolean               has_crc;
  173.   unsigned char         extend_type;
  174.   unsigned char         minor_version;
  175.   /*  extend_type == EXTEND_UNIX  and convert from other type. */
  176.   time_t                unix_last_modified_stamp;
  177.   unsigned short        unix_mode;
  178.   unsigned short        unix_uid;
  179.   unsigned short        unix_gid;
  180. } LzHeader;
  181.  
  182. #define UNIX_FILE_TYPEMASK      0170000
  183. #define UNIX_FILE_REGULAR       0100000
  184. #define UNIX_FILE_DIRECTORY     0040000
  185. #define UNIX_SETUID             0004000
  186. #define UNIX_SETGID             0002000
  187. #define UNIX_STYCKYBIT          0001000
  188. #define UNIX_OWNER_READ_PERM    0000400
  189. #define UNIX_OWNER_WRITE_PERM   0000200
  190. #define UNIX_OWNER_EXEC_PERM    0000100
  191. #define UNIX_GROUP_READ_PERM    0000040
  192. #define UNIX_GROUP_WRITE_PERM   0000020
  193. #define UNIX_GROUP_EXEC_PERM    0000010
  194. #define UNIX_OTHER_READ_PERM    0000004
  195. #define UNIX_OTHER_WRITE_PERM   0000002
  196. #define UNIX_OTHER_EXEC_PERM    0000001
  197. #define UNIX_RW_RW_RW           0000666
  198.  
  199. #define LZHEADER_STRAGE         256
  200.  
  201. /* used by qsort() for alphabetic-sort */
  202. #define STRING_COMPARE(a,b) strcmp((a),(b))
  203.  
  204. struct string_pool {
  205.   int used;
  206.   int size;
  207.   int n;
  208.   char *buffer;
  209. };
  210.  
  211.  
  212. /*----------------------------------------------------------------------*/
  213. /*                      OPTIONS                                         */
  214. /*----------------------------------------------------------------------*/
  215.  
  216. /* command line options (common options) */
  217. extern boolean  quiet;
  218. extern boolean  text_mode;
  219. extern boolean  verbose;
  220. extern boolean  noexec;         /* debugging option */
  221. extern boolean  force;
  222. extern boolean  prof;
  223. extern boolean  delete_after_append;
  224.  
  225. /* list command flags */
  226. extern boolean  verbose_listing;
  227.  
  228. /* extract/print command flags */
  229. extern boolean  output_to_stdout;
  230.  
  231. /* add/update/delete command flags */
  232. extern boolean  new_archive;
  233. extern boolean  update_if_newer;
  234. extern boolean  generic_format;
  235.  
  236.  
  237. /*----------------------------------------------------------------------*/
  238. /*                      VARIABLES                                       */
  239. /*----------------------------------------------------------------------*/
  240.  
  241. extern char     **cmd_filev;
  242. extern int      cmd_filec;
  243.  
  244. extern char     *archive_name;
  245. extern char     expanded_archive_name[FILENAME_LENGTH];
  246. extern char     temporary_name[FILENAME_LENGTH];
  247. extern char     backup_archive_name[FILENAME_LENGTH];
  248.  
  249. extern char *reading_filename, *writting_filename;
  250. extern boolean  remove_temporary_at_error;
  251. extern boolean  recover_archive_when_interrupt;
  252. extern boolean  remove_extracting_file_when_interrupt;
  253.  
  254. extern int      archive_file_mode;
  255. extern int      archive_file_gid;
  256.  
  257. /*----------------------------------------------------------------------*/
  258. /*              Functions                                               */
  259. /*----------------------------------------------------------------------*/
  260.  
  261. extern int interrupt ();
  262.  
  263. extern void message ();
  264. extern void warning ();
  265. extern void error ();
  266. extern void fatal_error ();
  267.  
  268. extern boolean need_file ();
  269. extern int inquire ();
  270. extern FILE *xfopen ();
  271.  
  272. extern boolean find_files ();
  273. extern void free_files ();
  274.  
  275. extern void init_sp ();
  276. extern void add_sp ();
  277. extern void finish_sp ();
  278. extern void free_sp ();
  279. extern void cleaning_files ();
  280.  
  281. extern void build_temporary_name ();
  282. extern void build_backup_file_name ();
  283. extern void build_standard_archive_name ();
  284.  
  285. extern FILE *open_old_archive ();
  286. extern void init_header ();
  287. extern boolean get_header ();
  288. extern boolean archive_is_msdos_sfx1 ();
  289. extern boolean skip_msdos_sfx1_code ();
  290. extern void write_header ();
  291. extern void write_archive_tail ();
  292. extern void copy_old_one ();
  293.  
  294. extern void cmd_list (), extract_one (), cmd_add (), cmd_delete ();
  295. extern void cmd_extract ();
  296.