home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 mARCH / PCWK3A99.iso / Archiwiz / Tar320 / SOURCES.ZIP / DEFINE.H < prev    next >
Text File  |  1996-05-05  |  8KB  |  286 lines

  1. /* define.h - global definitions for Tar program (see file tar.c)
  2.  * Author: Shaporev T.V.
  3.  * Creation date: 14 Dec 1990
  4.  */
  5. #ifdef __ALLOCEXT__
  6. #    define EXT
  7. #    define INI(x) = x
  8. #else
  9. #    define EXT extern
  10. #    define INI(x)
  11. #endif
  12.  
  13. #define ERRARG   1
  14. #define ERINIT   2
  15. #define ERREAD   3
  16. #define EWRITE   4
  17. #define ESMALL   5
  18. #define EINTER   6
  19. #define EXIT     7
  20.  
  21. #define TRUE     1
  22. #define FALSE    0
  23. #define ERROR    (-1)
  24. #define CORRECT  0
  25. #define MAXBLOCK 32
  26. #define BLKSIZE  512
  27. #define MINTNAME 2
  28. #define MAXTNAME 100
  29. #define dimof(x) (sizeof(x)/sizeof((x)[0]))
  30. #define blank(c) ((c)==' ' || (c)=='\t')
  31. #define space(c) (blank(c) || (c)=='\n' || (c)=='\r')
  32. #define digit(c) ((c)>='0' && (c)<='9')
  33. #define OPTFLAG  '\200'
  34. #define OPTMASK  0177
  35.  
  36. #ifndef RMKDIR
  37. #    ifdef M_XENIX
  38. #        define RMKDIR
  39. #    endif
  40. #endif
  41. #ifndef RMKDIR
  42. #    ifdef i386
  43. #        define RMKDIR
  44. #    endif
  45. #    ifdef sun
  46. #        define RMKDIR
  47. #    endif
  48. #endif
  49.  
  50. #ifdef MSDOS
  51. #    include <fcntl.h>
  52. #endif
  53. #ifdef __TURBOC__
  54. #    define write _write
  55. #    define read  _read
  56. #else
  57. #       include <sys/types.h>
  58. #endif
  59. #include <sys/stat.h>
  60. #ifndef S_IREAD
  61. #      define S_IREAD  00400
  62. #    define S_IWRITE 00200
  63. #    define S_IEXEC  00100
  64. #endif
  65. #ifndef S_ISVTX
  66. #    define S_ISUID 04000
  67. #    define S_ISGID 02000
  68. #    define S_ISVTX 01000
  69. #endif
  70. #ifndef O_RDONLY
  71. #    define O_RDONLY 0
  72. #    define O_WRONLY 1
  73. #    define O_RDWR   2
  74. #    define O_BINARY 0
  75. #endif
  76.  
  77. EXT struct stat sa, st;
  78. EXT long longcsum, codesize, allblock, allbytes;
  79. EXT short dmajor, dminor;
  80. EXT int allfiles;
  81. #define isfile ((sa.st_mode & S_IFMT) == S_IFREG)
  82. EXT char ndrive;
  83. #ifdef MSDOS
  84. #    define DEV_FILE 0
  85. #    define DEV_FLOP 1
  86. #    define DEV_QIC2 2
  87. #    define DEV_ASPI 3
  88.     EXT char devtype INI(DEV_FILE);
  89.     EXT char setdrive INI(FALSE);
  90. #endif
  91.  
  92. #ifdef UNIX
  93.     EXT FILE *myinp;
  94. #else
  95. #    define myinp stdin
  96. #endif
  97. EXT FILE *myout;
  98. EXT int  handle, hwrite;
  99. EXT char a_flag, x_flag, t_flag, c_flag, v_flag, u_flag, y_flag, w_flag,
  100.          i_flag, m_flag, d_flag, j_flag, s_flag, nonest, dslash, o_flag,
  101.          l_flag, cbreak, gnuzip;
  102. #ifdef UNIX
  103.     EXT char p_flag;
  104. #endif
  105.  
  106. #ifdef MSDOS
  107.     EXT char k_flag, deldrv;
  108.     EXT int filemask;
  109.     EXT char *archname INI(NULL);
  110. #endif
  111. EXT char *tarcmd INI(NULL), *responce INI(NULL), **argvector INI(NULL);
  112. EXT char *appname INI(NULL), *tapename INI(NULL);
  113. EXT long volume INI(0L);
  114.  
  115. EXT char pktype;
  116. EXT int lzwbits, ziplevel;
  117. #define PKNONE 0
  118. /*#define PKLZH 1*/
  119. #define PKfLZW 2
  120. #define PKpLZW 3
  121. #define PKZIP  4
  122. #define PKDEF  5
  123.  
  124. /* Standard tar file type flags */
  125. #define TF_OLD '\0' /* old-fashion flag - regular file */
  126. #define TF_REG '0'  /* regular file */
  127. #define TF_LNK '1'  /* link */
  128. #define TF_SYM '2'  /* symbolic link */
  129. #define TF_CHR '3'  /* character device */
  130. #define TF_BLK '4'  /* block device */
  131. #define TF_DIR '5'  /* directory */
  132. #define TF_QUE '6'  /* FIFO special */
  133. #define TF_CTG '7'  /* contiguous file */
  134.  
  135. /* GNU extensions */
  136. #define GF_DMP 'D'  /* This is a dir entry that contains
  137.                        the names of files that were in the
  138.                        dir at the time the dump was made */
  139. #define GF_LLN 'K'  /* Identifies the NEXT file on the tape
  140.                        as having a long linkname */
  141. #define GF_LNM 'L'  /* Identifies the NEXT file on the tape
  142.                        as having a long name. */
  143. #define GF_MUL 'M'  /* This is the continuation of a file
  144.                        that began on another volume */
  145. #define GF_NAM 'N'  /* For storing filenames that didn't
  146.                        fit in 100 characters */
  147. #define GF_SPR 'S'  /* This is for sparse files */
  148. #define GF_VOL 'V'  /* This file is a tape/volume header */
  149.  
  150. #define TMAGIC "ustar  "
  151. #define GMAGIC "GNUtar "
  152.  
  153. #define TXT_WORD 8
  154. #define TXT_LONG 12
  155.  
  156. #define THEAD char\
  157.     name[MAXTNAME],\
  158.     mode[TXT_WORD],\
  159.     uid[TXT_WORD],\
  160.     gid[TXT_WORD],\
  161.     size[TXT_LONG],\
  162.     mtime[TXT_LONG],\
  163.     chksum[TXT_WORD],\
  164.     filetype,\
  165.     linkname[MAXTNAME],\
  166.  
  167. typedef union {
  168.    struct {/* main/mine data */
  169.       THEAD
  170.       comment[BLKSIZE-MAXTNAME-8-8-8-12-12-8-1-MAXTNAME-12-12],
  171.       srcsum[TXT_LONG], srclen[TXT_LONG];
  172.    } m;
  173.    struct {/* System V extensions */
  174.       THEAD extent[4], allext[4], total[TXT_LONG];
  175.    } s;
  176.    struct {/* P1003 & GNU extensions */
  177.       THEAD magic[8], uname[32], gname[32],
  178.       devmajor[TXT_WORD], devminor[TXT_WORD],
  179.       /* the following fields are added gnu and NOT standard */
  180.       atime[12], ctime[12], offset[12];
  181.    } x;
  182. } header;
  183.  
  184. typedef struct _node {
  185.     struct _node *prev, *next;
  186.         union {
  187.         long time;
  188.         struct {
  189.             int inode, device, count;
  190.         } data;
  191.     } info;
  192.         char name[MINTNAME];
  193. } node;
  194.  
  195. #define pkfile (pktype == PKDEF || pktype == PKfLZW)
  196. #define PKSIZE (8*BLKSIZE)
  197. EXT int pksize INI(PKSIZE);
  198. EXT char *pk_inp INI(NULL), *pk_out INI(NULL);
  199. EXT char pklock;
  200.  
  201. EXT char *io_buf, *io_2nd;
  202. EXT int cblock;
  203.  
  204. EXT header *hblock;
  205. EXT char *scratch;
  206.  
  207. #define NONE (node *)0
  208. EXT node *timehead INI(NONE);
  209. #ifdef UNIX
  210.     EXT node *linkhead INI(NONE);
  211. #endif
  212.  
  213. #ifndef MSDOS
  214. #    define takename(a,b) (void)strcpy((a),(b))
  215. #endif
  216.  
  217. #define XMAX 16
  218. EXT char *xarg[XMAX];
  219. EXT int xcnt;
  220.  
  221. int   yes_no   __ARGS__(( char ));
  222. #define YES_NO() yes_no('N')
  223.  
  224. void  outmem   __ARGS__(( FILE* ));
  225. char  *salloc  __ARGS__(( int ));
  226. char  *getbuf  __ARGS__(( int ));
  227. void  done     __ARGS__(( int ));
  228. int   initape  __ARGS__(( char* ));
  229. int   pkalloc  __ARGS__(( void ));
  230. int   runtape  __ARGS__(( void ));
  231. int   redirect __ARGS__(( void ));
  232. void  duptape  __ARGS__(( char* ));
  233. void  prmode   __ARGS__(( char, int ));
  234. int   okwork   __ARGS__(( char, char, struct stat *, char* ));
  235. void  cantopen __ARGS__(( char* ));
  236. void  savefile __ARGS__(( char* ));
  237. void  store    __ARGS__(( char* ));
  238. char  prefix   __ARGS__(( void ));
  239. int   usize    __ARGS__(( void ));
  240. short isextent __ARGS__(( short *, long *));
  241. int   ismagic  __ARGS__(( void ));
  242. void  catalog  __ARGS__(( void ));
  243. void  extract  __ARGS__(( void ));
  244. int   restore  __ARGS__(( char*));
  245. void  makelink __ARGS__(( char*, char* ));
  246. void  acctime  __ARGS__(( void ));
  247. void  uplist   __ARGS__(( void ));
  248. int   pktest   __ARGS__(( unsigned char* ));
  249. int   gethead  __ARGS__(( void ));
  250. int   inargs   __ARGS__(( int, char**, char* ));
  251. void  scantape __ARGS__(( int, char**, void(*)() ));
  252. void  backtape __ARGS__(( void ));
  253. void  extwrerr __ARGS__(( void ));
  254. header *readtape  __ARGS__(( void ));
  255. short headsum  __ARGS__(( header * ));
  256. header *steptape  __ARGS__(( void ));
  257. void  writebyte __ARGS__(( int ));
  258. long  writearch __ARGS__(( int, long, char* ));
  259. void  nullblock __ARGS__(( header * ));
  260. void  endtape  __ARGS__(( void ));
  261. int   readbyte __ARGS__(( void ));
  262. void  bacouple __ARGS__(( void ));
  263. int   readarch __ARGS__(( int, long ));
  264. node *finditem __ARGS__(( char*, node **, node * ));
  265. node *additem  __ARGS__(( char*, node *, node ** ));
  266. void  delitem  __ARGS__(( node *, node ** ));
  267. void  skipfile __ARGS__(( void ));
  268. void  percent  __ARGS__(( long, long ));
  269. #ifdef MSDOS
  270.     int  argdisk  __ARGS__(( int ));
  271.     void inidisk  __ARGS__(( void ));
  272.     int  defdev   __ARGS__(( char* ));
  273.     void logdisk  __ARGS__(( int, char*, int ));
  274.     void takename __ARGS__(( char*, char* ));
  275.  
  276.     int  streamer __ARGS__(( int, void*, int ));
  277.     long ptr2abs  __ARGS__(( void far * ));
  278. #endif
  279. int mismatch __ARGS__((char*, char*, int));
  280. int fmatch   __ARGS__((char*, char*));
  281. int envbuild __ARGS__((int, char***));
  282. int readopt  __ARGS__((int*, char***, int));
  283. int argfile  __ARGS__((int, char***, char*, char**));
  284. int buildarg __ARGS__((int, char***, char*));
  285. void revector __ARGS__((int, char***, int));
  286.