mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
915 lines
30 KiB
915 lines
30 KiB
|
|
/************************
|
|
Copyright (c) Maynard, an Archive Company. 1991
|
|
|
|
Name: qtc.h
|
|
|
|
Description: This file contains the definitions, macros, and function
|
|
prototypes for the Quick Tape Catalogs (QTC).
|
|
|
|
$Log: N:\LOGFILES\QTC.H_V $
|
|
|
|
Rev 1.34 06 Dec 1993 09:47:20 mikep
|
|
Very deep path support & unicode fixes
|
|
|
|
Rev 1.33 02 Nov 1993 17:48:46 MIKEP
|
|
delete unused parameter
|
|
|
|
Rev 1.32 02 Nov 1993 17:14:00 MIKEP
|
|
add fsys.h for non dll builds
|
|
|
|
Rev 1.31 28 Oct 1993 17:32:34 MIKEP
|
|
qtc dll
|
|
|
|
Rev 1.30 19 Jul 1993 21:21:06 MIKEP
|
|
add new status bits for ecc tapes
|
|
|
|
Rev 1.29 17 Jun 1993 09:08:46 Stefan
|
|
Added ifdef around function that used FSYS_HAND and DBLKS.
|
|
|
|
Rev 1.28 15 Jun 1993 11:22:02 ChuckS
|
|
Added new QTC errors QTC_TAPE_TAGGED_DELETED and QTC_CATALOG_FILE_IN_USE for
|
|
Endeavour client/server environment. Added QTC_NON_VOLUME and QTC_TAPE_DELETED
|
|
status-bit defines for QTC_HEADER statuses.
|
|
|
|
P_CLINET || OS_NLM only: Added prototype for QTC_TagTapeForDeletion.
|
|
|
|
|
|
Rev 1.27 09 Jun 1993 19:29:30 MIKEP
|
|
enable c++
|
|
|
|
Rev 1.26 01 Jun 1993 18:17:14 DON
|
|
Added status bit for bset doesn't support redirected restore
|
|
|
|
Rev 1.25 20 May 1993 19:48:18 ChuckS
|
|
Enclosed prototype for QTC_LookForFiles with #if defined( BECONFIG_H ),
|
|
so including qtc.h doesn't force include of beconfig.h also
|
|
|
|
Rev 1.24 19 May 1993 16:08:02 ChuckS
|
|
OS_NLM only: made cat_user stuff available for the NLM as well
|
|
|
|
Rev 1.23 18 May 1993 17:01:36 ChuckS
|
|
P_CLIENT only: Added cat_user field to QTC_CATALOG structure and prototype
|
|
of function to set the cat_user.
|
|
|
|
Rev 1.22 13 May 1993 13:25:00 ChuckS
|
|
Changes for revamped QTC usage of virtual memory. Changed Q_ELEM's to
|
|
VQ_ELEM's and moved to start of QTC_BSET and QTC_TAPE structures; changed
|
|
Q_HEADER to VQ_HEADER. Changed arguments to QTC_NewBset and QTC_RemoveBset
|
|
to take VQ_HDL instead of QTC_BSET_PTR for the bset to act upon.
|
|
|
|
|
|
Rev 1.21 01 May 1993 19:13:18 MIKEP
|
|
add fatdrive bit to status
|
|
|
|
Rev 1.20 29 Apr 1993 11:30:52 MIKEP
|
|
add call to get on tape cat ver
|
|
|
|
Rev 1.19 27 Apr 1993 16:08:00 ChuckS
|
|
Added prototype for function QTC_ForgetTape, which is just part of
|
|
QTC_RemoveTape moved to a seperate function so the client(s) can
|
|
discard the memory allocated for a tape without attempting to remove
|
|
a file. Also added prototype for QTC_FindTape, which is in the new
|
|
file qtc_ftap.c
|
|
|
|
|
|
|
|
Rev 1.18 23 Apr 1993 10:35:38 MIKEP
|
|
Add new on tape catalog version parameter to catalogs.
|
|
Add prototype for new call in qtc_util.c to delete
|
|
entries if files can't be accessed anymore.
|
|
|
|
Rev 1.17 14 Apr 1993 13:03:44 Stefan
|
|
Changed if !defined( P_CLIENT ) by adding "|| defined(OS_WIN) because
|
|
the windows client needs this code.
|
|
|
|
Rev 1.16 24 Mar 1993 11:11:54 ChuckS
|
|
Added enclosing #ifndef _qtc_h_. Changed use of obsolete MAYN_DOS to OS_DOS.
|
|
Enclosed typedef of QTC_BUILD, QTC_ZOMBIE within #if !defined( P_CLIENT ).
|
|
Same for prototypes referencing QTC_BUILD and QTC_ZOMBIE. Enclosed protos
|
|
using FSYS_HAND with #if defined( FSYS_H ), and those using DBLK_PTR with
|
|
#if defined( DBLKS_H ).
|
|
|
|
Rev 1.15 23 Mar 1993 18:00:58 ChuckS
|
|
Added arg to QTC_OpenFile indicating if need to open for writes
|
|
|
|
Rev 1.14 23 Mar 1993 10:32:32 BRYAN
|
|
Changed return type for GetFileNameOnly.
|
|
|
|
Rev 1.13 19 Mar 1993 11:34:42 ChuckS
|
|
Fixed syntax error in prototype for QTC_GetFileNameOnly.
|
|
|
|
Rev 1.12 18 Mar 1993 11:35:44 TIMN
|
|
Added two f(x)s to get catalog info: get data path and get filename only
|
|
|
|
Rev 1.11 26 Jan 1993 17:10:04 MIKEP
|
|
vcb changes
|
|
|
|
Rev 1.10 20 Jan 1993 19:21:18 MIKEP
|
|
add floppy flag
|
|
|
|
Rev 1.9 04 Jan 1993 09:41:14 MIKEP
|
|
unicode support changes
|
|
|
|
Rev 1.8 14 Dec 1992 12:37:06 DAVEV
|
|
Enabled for Unicode compile
|
|
|
|
Rev 1.7 25 Nov 1992 16:13:38 ChuckS
|
|
P_CLIENT only: Added field to QTC_BSET for volume ref, mod time for QTC_TAPE
|
|
|
|
Rev 1.6 23 Nov 1992 14:20:56 MIKEP
|
|
fix continuation vcb for MTF only
|
|
|
|
Rev 1.5 20 Nov 1992 13:52:16 CHARLIE
|
|
JAGUAR: Move to SRM based QTC code
|
|
|
|
ENDEAVOR: Modified QTC_AbortCataloging prototype to include BOOLEAN keep_items
|
|
|
|
ENDEAVOR: Modified QTC_Init prototype to include VM_HDL vm_hdl
|
|
|
|
Rev 1.4 22 Oct 1992 16:51:54 MIKEP
|
|
otc fixes
|
|
|
|
Rev 1.3 22 Oct 1992 09:27:44 MIKEP
|
|
second pass otc changes
|
|
|
|
Rev 1.2 22 Oct 1992 08:46:22 MIKEP
|
|
add otc status bits
|
|
|
|
Rev 1.1 14 Oct 1992 10:19:50 MIKEP
|
|
add OTC fields to QTC VCB
|
|
|
|
Rev 1.0 03 Sep 1992 16:56:12 STEVEN
|
|
Initial revision.
|
|
|
|
Rev 1.33 01 Sep 1992 11:14:06 MIKEP
|
|
added UNALIGNED for NT compiling on x86 machines
|
|
|
|
Rev 1.32 18 Aug 1992 14:52:40 DAVEV
|
|
MikeP's changes from Microsoft
|
|
|
|
Rev 1.31 04 Aug 1992 10:08:20 MIKEP
|
|
delete cats flag
|
|
|
|
Rev 1.30 29 Jul 1992 09:54:58 MIKEP
|
|
ChuckB checked in after NT warnings were fixed.
|
|
|
|
Rev 1.29 10 Jul 1992 10:05:44 MIKEP
|
|
add getfirstitem
|
|
|
|
Rev 1.28 09 Jul 1992 10:25:46 MIKEP
|
|
standard product changes
|
|
|
|
|
|
**************************/
|
|
|
|
#ifndef _qtc_h_
|
|
#define _qtc_h_
|
|
|
|
// *************************************
|
|
// CATALOG INCLUDES
|
|
// *************************************
|
|
|
|
#include "vm.h"
|
|
#include "vqueue.h"
|
|
|
|
// *************************************
|
|
// CATALOG GLOBAL DATA EXTERNS
|
|
// *************************************
|
|
|
|
extern VM_HDL qtc_vmem_hand;
|
|
extern VM_PTR v_bset_item;
|
|
extern VM_PTR v_tape_item;
|
|
|
|
|
|
// *************************************
|
|
// CATALOG DEFINES
|
|
// *************************************
|
|
|
|
#ifndef UNALIGNED
|
|
#define UNALIGNED
|
|
#endif
|
|
|
|
|
|
// magic number is used to tell if we have inited properly
|
|
|
|
#define QTC_MAGIC_NUMBER 6942
|
|
|
|
|
|
#define NO_CARE_FID 0xffffffff
|
|
#define NO_CARE_BSET 0xffff
|
|
#define NO_CARE_SEQNO 0xffff
|
|
|
|
|
|
// used in the status fields for record entries
|
|
|
|
#define QTC_FILE 0x0001 // is entry a file
|
|
#define QTC_DIRECTORY 0x0002 // is entry a directory
|
|
#define QTC_AFP 0x0004 // is entry an apple file
|
|
#define QTC_EMPTY 0x0008 // is this directory empty
|
|
#define QTC_CORRUPT 0x0010 // is this entry corrupt
|
|
#define QTC_SPLIT 0x0020 // does this entry continue on next tape
|
|
#define QTC_CONTINUATION 0x0040 // did this entry start on a previous tape
|
|
#define QTC_MANUFACTURED 0x0080 // entry was created
|
|
|
|
// End of record item status defines
|
|
// Bset defines continue ...
|
|
|
|
#define QTC_ERASED 0x00000100 // if bset was erased or recat'd
|
|
#define QTC_INCOMPLETE 0x00000200 // is this bset incompletely cataloged
|
|
#define QTC_PARTIAL 0x00000400 // is this a partially cat'd bset
|
|
#define QTC_IMAGE 0x00000800 // set is an image backup
|
|
#define QTC_UNICODE 0x00001000 // is this set in unicode
|
|
#define QTC_FDDEXISTS 0x00002000 // does this set have FDD on tape
|
|
#define QTC_SMEXISTS 0x00004000 // does this tape have an SM
|
|
#define QTC_OTCVALID 0x00008000 // are our OTC bits valid
|
|
#define QTC_FLOPPY 0x00010000 // a backup to floppies, not tape
|
|
#define QTC_FATDRIVE 0x00020000 // a backup of a FAT drive
|
|
#define QTC_NO_REDIRECT 0x00040000 // if bset does NOT support redirected restore
|
|
#define QTC_NON_VOLUME 0x00080000 // if bset is a non-volume object (eg, SMS Bindery or Directory Services)
|
|
#define QTC_TAPE_DELETED 0x00100000 // if tape is tagged for deletion
|
|
#define QTC_COMPRESSED 0x00200000 // a compressed data set
|
|
#define QTC_ENCRYPTED 0x00400000 // an encrypted data set
|
|
#define QTC_FUTURE_VER 0x00800000 // a future version data set
|
|
|
|
|
|
// Catalog building state defines
|
|
|
|
#define QTC_WAITING_STATE 3 // waiting on a continuation tape
|
|
#define QTC_ERROR_STATE 2 // something bad happened
|
|
#define QTC_ACTIVE_STATE 1 // Is a backup/catalog a tape in progress
|
|
#define QTC_IDLE_STATE 0 // Are we not building/cataloging a tape
|
|
|
|
// Backup types
|
|
|
|
#define QTC_COPY_BACKUP 1
|
|
#define QTC_DIFF_BACKUP 2
|
|
#define QTC_INCR_BACKUP 3
|
|
#define QTC_NORM_BACKUP 4
|
|
#define QTC_DAIL_BACKUP 5
|
|
|
|
// The internal buffer size used by the catalogs. Increasing the size
|
|
// will directly improve catalog performance. Adding disk caching will
|
|
// improve performance the best.
|
|
|
|
// Suggested buffer sizes are:
|
|
|
|
// DOS 512
|
|
// All others 1024
|
|
|
|
#if defined( OS_DOS )
|
|
#define QTC_BUF_SIZE 512
|
|
#else
|
|
#define QTC_BUF_SIZE 1024
|
|
#endif
|
|
|
|
|
|
#ifdef UNICODE
|
|
#define QTC_FILE_SPEC "????????.U??"
|
|
#else
|
|
#define QTC_FILE_SPEC "????????.D??"
|
|
#endif
|
|
|
|
// We keep an offset to the parent directory during builds, if the depth
|
|
// goes deeper, we bump this value by another 10 levels.
|
|
|
|
#define QTC_START_DEPTH 10
|
|
|
|
|
|
#define QTC_MAX_FILE_SIZE 256
|
|
#define QTC_MAX_PATH_SIZE 256
|
|
|
|
|
|
#define QTC_NO_MORE 1
|
|
#define QTC_SUCCESS 0
|
|
#define QTC_FAILURE -1
|
|
|
|
#define QTC_DISK_FULL -2
|
|
#define QTC_TAPE_NOT_FOUND -3
|
|
#define QTC_BSET_NOT_FOUND -4
|
|
#define QTC_NO_INIT -5
|
|
#define QTC_OPEN_FAILED -6
|
|
#define QTC_WRITE_FAILED -7
|
|
#define QTC_READ_FAILED -8
|
|
#define QTC_SEEK_FAILED -9
|
|
#define QTC_NO_MEMORY -10
|
|
#define QTC_NO_FILE_HANDLES -11
|
|
#define QTC_NO_HEADER -12
|
|
#define QTC_INVALID_FILE -13
|
|
#define QTC_TAPE_TAGGED_DELETED -14
|
|
#define QTC_CATALOG_FILE_IN_USE -15 // returned by Client/Server "wrapper" for QTC_RemoveTape
|
|
|
|
// Any catalog files created with a different version will be ignored.
|
|
|
|
#define QTC_MAJOR_VERSION 2 // Version control for catalogs
|
|
#define QTC_MINOR_VERSION 0 // Version control for catalogs
|
|
|
|
|
|
#define QTC_SKIP_TO_NEXT_ITEM 1
|
|
#define QTC_SKIP_TO_NEXT_BSET 2
|
|
#define QTC_OPERATION_COMPLETE 3
|
|
|
|
|
|
/*******************************************
|
|
|
|
XTRA BYTE DEFINES
|
|
|
|
There are ( 255 / 5 ) extra byte fields that can be in the catalogs
|
|
appended to any file or directory item. Each field is 5 bytes long.
|
|
It starts with a 1 byte code word, followed by 4 data bytes. If it
|
|
ain't defined here, it better not be in the extra bytes.
|
|
|
|
********************************************/
|
|
|
|
|
|
#define QTC_MAX_XTRA_BYTES 255
|
|
|
|
// The only ones currently defined.
|
|
|
|
#define QTC_XTRA_64BIT_SIZE 0 // Top 32 bits of 64 bit file size
|
|
|
|
// This info is saved on directories only.
|
|
|
|
#define QTC_FILE_COUNT 1 // files in this dir
|
|
#define QTC_BYTE_COUNT_MSW 2 // bytes in this dir
|
|
#define QTC_BYTE_COUNT_LSW 3 // bytes in this dir
|
|
|
|
// The combo count saves space over the three above.
|
|
|
|
#define QTC_COMBO_COUNT 4 // 8 bit file count, 24 bit bytes count
|
|
|
|
|
|
// *****************************************
|
|
// CATALOG STRUCTURES
|
|
// *****************************************
|
|
|
|
#define QTC_SIGNATURE "CONNER SOFTWARE - CATALOG FILE"
|
|
|
|
typedef struct _QTC_TAPE_HEADER *QTC_TAPE_HEADER_PTR;
|
|
typedef struct _QTC_TAPE_HEADER {
|
|
|
|
INT32 major_version; // catalog version
|
|
INT32 minor_version;
|
|
BYTE signature[ 52 ]; // must be longer than signature
|
|
|
|
} QTC_TAPE_HEADER;
|
|
|
|
|
|
// the info we keep live on each backup set
|
|
|
|
typedef struct _QTC_BSET *QTC_BSET_PTR;
|
|
typedef struct _QTC_BSET {
|
|
|
|
VQ_ELEM q_elem ;
|
|
|
|
UINT32 tape_fid; // who is it
|
|
INT32 tape_seq_num;
|
|
INT32 bset_num;
|
|
|
|
UINT32 offset; // where is it
|
|
|
|
UINT32 status; // what is it
|
|
|
|
VOID_PTR v_volume ; // reference to volume record
|
|
|
|
} QTC_BSET;
|
|
|
|
|
|
// information we keep on disk for each bset.
|
|
|
|
typedef struct _QTC_HEADER *QTC_HEADER_PTR;
|
|
typedef struct _QTC_HEADER {
|
|
|
|
UINT32 header_size; // num bytes on disk, probably 512
|
|
UINT32 string_offset; // offset in bytes to string data
|
|
UINT32 catalog_version; // of this backup set
|
|
UINT32 backup_type; // normal, copy, inc, diff
|
|
UINT32 OS_id; // type of OS the bset is from
|
|
UINT32 OS_ver; // version of OS the bset is from
|
|
UINT32 tape_fid; // tape family id
|
|
INT32 bset_num; // 1, 2, ...
|
|
INT32 tape_seq_num; // 1, 2, ...
|
|
UINT32 offset; // where in data file is this guy
|
|
UINT32 next_bset; // where is next bset in data file
|
|
UINT32 status; // partial, image, unicode, etc.
|
|
UINT32 status2; // even more status bits
|
|
UINT32 dir_start; // offset in data file of directory info
|
|
UINT32 dir_size; // bytes of directory info
|
|
UINT32 fil_start; // offset in data file of file info
|
|
UINT32 fil_size; // bytes of file info
|
|
UINT32 rec_start; // offset in data file of records
|
|
UINT32 rec_size; // bytes of record info
|
|
UINT32 num_dirs; // number of dirs
|
|
UINT32 num_files; // number of files
|
|
UINT32 num_bytes; // 64 bit number of bytes low
|
|
UINT32 num_bytes_msw; // 64 bit number of bytes high
|
|
UINT32 num_corrupt_files; // number of corrupt files
|
|
UINT32 num_files_in_use; // number of files that were in use
|
|
UINT32 backup_date; // when this backup actually started
|
|
UINT32 backup_time;
|
|
UINT32 PBA_VCB; // physical block address of the volume control block
|
|
UINT32 LBA; // logical block address 0,1
|
|
UINT32 VCB_attributes;
|
|
UINT32 compress_algor;
|
|
UINT32 encrypt_algor; // encryption algorithm for passwords
|
|
UINT32 FDD_SeqNum; // Seq Num that FDD resides on.
|
|
UINT32 FDD_PBA; // PBA of FDD stuff
|
|
|
|
UINT32 loader_id; // loader stuff
|
|
UINT32 slot_number;
|
|
UINT32 loader_stuff1;
|
|
UINT32 loader_stuff2;
|
|
|
|
UINT32 FDD_Version; // OTC Version Number
|
|
|
|
UINT32 spare2; // spare space all init'd to 0.
|
|
UINT32 spare3;
|
|
UINT32 spare4;
|
|
UINT32 spare5;
|
|
UINT32 spare6;
|
|
UINT32 spare7;
|
|
UINT32 spare8;
|
|
UINT32 spare9;
|
|
UINT32 spare10;
|
|
UINT32 spare11;
|
|
UINT32 spare12;
|
|
UINT32 spare13;
|
|
UINT32 spare14;
|
|
UINT32 spare15;
|
|
UINT32 spare16;
|
|
UINT32 spare17;
|
|
UINT32 spare18;
|
|
UINT32 spare19;
|
|
UINT32 spare20;
|
|
|
|
// String Sizes
|
|
|
|
UINT32 tape_password_size; // non zero if there is one
|
|
UINT32 bset_password_size; // non zero if there is one
|
|
UINT32 bset_description_size;
|
|
UINT32 bset_name_size;
|
|
UINT32 tape_name_size;
|
|
UINT32 volume_name_size;
|
|
UINT32 user_name_size;
|
|
|
|
// String Pointers
|
|
|
|
CHAR_PTR tape_name;
|
|
CHAR_PTR bset_name;
|
|
CHAR_PTR volume_name;
|
|
CHAR_PTR user_name;
|
|
CHAR_PTR bset_description;
|
|
CHAR_PTR tape_password;
|
|
CHAR_PTR bset_password;
|
|
|
|
} QTC_HEADER;
|
|
|
|
// The info we keep on each tape
|
|
|
|
typedef struct _QTC_TAPE *QTC_TAPE_PTR;
|
|
typedef struct _QTC_TAPE {
|
|
|
|
VQ_ELEM q_elem;
|
|
|
|
UINT32 status;
|
|
|
|
UINT32 tape_fid;
|
|
INT16 tape_seq_num;
|
|
|
|
VQ_HEADER bset_list;
|
|
|
|
UINT32 wr_time ; // tape-file's modified date as of last refresh of in-memory tape queue
|
|
|
|
} QTC_TAPE;
|
|
|
|
|
|
// This is what is kept in the records file.
|
|
|
|
typedef struct _QTC_RECORD *QTC_RECORD_PTR;
|
|
typedef struct _QTC_RECORD {
|
|
|
|
UINT32 date:16; // dos format date and time
|
|
UINT32 time:16;
|
|
union {
|
|
UINT32 size; // file size
|
|
struct {
|
|
UINT32 file_start:24; // start offset of file names for this dir
|
|
UINT32 height:8; // 0 = root, ...
|
|
} common;
|
|
} common;
|
|
UINT32 lba; // logical block address on tape
|
|
UINT32 status:8; // file or directory
|
|
UINT32 name_offset:24; // offset in name file
|
|
UINT32 attribute; // maynard FS_ attribute field
|
|
|
|
} QTC_RECORD;
|
|
|
|
|
|
// This is what is kept in the name files. After each structure is a null
|
|
// terminated name. The structures are packed togather in the files.
|
|
|
|
typedef struct _QTC_NAME *QTC_NAME_PTR;
|
|
typedef struct _QTC_NAME {
|
|
|
|
INT32 size; // size of QTC_NAME + name string + xtra bytes
|
|
UINT32 xtra_size:8; // size of xtra bytes
|
|
UINT32 mom_offset:24; // parent directory name file offset
|
|
UINT32 record; // data record number
|
|
|
|
// CHAR name[?]; // item name with no terminating zero
|
|
// CHAR xtra_bytes[?]; // xtra bytes with no terminating zero
|
|
|
|
} QTC_NAME;
|
|
|
|
|
|
#if !defined( P_CLIENT ) || defined( OS_WIN )
|
|
|
|
/*
|
|
Used for doing builds.
|
|
*/
|
|
|
|
typedef struct _QTC_BUILD *QTC_BUILD_PTR;
|
|
typedef struct _QTC_BUILD {
|
|
|
|
INT error; // has error occurred
|
|
|
|
UCHAR state; // state of catalogs
|
|
|
|
INT files_in_dir; // files in last dir processed
|
|
UINT64 bytes_in_dir; // bytes in files in last dir
|
|
|
|
QTC_HEADER_PTR header; // current building bset
|
|
|
|
QTC_HEADER_PTR old_header; // used when partially cataloging
|
|
// and you cross tapes, to go back
|
|
// and adjust the flags.
|
|
|
|
CHAR_PTR rec_file; // file names + paths
|
|
CHAR_PTR dir_file; // 256 should be enough
|
|
CHAR_PTR fil_file; // for anybody
|
|
|
|
BOOLEAN continuation_tape;
|
|
|
|
BOOLEAN fake_root_added; // do we need to patch his lba
|
|
|
|
BOOLEAN do_full_cataloging; // else do partial
|
|
|
|
INT fh_dir; // file handles
|
|
INT fh_rec;
|
|
INT fh_fil;
|
|
|
|
INT files_open; // are the temp files open ?
|
|
|
|
INT dir_offset; // current index into buffer
|
|
UINT32 curr_dir_off; // current length of file
|
|
|
|
INT fil_offset;
|
|
UINT32 curr_fil_off;
|
|
|
|
INT rec_offset;
|
|
UINT32 curr_rec_off;
|
|
|
|
INT current_level; // depth in tree we are processing
|
|
|
|
// offsets to all subdirs in current path
|
|
|
|
UINT32 *mom_offset; // saves pointers to all active parents
|
|
INT mom_depth; // how deep can we go with current allocation
|
|
|
|
UINT32 last_mom_offset; // offset of last mom
|
|
|
|
UINT32 record_cnt; // number of records in catalog
|
|
|
|
INT last_record; // last record processed - file/dir ?
|
|
|
|
BYTE fil_buffer[ QTC_BUF_SIZE ]; // used during building
|
|
BYTE dir_buffer[ QTC_BUF_SIZE ];
|
|
BYTE rec_buffer[ QTC_BUF_SIZE ];
|
|
|
|
CHAR *curr_build_path;
|
|
|
|
INT curr_build_path_size; // bytes allocated
|
|
|
|
INT build_path_len; // number of characters in use
|
|
|
|
QTC_RECORD record; // used during building
|
|
|
|
BOOLEAN end_of_media; // did we hit end of media
|
|
|
|
UINT32 num_dirs; // number of dirs
|
|
UINT32 num_files; // number of files
|
|
UINT32 num_corrupt_files; // number of corrupt files
|
|
|
|
} QTC_BUILD;
|
|
|
|
#endif
|
|
|
|
|
|
// This structure is used to access the catalogs.
|
|
|
|
typedef struct _QTC_QUERY *QTC_QUERY_PTR;
|
|
typedef struct _QTC_QUERY {
|
|
|
|
// USER FIELDS
|
|
|
|
UINT32 tape_fid; // where I should look, cannot be -1
|
|
INT16 tape_seq_num; // may be -1
|
|
INT16 bset_num; // cannot be -1
|
|
|
|
BOOLEAN subdirs; // traverse subdirs in search
|
|
|
|
UINT16 predate; // non-zero if active
|
|
UINT16 postdate;
|
|
|
|
// Where the file/dir results are found
|
|
|
|
CHAR_PTR path; // with embedded 0's
|
|
INT path_size; // in bytes and including last zero
|
|
CHAR_PTR item; // file or dir name found
|
|
|
|
// Also you can check empty bit in status word for file count.
|
|
|
|
INT file_count; // files located in this dir
|
|
UINT64 byte_count; // bytes in files in this dir
|
|
|
|
UINT32 attrib; // characteristics of found item
|
|
UINT16 date;
|
|
UINT16 time;
|
|
UINT64 size;
|
|
UINT32 lba;
|
|
|
|
INT xtra_size;
|
|
BYTE xtra_bytes[ QTC_MAX_XTRA_BYTES ];
|
|
|
|
UINT8 status; // FIL_TYPE, DIR_TYPE, etc.
|
|
// see QTC_* above for defines
|
|
|
|
INT return_code; // why was the request unsuccessful
|
|
|
|
// QTC PRIVATE FIELDS, UI CODE SHOULD NOT ACCESS THESE DIRECTLY
|
|
|
|
CHAR_PTR search_path; // where to look
|
|
|
|
CHAR_PTR search_name; // what to look for
|
|
|
|
INT search_path_size; // in bytes
|
|
|
|
BOOLEAN error; // has a major error occurred
|
|
|
|
INT size_of_path; // bytes allocated for path, private qtc use
|
|
INT size_of_item; // bytes allocated for name, private qtc use
|
|
|
|
BOOLEAN file_open; // Is there an active file handle
|
|
|
|
UINT16 search_size;
|
|
|
|
UINT32 search_start;
|
|
UINT32 search_stop;
|
|
UINT16 search_index; // used by QTC_FastFindFile
|
|
|
|
UINT16 search_max;
|
|
UINT32 search_base;
|
|
|
|
BYTE buff1[ QTC_BUF_SIZE ]; // processed data
|
|
BYTE buff2[ QTC_BUF_SIZE ]; // straight out of file
|
|
|
|
QTC_HEADER_PTR header; // current working header
|
|
QTC_BSET_PTR bset; // current working bset
|
|
|
|
UINT32 curr_mom_offset; // current active parent dir
|
|
UINT32 fil_dir_offset; // current child dir for GetNextFile
|
|
|
|
INT fh; // data file handle
|
|
|
|
UINT32 dir_offset; // current offsets
|
|
UINT32 rec_offset;
|
|
UINT32 fil_offset;
|
|
|
|
// GetNextDir( ) buffer current index and size
|
|
// GetNextObj( )
|
|
|
|
INT data_index;
|
|
INT data_max;
|
|
|
|
// GetNextItem( ) record number
|
|
|
|
UINT32 record_number;
|
|
|
|
CHAR_PTR last_path; // with embedded 0's
|
|
INT last_path_size; // in bytes and including zero
|
|
INT size_of_last_path; // bytes allocated
|
|
|
|
} QTC_QUERY;
|
|
|
|
|
|
|
|
// There is ONE of these, it is THE catalog.
|
|
|
|
typedef struct _QTC_CATALOG *QTC_CATALOG_PTR;
|
|
typedef struct _QTC_CATALOG {
|
|
|
|
BOOLEAN unicode; // are we compiled for unicode
|
|
|
|
INT inited; // see if init was successful
|
|
|
|
CHAR_PTR data_path;
|
|
|
|
VQ_HEADER tape_list; // list of tapes known about
|
|
|
|
CHAR_PTR cat_user ;
|
|
|
|
} QTC_CATALOG;
|
|
|
|
|
|
extern QTC_CATALOG gb_QTC; // Definition of global catalog
|
|
|
|
|
|
// **********************************
|
|
// USER APPLICATION CALLS & QUERY MACROS
|
|
// **********************************
|
|
|
|
#define QTC_SetTapeFID( q, x ) ( (q)->tape_fid = ( x ) )
|
|
#define QTC_SetTapeSeq( q, x ) ( (q)->tape_seq_num = ( x ) )
|
|
#define QTC_SetBsetNum( q, x ) ( (q)->bset_num = ( x ) )
|
|
#define QTC_SetSubdirs( q, x ) ( (q)->subdirs = ( x ) )
|
|
#define QTC_SetPreDate( q, x ) ( (q)->predate = ( x ) )
|
|
#define QTC_SetPostDate( q, x ) ( (q)->postdate = ( x ) )
|
|
#define QTC_SetBuildHandle( q, x ) ( (q)->build = ( x ) )
|
|
|
|
// QTC_SetSearchName() is a function listed below
|
|
// QTC_SetSearchPath() is a function listed below
|
|
// QTC_GetSearchPathLength() is a function listed below
|
|
// QTC_GetSearchPath() is a function listed below
|
|
|
|
#define QTC_GetPreDate( q ) ( (q)->predate )
|
|
#define QTC_GetPostDate( q ) ( (q)->postdate )
|
|
#define QTC_GetSubdirs( q ) ( (q)->subdirs )
|
|
#define QTC_GetPath( q ) ( (q)->path )
|
|
#define QTC_GetPathLength( q ) ( (q)->path_size )
|
|
#define QTC_GetItemName( q ) ( (q)->item )
|
|
#define QTC_GetItemDate( q ) ( (q)->date )
|
|
#define QTC_GetItemTime( q ) ( (q)->time )
|
|
#define QTC_GetItemSize( q ) ( (q)->size )
|
|
#define QTC_GetItemAttrib( q ) ( (q)->attrib )
|
|
#define QTC_GetItemLBA( q ) ( (q)->lba )
|
|
#define QTC_GetItemStatus( q ) ( (q)->status )
|
|
#define QTC_GetSizeExtraBytes( q ) ( (q)->xtra_size )
|
|
#define QTC_GetExtraBytes( q ) ( (q)->xtra_bytes )
|
|
#define QTC_GetTapeFID( q ) ( (q)->bset->tape_fid )
|
|
#define QTC_GetTapeSeq( q ) ( (q)->bset->tape_seq_num )
|
|
#define QTC_GetBsetNum( q ) ( (q)->bset->bset_num )
|
|
#define QTC_GetPBAVCB( q ) ( (q)->bset->PBA_VCB )
|
|
#define QTC_GetBset( q ) ( (q)->bset )
|
|
#define QTC_GetReturnCode( q ) ( (q)->return_code )
|
|
#define QTC_GetFileCount( q ) ( (q)->file_count )
|
|
#define QTC_GetByteCount( q ) ( (q)->byte_count )
|
|
|
|
#define QTC_DoFullCataloging( q, flag ) ( (q)->do_full_cataloging = ( flag ) )
|
|
#define QTC_ContinuationTape( q ) ( (q)->continuation_tape = ( TRUE ) )
|
|
#define QTC_GetErrorCondition( q ) ( (q)->error )
|
|
|
|
QTC_TAPE *QTC_GetFirstTape( VOID );
|
|
QTC_TAPE *QTC_GetNextTape( QTC_TAPE_PTR );
|
|
QTC_TAPE *QTC_GetPrevTape( QTC_TAPE_PTR );
|
|
|
|
QTC_BSET *QTC_GetFirstBset( QTC_TAPE_PTR );
|
|
QTC_BSET *QTC_GetLastBset( QTC_TAPE_PTR );
|
|
QTC_BSET *QTC_GetNextBset( QTC_BSET_PTR );
|
|
QTC_BSET *QTC_GetPrevBset( QTC_BSET_PTR );
|
|
|
|
QTC_QUERY_PTR QTC_InitQuery( VOID );
|
|
INT QTC_CloseQuery( QTC_QUERY_PTR );
|
|
|
|
// get a list of just the directories
|
|
|
|
INT QTC_GetFirstDir( QTC_QUERY_PTR );
|
|
INT QTC_GetNextDir( QTC_QUERY_PTR );
|
|
|
|
// get a list of the files and dirs for one directory
|
|
|
|
INT QTC_GetFirstObj( QTC_QUERY_PTR );
|
|
INT QTC_GetNextObj( QTC_QUERY_PTR );
|
|
|
|
// get a list of items ordered as they were backed up
|
|
|
|
INT QTC_GetFirstItem( QTC_QUERY_PTR );
|
|
INT QTC_GetNextItem( QTC_QUERY_PTR );
|
|
|
|
// get items based on search criteria
|
|
|
|
INT QTC_SearchFirstItem( QTC_QUERY_PTR );
|
|
INT QTC_SearchNextItem( QTC_QUERY_PTR );
|
|
|
|
|
|
// OTHER CATALOG CALLS
|
|
|
|
#if !defined( P_CLIENT ) || defined( OS_WIN )
|
|
|
|
// Comment out anything related to building catalogs, clients don't do that.
|
|
|
|
VOID QTC_AbortCataloging( QTC_BUILD_PTR, BOOLEAN );
|
|
VOID QTC_AbortBackup( QTC_BUILD_PTR );
|
|
VOID QTC_AddDirectoryToCatalog( QTC_BUILD_PTR, UINT64, CHAR_PTR, INT, UINT16, UINT16, UINT32, UINT32, BYTE_PTR, UINT );
|
|
VOID QTC_AddFileToCatalog( QTC_BUILD_PTR, UINT64, CHAR_PTR, UINT16, UINT16, UINT32, UINT32, UINT32, BYTE_PTR, UINT );
|
|
VOID QTC_EndOfTapeReached( QTC_BUILD_PTR, CHAR_PTR, CHAR_PTR, INT );
|
|
VOID QTC_PatchVCB( QTC_BUILD_PTR, UINT32, UINT32 );
|
|
INT QTC_StartNewBackup( QTC_BUILD_PTR, CHAR_PTR, CHAR_PTR, CHAR_PTR, CHAR_PTR, CHAR_PTR, CHAR_PTR, CHAR_PTR, CHAR_PTR,
|
|
INT, INT, UINT32, UINT16, UINT16, UINT32, UINT32, UINT32, INT, INT, INT,
|
|
UINT32, UINT32, INT, INT, INT, INT,
|
|
INT, INT, INT, INT, INT, INT, INT, UINT16, UINT16, INT );
|
|
INT QTC_BlockBad( QTC_BUILD_PTR );
|
|
INT QTC_FinishBackup( QTC_BUILD_PTR );
|
|
INT QTC_FreeBuildHandle( QTC_BUILD_PTR );
|
|
QTC_BUILD_PTR QTC_GetBuildHandle( VOID );
|
|
INT QTC_ImageScrewUp( QTC_BUILD_PTR );
|
|
VOID QTC_AddDir( QTC_BUILD_PTR, CHAR_PTR, INT, BYTE_PTR, INT );
|
|
VOID QTC_AddFile( QTC_BUILD_PTR, CHAR_PTR, BYTE_PTR, INT );
|
|
VOID QTC_AddRecord( QTC_BUILD_PTR );
|
|
INT QTC_BuildNewPath( QTC_BUILD_PTR, UINT32 );
|
|
INT QTC_ErrorCleanup( QTC_BUILD_PTR );
|
|
INT QTC_FlushInternalBuffers( QTC_BUILD_PTR );
|
|
INT QTC_GetLastRecordEntered( QTC_BUILD_PTR, QTC_RECORD_PTR, BYTE_PTR, BYTE_PTR, INT * );
|
|
INT QTC_IsThisBsetKnown( QTC_BUILD_PTR, QTC_HEADER_PTR );
|
|
INT QTC_OpenTempFiles( QTC_BUILD_PTR );
|
|
INT QTC_RestartBackup( QTC_BUILD_PTR, QTC_HEADER_PTR, Q_HEADER_PTR );
|
|
VOID QTC_SaveDirRecord( QTC_BUILD_PTR, CHAR_PTR, INT, UINT32, BYTE_PTR, INT );
|
|
INT QTC_SetCountsForLastDir( QTC_BUILD_PTR );
|
|
|
|
#endif
|
|
|
|
BOOLEAN QTC_AnyCatalogFiles( VOID );
|
|
INT QTC_AnySearchableBsets( VOID );
|
|
INT QTC_TagTapeForDeletion( UINT32, INT16 );
|
|
INT QTC_CloseFile( INT );
|
|
INT QTC_Open( CHAR_PTR, INT, INT, INT * );
|
|
INT QTC_ReadFile( INT, BYTE_PTR, INT, INT * );
|
|
INT QTC_WriteFile( INT, BYTE_PTR, INT, INT * );
|
|
INT QTC_SeekFile( INT, INT );
|
|
INT QTC_CheckFilesAccess( VOID );
|
|
INT QTC_CompressFile( UINT32, INT16 );
|
|
INT QTC_CouldThisSetCrossTapes( UINT32, INT16, INT16 );
|
|
VOID QTC_Deinit( INT );
|
|
INT QTC_DumpBsetInfo( QTC_TAPE_PTR );
|
|
QTC_BSET_PTR QTC_FindBset( UINT32, INT16, INT16 );
|
|
UINT32 QTC_GetKiloBytesWasted( UINT32, UINT16 );
|
|
BOOLEAN QTC_GetDataPath( CHAR_PTR path, INT16 pathSize );
|
|
VOID QTC_GetFileName( UINT32, INT16, CHAR_PTR );
|
|
CHAR_PTR QTC_GetFileNameOnly( UINT32, INT16, CHAR_PTR );
|
|
INT32 QTC_GetMeTheVCBPBA( UINT32, INT16, INT16 );
|
|
UINT8 QTC_GetMeTheTapeCatVer( UINT32, INT16, INT16 );
|
|
INT QTC_GetSearchPathLength( QTC_QUERY_PTR );
|
|
INT QTC_GetSearchPath( QTC_QUERY_PTR, CHAR_PTR );
|
|
INT QTC_Init( CHAR_PTR, VM_HDL );
|
|
VOID QTC_SetCatUserName( CHAR_PTR ) ;
|
|
INT QTC_LoadBsetInfo( CHAR_PTR, QTC_TAPE_PTR );
|
|
QTC_HEADER_PTR QTC_LoadHeader( QTC_BSET_PTR );
|
|
INT QTC_Partialize( UINT32, INT16, INT16 );
|
|
INT QTC_PurgeAllFiles( VOID );
|
|
INT QTC_SetSearchPath( QTC_QUERY_PTR, CHAR_PTR, INT );
|
|
INT QTC_SetSearchName( QTC_QUERY_PTR, CHAR_PTR );
|
|
INT QTC_LoadDLL( CHAR_PTR );
|
|
INT QTC_UnLoadDLL( VOID );
|
|
|
|
// Semi private stuff
|
|
|
|
INT QTC_AdjustFlagsOnOtherPieces( UINT32, INT16, INT16 );
|
|
INT QTC_BuildWholePath( QTC_QUERY_PTR, UINT32 );
|
|
INT QTC_ChangeBsetFlags( QTC_HEADER_PTR, INT );
|
|
INT QTC_CopyFile( INT, INT, UINT32, BYTE_PTR );
|
|
INT QTC_CompAsciiNames( ACHAR_PTR srch_name, ACHAR_PTR file_name );
|
|
INT QTC_CompNormalNames( CHAR_PTR srch_name, CHAR_PTR file_name );
|
|
INT QTC_CompUnicodeNames( WCHAR_PTR srch_name, WCHAR_PTR file_name );
|
|
INT QTC_FastSearchForDir( QTC_QUERY_PTR, UINT32_PTR, UINT32, INT, INT );
|
|
INT QTC_FastSearchForFile( QTC_QUERY_PTR );
|
|
INT QTC_FindDirRec( QTC_QUERY_PTR, QTC_RECORD_PTR );
|
|
INT QTC_FindNextDirRec( QTC_QUERY_PTR, QTC_RECORD_PTR );
|
|
INT QTC_FindStoppingOffset( QTC_QUERY_PTR, QTC_RECORD_PTR );
|
|
INT QTC_GetNameFromBuff( BYTE_PTR, QTC_NAME UNALIGNED *, INT );
|
|
QTC_NAME UNALIGNED * QTC_GetNextItemFromBuffer( QTC_QUERY_PTR, QTC_RECORD_PTR, INT );
|
|
QTC_BSET_PTR QTC_GetLowerTapeBset( UINT32, INT16, INT16 );
|
|
QTC_BSET_PTR QTC_GetHigherTapeBset( UINT32, INT16, INT16 );
|
|
INT QTC_IsThereAnotherBset( QTC_BSET_PTR );
|
|
INT QTC_LookForChildDirs( QTC_QUERY_PTR );
|
|
INT QTC_MoveToNextTapeInFamily( QTC_QUERY_PTR );
|
|
INT QTC_NewBset( VQ_HDL ) ;
|
|
INT QTC_OpenFile( UINT32, INT16, INT, INT );
|
|
VOID QTC_RemoveBset( QTC_TAPE_PTR, VQ_HDL ) ;
|
|
VOID QTC_ReadInBsetInfo( CHAR_PTR );
|
|
VOID QTC_RemoveTape( UINT32, INT16 );
|
|
QTC_HEADER_PTR QTC_SetUpStrings( QTC_HEADER_PTR );
|
|
INT QTC_TryToLocateFile( QTC_QUERY_PTR );
|
|
INT QTC_TryToMatchFile( QTC_QUERY_PTR, BYTE_PTR );
|
|
INT QTC_UnlinkFile( UINT32, INT16 );
|
|
INT QTC_UpdateOTCInfo( QTC_HEADER_PTR );
|
|
VOID QTC_ForgetTape( QTC_TAPE_PTR ) ;
|
|
QTC_TAPE_PTR QTC_FindTape( UINT32 fid, INT16 seq_no ) ;
|
|
|
|
// If not building as a DLL then include the rest of the prototypes.
|
|
|
|
#ifndef QTCDLL
|
|
#include "FSYS.H"
|
|
#include "QTCXFACE.H"
|
|
#endif
|
|
|
|
#endif
|
|
|