/*	$OpenBSD: extern.h,v 1.14 1997/07/24 23:19:18 millert Exp $	*/
/*	$NetBSD: extern.h,v 1.5 1996/03/26 23:54:16 mrg Exp $	*/

/*-
 * Copyright (c) 1992 Keith Muller.
 * Copyright (c) 1992, 1993
 *	The Regents of the University of California.  All rights reserved.
 *
 * This code is derived from software contributed to Berkeley by
 * Keith Muller of the University of California, San Diego.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by the University of
 *	California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *	@(#)extern.h	8.2 (Berkeley) 4/18/94
 */

/*
 * External references from each source file
 */

#include <sys/cdefs.h>

/*
 * ar_io.c
 */
extern char *arcname;
extern char *gzip_program;
int ar_open __P((char *));
void ar_close __P((void));
void ar_drain __P((void));
int ar_set_wr __P((void));
int ar_app_ok __P((void));
int ar_read __P((register char *, register int));
int ar_write __P((register char *, register int));
int ar_rdsync __P((void));
int ar_fow __P((off_t, off_t *));
int ar_rev __P((off_t ));
int ar_next __P((void));

/*
 * ar_subs.c
 */
extern u_long flcnt;
void list __P((void));
void extract __P((void));
void append __P((void));
void archive __P((void));
void copy __P((void));

/*
 * buf_subs.c
 */
extern int blksz;
extern int wrblksz;
extern int maxflt;
extern int rdblksz;
extern off_t wrlimit;
extern off_t rdcnt;
extern off_t wrcnt;
int wr_start __P((void));
int rd_start __P((void));
void cp_start __P((void));
int appnd_start __P((off_t));
int rd_sync __P((void));
void pback __P((char *, int));
int rd_skip __P((off_t));
void wr_fin __P((void));
int wr_rdbuf __P((register char *, register int));
int rd_wrbuf __P((register char *, register int));
int wr_skip __P((off_t));
int wr_rdfile __P((ARCHD *, int, off_t *));
int rd_wrfile __P((ARCHD *, int, off_t *));
void cp_file __P((ARCHD *, int, int));
int buf_fill __P((void));
int buf_flush __P((register int));

/*
 * cache.c
 */
int uidtb_start __P((void));
int gidtb_start __P((void));
int usrtb_start __P((void));
int grptb_start __P((void));
char * name_uid __P((uid_t, int));
char * name_gid __P((gid_t, int));
int uid_name __P((char *, uid_t *));
int gid_name __P((char *, gid_t *));

/*
 * cpio.c
 */
int cpio_strd __P((void));
int cpio_trail __P((register ARCHD *));
int cpio_endwr __P((void));
int cpio_id __P((char *, int));
int cpio_rd __P((register ARCHD *, register char *));
off_t cpio_endrd __P((void));
int cpio_stwr __P((void));
int cpio_wr __P((register ARCHD *));
int vcpio_id __P((char *, int));
int crc_id __P((char *, int));
int crc_strd __P((void));
int vcpio_rd __P((register ARCHD *, register char *));
off_t vcpio_endrd __P((void));
int crc_stwr __P((void));
int vcpio_wr __P((register ARCHD *));
int bcpio_id __P((char *, int));
int bcpio_rd __P((register ARCHD *, register char *));
off_t bcpio_endrd __P((void));
int bcpio_wr __P((register ARCHD *));

/*
 * file_subs.c
 */
int file_creat __P((register ARCHD *));
void file_close __P((register ARCHD *, int));
int lnk_creat __P((register ARCHD *));
int cross_lnk __P((register ARCHD *));
int chk_same __P((register ARCHD *));
int node_creat __P((register ARCHD *));
int unlnk_exist __P((register char *, register int));
int chk_path __P((register char *, uid_t, gid_t));
void set_ftime __P((char *fnm, time_t mtime, time_t atime, int frc));
int set_ids __P((char *, uid_t, gid_t));
int set_lids __P((char *, uid_t, gid_t));
void set_pmode __P((char *, mode_t));
int file_write __P((int, char *, register int, int *, int *, int, char *));
void file_flush __P((int, char *, int));
void rdfile_close __P((register ARCHD *, register int *));
int set_crc __P((register ARCHD *, register int));

/*
 * ftree.c
 */
int ftree_start __P((void));
int ftree_add __P((register char *, int));
void ftree_sel __P((register ARCHD *));
void ftree_chk __P((void));
int next_file __P((register ARCHD *));

/*
 * gen_subs.c
 */
void ls_list __P((register ARCHD *, time_t, FILE *));
void ls_tty __P((register ARCHD *));
int l_strncpy __P((register char *, register char *, int));
u_long asc_ul __P((register char *, int, register int));
int ul_asc __P((u_long, register char *, register int, register int));
#ifndef NET2_STAT
u_quad_t asc_uqd __P((register char *, int, register int));
int uqd_asc __P((u_quad_t, register char *, register int, register int));
#endif

/* 
 * getoldopt.c
 */
int getoldopt __P((int, char **, char *));

/*
 * options.c
 */
extern FSUB fsub[];
extern int ford[];
void options __P((register int, register char **));
OPLIST * opt_next __P((void));
int opt_add __P((register char *));
int bad_opt __P((void));
char *chdname;

/*
 * pat_rep.c
 */
int rep_add __P((register char *));
int pat_add __P((char *, char *));
void pat_chk __P((void));
int pat_sel __P((register ARCHD *));
int pat_match __P((register ARCHD *));
int mod_name __P((register ARCHD *));
int set_dest __P((register ARCHD *, char *, int));

/*
 * pax.c
 */
extern int act;
extern FSUB *frmt;
extern int cflag;
extern int cwdfd;
extern int dflag;
extern int iflag;
extern int kflag;
extern int lflag;
extern int nflag;
extern int tflag;
extern int uflag;
extern int vflag;
extern int bz2flag;
extern int zflag;
extern int Dflag;
extern int Hflag;
extern int Lflag;
extern int Rflag;
extern int Xflag;
extern int Yflag;
extern int Zflag;
extern int vfpart;
extern int patime;
extern int pmtime;
extern int nodirs;
extern int pmode;
extern int pids;
extern int rmleadslash;
extern int exit_val;
extern int docrc;
extern char *dirptr;
extern char *ltmfrmt;
extern char *argv0;
int main __P((int, char **));
void sig_cleanup __P((int));

/*
 * sel_subs.c
 */
int sel_chk __P((register ARCHD *));
int grp_add __P((register char *));
int usr_add __P((register char *));
int trng_add __P((register char *));

/*
 * tables.c
 */
int lnk_start __P((void));
int chk_lnk __P((register ARCHD *));
void purg_lnk __P((register ARCHD *));
void lnk_end __P((void));
int ftime_start __P((void));
int chk_ftime __P((register ARCHD *));
int name_start __P((void));
int add_name __P((register char *, int, char *));
void sub_name __P((register char *, int *, size_t));
int dev_start __P((void));
int add_dev __P((register ARCHD *));
int map_dev __P((register ARCHD *, u_long, u_long));
int atdir_start __P((void));
void atdir_end __P((void));
void add_atdir __P((char *, dev_t, ino_t, time_t, time_t));
int get_atdir __P((dev_t, ino_t, time_t *, time_t *));
int dir_start __P((void));
void add_dir __P((char *, int, struct stat *, int));
void proc_dir __P((void));
u_int st_hash __P((char *, int, int));

/*
 * tar.c
 */
int tar_endwr __P((void));
off_t tar_endrd __P((void));
int tar_trail __P((register char *, register int, register int *));
int tar_id __P((register char *, int));
int tar_opt __P((void));
int tar_rd __P((register ARCHD *, register char *));
int tar_wr __P((register ARCHD *));
int ustar_strd __P((void));
int ustar_stwr __P((void));
int ustar_id __P((char *, int));
int ustar_rd __P((register ARCHD *, register char *));
int ustar_wr __P((register ARCHD *));

/*
 * tty_subs.c
 */
int tty_init __P((void));
void tty_prnt __P((char *, ...));
int tty_read __P((char *, int));
void paxwarn __P((int, char *, ...));
void syswarn __P((int, int, char *, ...));
