home *** CD-ROM | disk | FTP | other *** search
- /* define.h - global definitions for Tar program (see file tar.c)
- * Author: Shaporev T.V.
- * Creation date: 14 Dec 1990
- */
- #ifdef __ALLOCEXT__
- # define EXT
- # define INI(x) = x
- #else
- # define EXT extern
- # define INI(x)
- #endif
-
- #define ERRARG 1
- #define ERINIT 2
- #define ERREAD 3
- #define EWRITE 4
- #define ESMALL 5
- #define EINTER 6
- #define EXIT 7
-
- #define TRUE 1
- #define FALSE 0
- #define ERROR (-1)
- #define CORRECT 0
- #define MAXBLOCK 32
- #define BLKSIZE 512
- #define MINTNAME 2
- #define MAXTNAME 100
- #define dimof(x) (sizeof(x)/sizeof((x)[0]))
- #define blank(c) ((c)==' ' || (c)=='\t')
- #define space(c) (blank(c) || (c)=='\n' || (c)=='\r')
- #define digit(c) ((c)>='0' && (c)<='9')
- #define OPTFLAG '\200'
- #define OPTMASK 0177
-
- #ifndef RMKDIR
- # ifdef M_XENIX
- # define RMKDIR
- # endif
- #endif
- #ifndef RMKDIR
- # ifdef i386
- # define RMKDIR
- # endif
- # ifdef sun
- # define RMKDIR
- # endif
- #endif
-
- #ifdef MSDOS
- # include <fcntl.h>
- #endif
- #ifdef __TURBOC__
- # define write _write
- # define read _read
- #else
- # include <sys/types.h>
- #endif
- #include <sys/stat.h>
- #ifndef S_IREAD
- # define S_IREAD 00400
- # define S_IWRITE 00200
- # define S_IEXEC 00100
- #endif
- #ifndef S_ISVTX
- # define S_ISUID 04000
- # define S_ISGID 02000
- # define S_ISVTX 01000
- #endif
- #ifndef O_RDONLY
- # define O_RDONLY 0
- # define O_WRONLY 1
- # define O_RDWR 2
- # define O_BINARY 0
- #endif
-
- EXT struct stat sa, st;
- EXT long longcsum, codesize, allblock, allbytes;
- EXT short dmajor, dminor;
- EXT int allfiles;
- #define isfile ((sa.st_mode & S_IFMT) == S_IFREG)
- EXT char ndrive;
- #ifdef MSDOS
- # define DEV_FILE 0
- # define DEV_FLOP 1
- # define DEV_QIC2 2
- # define DEV_ASPI 3
- EXT char devtype INI(DEV_FILE);
- EXT char setdrive INI(FALSE);
- #endif
-
- #ifdef UNIX
- EXT FILE *myinp;
- #else
- # define myinp stdin
- #endif
- EXT FILE *myout;
- EXT int handle, hwrite;
- EXT char a_flag, x_flag, t_flag, c_flag, v_flag, u_flag, y_flag, w_flag,
- i_flag, m_flag, d_flag, j_flag, s_flag, nonest, dslash, o_flag,
- l_flag, cbreak, gnuzip;
- #ifdef UNIX
- EXT char p_flag;
- #endif
-
- #ifdef MSDOS
- EXT char k_flag, deldrv;
- EXT int filemask;
- EXT char *archname INI(NULL);
- #endif
- EXT char *tarcmd INI(NULL), *responce INI(NULL), **argvector INI(NULL);
- EXT char *appname INI(NULL), *tapename INI(NULL);
- EXT long volume INI(0L);
-
- EXT char pktype;
- EXT int lzwbits, ziplevel;
- #define PKNONE 0
- /*#define PKLZH 1*/
- #define PKfLZW 2
- #define PKpLZW 3
- #define PKZIP 4
- #define PKDEF 5
-
- /* Standard tar file type flags */
- #define TF_OLD '\0' /* old-fashion flag - regular file */
- #define TF_REG '0' /* regular file */
- #define TF_LNK '1' /* link */
- #define TF_SYM '2' /* symbolic link */
- #define TF_CHR '3' /* character device */
- #define TF_BLK '4' /* block device */
- #define TF_DIR '5' /* directory */
- #define TF_QUE '6' /* FIFO special */
- #define TF_CTG '7' /* contiguous file */
-
- /* GNU extensions */
- #define GF_DMP 'D' /* This is a dir entry that contains
- the names of files that were in the
- dir at the time the dump was made */
- #define GF_LLN 'K' /* Identifies the NEXT file on the tape
- as having a long linkname */
- #define GF_LNM 'L' /* Identifies the NEXT file on the tape
- as having a long name. */
- #define GF_MUL 'M' /* This is the continuation of a file
- that began on another volume */
- #define GF_NAM 'N' /* For storing filenames that didn't
- fit in 100 characters */
- #define GF_SPR 'S' /* This is for sparse files */
- #define GF_VOL 'V' /* This file is a tape/volume header */
-
- #define TMAGIC "ustar "
- #define GMAGIC "GNUtar "
-
- #define TXT_WORD 8
- #define TXT_LONG 12
-
- #define THEAD char\
- name[MAXTNAME],\
- mode[TXT_WORD],\
- uid[TXT_WORD],\
- gid[TXT_WORD],\
- size[TXT_LONG],\
- mtime[TXT_LONG],\
- chksum[TXT_WORD],\
- filetype,\
- linkname[MAXTNAME],\
-
- typedef union {
- struct {/* main/mine data */
- THEAD
- comment[BLKSIZE-MAXTNAME-8-8-8-12-12-8-1-MAXTNAME-12-12],
- srcsum[TXT_LONG], srclen[TXT_LONG];
- } m;
- struct {/* System V extensions */
- THEAD extent[4], allext[4], total[TXT_LONG];
- } s;
- struct {/* P1003 & GNU extensions */
- THEAD magic[8], uname[32], gname[32],
- devmajor[TXT_WORD], devminor[TXT_WORD],
- /* the following fields are added gnu and NOT standard */
- atime[12], ctime[12], offset[12];
- } x;
- } header;
-
- typedef struct _node {
- struct _node *prev, *next;
- union {
- long time;
- struct {
- int inode, device, count;
- } data;
- } info;
- char name[MINTNAME];
- } node;
-
- #define pkfile (pktype == PKDEF || pktype == PKfLZW)
- #define PKSIZE (8*BLKSIZE)
- EXT int pksize INI(PKSIZE);
- EXT char *pk_inp INI(NULL), *pk_out INI(NULL);
- EXT char pklock;
-
- EXT char *io_buf, *io_2nd;
- EXT int cblock;
-
- EXT header *hblock;
- EXT char *scratch;
-
- #define NONE (node *)0
- EXT node *timehead INI(NONE);
- #ifdef UNIX
- EXT node *linkhead INI(NONE);
- #endif
-
- #ifndef MSDOS
- # define takename(a,b) (void)strcpy((a),(b))
- #endif
-
- #define XMAX 16
- EXT char *xarg[XMAX];
- EXT int xcnt;
-
- int yes_no __ARGS__(( char ));
- #define YES_NO() yes_no('N')
-
- void outmem __ARGS__(( FILE* ));
- char *salloc __ARGS__(( int ));
- char *getbuf __ARGS__(( int ));
- void done __ARGS__(( int ));
- int initape __ARGS__(( char* ));
- int pkalloc __ARGS__(( void ));
- int runtape __ARGS__(( void ));
- int redirect __ARGS__(( void ));
- void duptape __ARGS__(( char* ));
- void prmode __ARGS__(( char, int ));
- int okwork __ARGS__(( char, char, struct stat *, char* ));
- void cantopen __ARGS__(( char* ));
- void savefile __ARGS__(( char* ));
- void store __ARGS__(( char* ));
- char prefix __ARGS__(( void ));
- int usize __ARGS__(( void ));
- short isextent __ARGS__(( short *, long *));
- int ismagic __ARGS__(( void ));
- void catalog __ARGS__(( void ));
- void extract __ARGS__(( void ));
- int restore __ARGS__(( char*));
- void makelink __ARGS__(( char*, char* ));
- void acctime __ARGS__(( void ));
- void uplist __ARGS__(( void ));
- int pktest __ARGS__(( unsigned char* ));
- int gethead __ARGS__(( void ));
- int inargs __ARGS__(( int, char**, char* ));
- void scantape __ARGS__(( int, char**, void(*)() ));
- void backtape __ARGS__(( void ));
- void extwrerr __ARGS__(( void ));
- header *readtape __ARGS__(( void ));
- short headsum __ARGS__(( header * ));
- header *steptape __ARGS__(( void ));
- void writebyte __ARGS__(( int ));
- long writearch __ARGS__(( int, long, char* ));
- void nullblock __ARGS__(( header * ));
- void endtape __ARGS__(( void ));
- int readbyte __ARGS__(( void ));
- void bacouple __ARGS__(( void ));
- int readarch __ARGS__(( int, long ));
- node *finditem __ARGS__(( char*, node **, node * ));
- node *additem __ARGS__(( char*, node *, node ** ));
- void delitem __ARGS__(( node *, node ** ));
- void skipfile __ARGS__(( void ));
- void percent __ARGS__(( long, long ));
- #ifdef MSDOS
- int argdisk __ARGS__(( int ));
- void inidisk __ARGS__(( void ));
- int defdev __ARGS__(( char* ));
- void logdisk __ARGS__(( int, char*, int ));
- void takename __ARGS__(( char*, char* ));
-
- int streamer __ARGS__(( int, void*, int ));
- long ptr2abs __ARGS__(( void far * ));
- #endif
- int mismatch __ARGS__((char*, char*, int));
- int fmatch __ARGS__((char*, char*));
- int envbuild __ARGS__((int, char***));
- int readopt __ARGS__((int*, char***, int));
- int argfile __ARGS__((int, char***, char*, char**));
- int buildarg __ARGS__((int, char***, char*));
- void revector __ARGS__((int, char***, int));