summaryrefslogtreecommitdiff
path: root/includes/cdutils.h
blob: 86779baa878ef8ff63b1fa1cc7347a4f0555ce69 (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
/* 
 *  PSX-Tools Bundle Pack 
 *  Copyright (C) 2002 Nicolas "Pixel" Noble 
 *  
 *  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 */

#ifndef __CDUTILS_H__
#define __CDUTILS_H__

#include "yazedc.h"
#include "generic.h"

#include "Handle.h"

#define MODE0 0
#define MODE1 1
#define MODE2 2
#define MODE2_FORM1 3
#define MODE2_FORM2 4
#define MODE_RAW 5
#define GUESS 6

extern const long sec_sizes[];
extern const long sec_offsts[];
extern const String sec_modes[];

#ifdef _WIN32
#pragma pack(1)
#endif

class cdutils : public Base {
  public:
      cdutils(Handle * f_iso_r, Handle * f_iso_w = 0);
      virtual ~cdutils();

      PPACKED struct DirEntry {
	unsigned char R;
	unsigned char NExt;
	unsigned long Sector;
	unsigned long BESector;
	unsigned long Size;
	unsigned long BESize;
	unsigned char Year;
	unsigned char Month;
	unsigned char Day;
	unsigned char Hour;
	unsigned char Minute;
	unsigned char Second;
	unsigned char Offset;
	unsigned char Flags;
	unsigned char HandleUnit;
	unsigned char HandleGap;
	unsigned short VolSeq;
	unsigned short BEVolSeq;
	unsigned char N;
	char id;
    } PACKED;


    struct DirEntry rootDir;

    Handle * open_ppf(String ppf, String comment) throw(GeneralException);
    void close_ppf() throw(GeneralException);
    void set_iso_w(Handle *);
    unsigned short int swap_word(unsigned short int i);
    unsigned long int swap_dword(unsigned long int i);
    int guess_type(int number = -1);
    void sector_seek(long sector);
    long read_sector(Byte * buffer, int type, int number = -1);
    void read_datas(Byte * buffer, int type, int number, long size);
    void read_file(Handle * Handle, int type, int number, long size);
    void write_sector(Byte * buffer, int type, int number = -1);
    void write_datas(Byte * buffer, int type, int number, long size);
    void write_file(Handle * Handle, int type, int number = -1);
    int get_iso_infos();
    int show_iso_infos();
    int get_pt_infos();
    int show_pt_infos();
    struct DirEntry find_path(String path);
    struct DirEntry find_parent(String path);
    void show_head_entry(void);
    int show_entry(struct DirEntry * dir);
    int show_dir(struct DirEntry * dir);
    struct DirEntry find_dir_entry(struct DirEntry * dir, String name);
    struct DirEntry * find_dir_entry(Byte ** buffer, struct DirEntry * dir, String name);
    unsigned char from_BCD(unsigned char x);
    unsigned char to_BCD(unsigned char x);
    int is_valid_BCD(unsigned char x);
    unsigned long from_MSF(unsigned long msf, unsigned long start = 150);
    unsigned long from_MSF(unsigned char m, unsigned char s, unsigned char f, unsigned long start = 150);
  private:
    void write_ppf(Byte * old_sec, Byte * new_sec, int sec_num);
    String format_date(String input);
    yazedc yazedc_o;
    
    Handle * f_iso_r, * f_iso_w, * ppf_file;
    int pt1, pt2, snum, ptl, root;
};

#endif