summaryrefslogtreecommitdiffstats
path: root/kdat/Tape.h
blob: 335619c326fe96da63650b196567f8fe24b77c31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
// KDat - a tar-based DAT archiver
// Copyright (C) 1998-2000  Sean Vyain, svyain@mail.tds.net
// Copyright (C) 2001-2002  Lawrence Widman, kdat@cardiothink.com
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

#ifndef _Tape_h_
#define _Tape_h_

#include <tqptrlist.h>
#include <tqstring.h>

#include "Archive.h"

/**
 * @short This class represents a single tape index.
 */
class Tape {
    bool           _stubbed;
    TQCString       _id;
    int            _ctime;
    int            _mtime;
    TQString        _name;
    int            _size;
    TQPtrList<Archive> _children;

    FILE* _fptr;

    void readVersion1Index( FILE* fptr );
    void readVersion2Index( FILE* fptr );
    void readVersion3Index( FILE* fptr );
    void readVersion4Index( FILE* fptr );

    void calcRanges();

    void read();
    void readAll( int version );
    void write();
public:
    /**
     * Create a new tape index, and automatically generate a unique tape ID.
     */
    Tape();

    /**
     * Create a new tape index for the given tape index ID.
     *
     * @param id The unique tape index identifier.
     */
    Tape( const char * id );

    /**
     * Destroy the tape index.
     */
    ~Tape();

    /**
     * Writes a KDat header containing the tape ID, at the beginning of the
     * tape.  All data on the tape will be lost.
     */
    void format();

    /**
     * Get the unique ID for the tape.
     *
     * @return The tape id.
     */
    TQString getID();

    /**
     * Get the user-specified name for the tape.
     *
     * @return The name of the tape.
     */
    TQString getName();

    /**
     * Get the date and time that the tape was formatted.
     *
     * @return The tape format time, in seconds since the Epoch.
     */
    int getCTime();
    
    /**
     * Get the last time that the tape was modified.
     *
     * @return The tape modification time, in seconds since the Epoch.
     */
    int getMTime();

    /**
     * Get the total tape capacity.
     *
     * @return The tape capacity in kilobytes.
     */
    int getSize();

    /**
     * Get the list of archives on this tape.
     *
     * @return The list of all archives on the tape.
     */
    const TQPtrList<Archive>& getChildren();

    /**
     * Set the name for the tape.
     *
     * @param name The new name for the tape.
     */
    void setName( const TQString & name );

    /**
     * Set the modification time for the tape to be the current time..
     */
    void setMTime( int mtime );

    /**
     * Set the total capacity of the tape.
     *
     * @param size The total size, in kilobytes, of the tape.
     */
    void setSize( int size );

    /**
     * Add an archive to the tape index.
     *
     * @param archive The archive to add.
     */
    void addChild( Archive* archive );

    /**
     * Remove an archive and all the archives that follow it from the index.
     *
     * @param archive The archive to remove.
     */
    void removeChild( Archive* archive );

    /**
     * Recursively destroy all children of the tape index.
     */
    void clear();
};

#endif