/* * PSX-Tools Bundle Pack * Copyright (C) 2002-2003 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 */ /* $id$ */ #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