summaryrefslogtreecommitdiff
path: root/VP/main_dump.cpp
diff options
context:
space:
mode:
authorPixel <Pixel>2002-09-27 12:17:57 +0000
committerPixel <Pixel>2002-09-27 12:17:57 +0000
commitbfa5de7eccf4604ff8217f619e9685a09e80d545 (patch)
treea5be5de750ac611145f459a09bda902c3dbc1a70 /VP/main_dump.cpp
parent60c1003845035ad4cd0e9ea50862bad7626faf0e (diff)
The week-without-the-network changes
Diffstat (limited to 'VP/main_dump.cpp')
-rw-r--r--VP/main_dump.cpp82
1 files changed, 48 insertions, 34 deletions
diff --git a/VP/main_dump.cpp b/VP/main_dump.cpp
index 0845e1a..421db66 100644
--- a/VP/main_dump.cpp
+++ b/VP/main_dump.cpp
@@ -33,8 +33,21 @@
#include "Input.h"
#include "Output.h"
#include "String.h"
+#include "Main.h"
+#include "cdabstract.h"
+
+CODE_BEGINS
+public:
+Appli() : tourne(0), nb_seqs(0), f_def(0), f_iso(0), f_out(0), cdutil(0) {}
+virtual ~Appli() {
+ delete cdutil;
+ delete f_def;
+ delete f_iso;
+ delete f_out;
+}
+private:
-unsigned int tourne = 0;
+unsigned int tourne;
struct t_index_tab {
unsigned long address;
@@ -53,20 +66,15 @@ struct t_sequence {
String title, iso_filename, prefix;
unsigned long iso_size;
-unsigned int nb_records, nb_seqs = 0;
+unsigned int nb_records, nb_seqs;
struct t_sequence sequences[1000];
-
-long check_iso(Handle * f_iso);
-void read_files(Handle * f_iso);
-void file_dump(Handle * f_iso, unsigned long debut, unsigned long taille, long num, int seq);
-int process_def_file(Handle * f_def);
+Handle * f_def, * f_iso, * f_out;
+cdutils * cdutil;
unsigned char user_data[2352];
-int main(int argc, char **argv)
+virtual int startup() throw (GeneralException)
{
- Handle * f_def, * f_iso;
-
verbosity = M_STATUS;
fprintf(stderr,
@@ -76,40 +84,41 @@ int main(int argc, char **argv)
if (argc != 3) {
fprintf(stderr, "Usage: %s <definition_file.sqr> <iso_file_name>\nSee readme.txt for details\n",
argv[0]);
- exit(-1);
+ throw Exit(-1);
}
printm(M_STATUS, "Processing file %s...\n", argv[1]);
f_def = new Input(argv[1]);
- if (process_def_file(f_def)) {
- delete f_def;
+ if (process_def_file()) {
printm(M_ERROR, "Unable to process the definition file \"%s\"...\n", argv[1]);
- exit(-1);
+ throw Exit(-1);
}
iso_filename = argv[2];
printm(M_STATUS, "Begin processing iso file.\n");
- f_iso = new Input(iso_filename);
+ f_iso = open_iso(iso_filename);
- if (check_iso(f_iso)) {
+ if (check_iso()) {
printm(M_ERROR, "Invalid iso file for " + title + "\n");
printm(M_ERROR, "===> Make sure you are using a Genuine iso file.\n");
} else {
printm(M_INFO, "Genuine " + title + " iso detected.\n");
}
+
+ cdutil = new cdutils(f_iso);
+
printm(M_STATUS, "Entering files read sequence\n");
- read_files(f_iso);
- delete f_iso;
- exit(0);
+ read_files();
+ throw Exit(0);
}
/*
* Ugly but working... for now
*/
-int process_def_file(Handle * f_def)
+int process_def_file()
{
String t;
unsigned int n, sum = 0;
@@ -153,19 +162,23 @@ int process_def_file(Handle * f_def)
}
}
-long check_iso(Handle * f_iso)
+long check_iso()
{
unsigned long length;
length = f_iso->GetSize();
- printm(M_INFO, "Filesize of iso file " + iso_filename + " is %ld bytes\n", length);
- if (length != iso_size) {
- return 1;
+ if (length < 0) {
+ printm(M_INFO, "Can not get file size, assuming reading from cd.\n");
+ } else {
+ printm(M_INFO, "Filesize of iso file " + iso_filename + " is %ld bytes\n", length);
+ if (length != iso_size) {
+ return 1;
+ }
}
return 0;
}
-void read_files(Handle * f_iso)
+void read_files()
{
t_index_tab index_tab[10000];
unsigned long i;
@@ -178,10 +191,10 @@ void read_files(Handle * f_iso)
#define INDEXPOS 150
- sector_seek(f_iso, INDEXPOS);
+ cdutil->sector_seek(INDEXPOS);
for (i = INDEXPOS; i < (INDEXPOS + 10); i++) {
printm(M_INFO, "Reading fat sector %lu\n", i);
- read_sector(f_iso, &fat[2048 * (i - INDEXPOS)], MODE_2_FORM_1);
+ cdutil->read_sector(&fat[2048 * (i - INDEXPOS)], MODE_2_FORM_1);
}
memcpy(key, fat + 0x4f00, 256);
@@ -197,7 +210,7 @@ void read_files(Handle * f_iso)
m = fat[j];
s = fat[j + 1];
f = fat[j + 2];
- index_tab[indexer].address = from_MSF(m, s, f);
+ index_tab[indexer].address = cdutil->from_MSF(m, s, f);
if (m || s || f) {
index_tab[indexer].index = j / 4;
index_tab[indexer].flags = fat[j + 3];
@@ -224,7 +237,7 @@ void read_files(Handle * f_iso)
printm(M_INFO, "%6lu - %02x: ", index_tab[i].address, index_tab[i].flags);
size = index_tab[i + 1].address - index_tab[i].address;
size *= sec_sizes[index_tab[i].type];
- file_dump(f_iso, index_tab[i].address, size, i, seq);
+ file_dump(index_tab[i].address, size, i, seq);
if (verbosity >= M_INFO) {
fprintf(stderr, "\n");
}
@@ -233,12 +246,11 @@ void read_files(Handle * f_iso)
fprintf(stderr, "\n");
}
-void file_dump(Handle * f_iso, unsigned long debut, unsigned long taille, long num, int seq)
+void file_dump(unsigned long debut, unsigned long taille, long num, int seq)
{
long i;
long nbsects;
String nom;
- Handle * f_out;
char type = sequences[seq].type;
char ptitbidule[] = "-\\|/";
@@ -248,17 +260,17 @@ void file_dump(Handle * f_iso, unsigned long debut, unsigned long taille, long n
nom += sequences[seq].prefix + "/";
MKDIR(nom.to_charp());
- nom += String("%04ld.out", num);
+ nom += String().set("%04ld.out", num);
f_out = new Output(nom);
nbsects = taille / sec_sizes[type];
if (taille % sec_sizes[type])
nbsects++;
- sector_seek(f_iso, debut);
+ cdutil->sector_seek(debut);
for (i = 0; i < nbsects; i++) {
if (verbosity < M_INFO)
fprintf(stderr, " (%c)\010\010\010\010\010", ptitbidule[((tourne++) >> 8) % 4]);
- read_sector(f_iso, user_data, type);
+ cdutil->read_sector(user_data, type);
if (i != (nbsects - 1)) {
f_out->write(user_data, sec_sizes[type]);
} else {
@@ -266,5 +278,7 @@ void file_dump(Handle * f_iso, unsigned long debut, unsigned long taille, long n
}
}
delete f_out;
+ f_out = 0;
printm(M_BARE, " (*) Dumped file number %4ld - type \"" + sequences[seq].name + "\" \r", num);
}
+CODE_ENDS