diff options
Diffstat (limited to 'cdutils.cpp')
-rw-r--r-- | cdutils.cpp | 1127 |
1 files changed, 0 insertions, 1127 deletions
diff --git a/cdutils.cpp b/cdutils.cpp deleted file mode 100644 index 0dd0e8a..0000000 --- a/cdutils.cpp +++ /dev/null @@ -1,1127 +0,0 @@ -/* - * 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 - */ - -#include <stdio.h> -#include <string.h> -#include <malloc.h> -#include <stdlib.h> -#include <unistd.h> -#include "generic.h" -#include "cdutils.h" -#include "fileutils.h" - -FILE * ppf_file = 0; -int pt1 = -1, pt2 = -1, snum = 0, ptl = 0, root = 0; - -long sec_sizes[5] = {0, 2048, 2336, 2048, 2324}; -long sec_offsts[5] = {0, 16, 16, 24, 24}; -char * sec_modes[5] = {"MODE 0 (no mode)", "MODE 1", "MODE 2", "MODE 2 FORM 1", "MODE 2 FORM 2"}; - -struct DirEntry rootDir; - -unsigned char from_BCD(unsigned char x) { - return ((x & 0xf) + ((x & 0xf0) >> 4) * 10); -} - -unsigned char to_BCD(unsigned char x) { - return ((x / 10) << 4) | (x % 10); -} - -int is_valid_BCD(unsigned char x) { - return (((x & 15) < 10) && ((x >> 4) < 10)); -} - -unsigned long from_MSF(unsigned char m, unsigned char s, unsigned char f, unsigned long start) { - return (from_BCD(m) * 60 + from_BCD(s)) * 75 + from_BCD(f) - start; -} - -unsigned long from_MSF(unsigned long msf, unsigned long start) { - unsigned char - f = msf & 0xff, - s = (msf >> 8) & 0xff, - m = (msf >> 16) & 0xff; - - return from_MSF(m, s, f, start); -} - -FILE * open_ppf(char * ppf, FILE * iso, char * comment) { - int i, l; - char buffer[1024]; - - if (!(ppf_file = fopen(ppf, "w"))) - return ppf_file; - fwrite("PPF20\001", 1, 6, ppf_file); - - l = strlen(comment); - if (l >= 50) { - fwrite(comment, 1, 50, ppf_file); - } else { - char * t = " "; - fwrite(comment, 1, l, ppf_file); - for (i = l; i < 50; i++) { - fwrite(t, 1, 1, ppf_file); - } - } - - l = filesize(iso); - fwrite(&l, 1, 4, ppf_file); - - fseek(iso, 0x9320, SEEK_SET); - fread(buffer, 1, 1024, iso); - fwrite(buffer, 1, 1024, ppf_file); - return ppf_file; -} - -FILE * open_ppf(char * ppf, int iso, char * comment) { - int i, l; - char buffer[1024]; - - if (!(ppf_file = fopen(ppf, "w"))) - return ppf_file; - fwrite("PPF20\001", 1, 6, ppf_file); - - l = strlen(comment); - if (l >= 50) { - fwrite(comment, 1, 50, ppf_file); - } else { - char * t = " "; - fwrite(comment, 1, l, ppf_file); - for (i = l; i < 50; i++) { - fwrite(t, 1, 1, ppf_file); - } - } - - l = filesize(iso); - fwrite(&l, 1, 4, ppf_file); - - lseek(iso, 0x9320, SEEK_SET); - read(iso, buffer, 1024); - fwrite(buffer, 1, 1024, ppf_file); - return ppf_file; -} - -void write_ppf(unsigned char * old_sec, unsigned char * new_sec, int sec_num) { - int i, l = 0, o; - - for (i = 0; i < 2352; i++) { - if (old_sec[i] == new_sec[i]) { - if (l != 0) { - o = 2352 * sec_num + i; - fwrite(&o, 1, 4, ppf_file); - fwrite(&l, 1, 1, ppf_file); - fwrite(new_sec + i - l - 1, 1, l, ppf_file); - l = 0; - } - } else { - l++; - if (l == 255) { - o = 2352 * sec_num + i; - fwrite(&o, 1, 4, ppf_file); - fwrite(&l, 1, 1, ppf_file); - fwrite(new_sec + i - 255, 1, 255, ppf_file); - l = 0; - } - } - } -} - -char * format_date(unsigned char * input) { - static char output[26]; - - memcpy(output, input + 6, 2); - output[2] = '/'; - memcpy(output + 3, input + 4, 2); - output[5] = '/'; - memcpy(output + 6, input, 4); - output[10] = ' '; - memcpy(output + 11, input + 8, 2); - output[13] = ':'; - memcpy(output + 14, input + 10, 2); - output[16] = ':'; - memcpy(output + 17, input + 12, 2); - output[19] = '.'; - memcpy(output + 20, input + 14, 2); - sprintf(output + 22, "%+3.1f", ((float) (*(((char *)input) + 16))) / 4); - - return output; -} - -unsigned short int swap_word(unsigned short int i) { - return (i >> 8) | (i << 8); -} - -unsigned long int swap_dword(unsigned long int i) { - return (i >> 24) | ((i >> 8) & 0x0000ff00) | ((i << 8) & 0x00ff0000) | (i << 24); -} - -void sector_seek(FILE * f_iso, long sector) { - long curpos; - - curpos = (2352 * (long) sector); - if (fseek(f_iso, curpos, SEEK_SET)) { - printm(M_ERROR, "Unable to seek at %i\n", curpos); - exit(-1); - } else if (ftell(f_iso) != curpos) { - printm(M_ERROR, "Seek slipped when seeking at %i\n", curpos); - exit(-1); - } -} - -void sector_seek(int f_iso, long sector) { - long curpos; - - curpos = (2352 * (long) sector); - if (lseek(f_iso, curpos, SEEK_SET) != curpos) { - printm(M_ERROR, "Unable to seek at %i\n", curpos); - exit(-1); - } -} - -int guess_type(FILE * f_iso, int number) { - unsigned char header[24]; - - if (number >= 0) { - sector_seek(f_iso, number); - } - - fread(header, 1, 24, f_iso); - fseek(f_iso, -24, SEEK_CUR); - if (header[15] == 1) { - return MODE_1; - } else if (header[15] == 2) { - if (*((unsigned long *) &(header[16])) == *((unsigned long *) &(header[20]))) { - if ((header[16] == 0) && (header[17] == 0) && (header[19] == 0)) { - if (header[18] & 0x20) { - return MODE_2_FORM_2; - } else { - return MODE_2_FORM_1; - } - } - } - return MODE_2; - } - - return MODE_0; -} - -int guess_type(int f_iso, int number) { - unsigned char header[24]; - - if (number >= 0) { - sector_seek(f_iso, number); - } - - read(f_iso, header, 24); - lseek(f_iso, -24, SEEK_CUR); - if (header[15] == 1) { - return MODE_1; - } else if (header[15] == 2) { - if (*((unsigned long *) &(header[16])) == *((unsigned long *) &(header[20]))) { - if ((header[16] == 0) && (header[17] == 0) && (header[19] == 0)) { - if (header[18] & 0x20) { - return MODE_2_FORM_2; - } else { - return MODE_2_FORM_1; - } - } - } - return MODE_2; - } - - return MODE_0; -} - -long read_sector(FILE * f_iso, unsigned char * buffer, char type, int number) { - if (number >= 0) { - sector_seek(f_iso, number); - } - - if (type == GUESS) { - type = guess_type(f_iso, number); - } - - fseek(f_iso, sec_offsts[type], SEEK_CUR); - fread(buffer, 1, sec_sizes[type], f_iso); - fseek(f_iso, 2352 - sec_offsts[type] - sec_sizes[type], SEEK_CUR); - return sec_sizes[type]; -} - -long read_sector(int f_iso, unsigned char * buffer, char type, int number) { - if (number >= 0) { - sector_seek(f_iso, number); - } - - if (type == GUESS) { - type = guess_type(f_iso, number); - } - - lseek(f_iso, sec_offsts[type], SEEK_CUR); - read(f_iso, buffer, sec_sizes[type]); - lseek(f_iso, 2352 - sec_offsts[type] - sec_sizes[type], SEEK_CUR); - return sec_sizes[type]; -} - -void read_datas(FILE * f_iso, unsigned char * buffer, int type, int number, long size) { - unsigned char sector[2352]; - int i, n, reste; - - if (type == GUESS) { - type = guess_type(f_iso, number); - } - - n = size / sec_sizes[type]; - reste = size - n * sec_sizes[type]; - - sector_seek(f_iso, number); - for (i = 0; i < n; i++) { - read_sector(f_iso, buffer + i * sec_sizes[type], type); - } - - if (reste) { - read_sector(f_iso, sector, type); - bcopy((char *) sector, (char *) (buffer + n * sec_sizes[type]), reste); - } -} - -void read_datas(int f_iso, unsigned char * buffer, int type, int number, long size) { - unsigned char sector[2352]; - int i, n, reste; - - if (type == GUESS) { - type = guess_type(f_iso, number); - } - - n = size / sec_sizes[type]; - reste = size - n * sec_sizes[type]; - - sector_seek(f_iso, number); - for (i = 0; i < n; i++) { - read_sector(f_iso, buffer + i * sec_sizes[type], type); - } - - if (reste) { - read_sector(f_iso, sector, type); - bcopy((char *) sector, (char *) (buffer + n * sec_sizes[type]), reste); - } -} - -void read_file(FILE * f_iso, FILE * file, char type, int number, long size) { - unsigned char sector[2352]; - int i, n, reste; - - if (type == GUESS) { - type = guess_type(f_iso, number); - } - - n = size / sec_sizes[type]; - reste = size - n * sec_sizes[type]; - - sector_seek(f_iso, number); - for (i = 0; i < n; i++) { - read_sector(f_iso, sector, type); - fwrite(sector, 1, sec_sizes[type], file); - } - - if (reste) { - read_sector(f_iso, sector, type); - fwrite(sector, 1, reste, file); - } -} - -void read_file(int f_iso, int file, char type, int number, long size) { - unsigned char sector[2352]; - int i, n, reste; - - if (type == GUESS) { - type = guess_type(f_iso, number); - } - - n = size / sec_sizes[type]; - reste = size - n * sec_sizes[type]; - - sector_seek(f_iso, number); - for (i = 0; i < n; i++) { - read_sector(f_iso, sector, type); - write(file, sector, sec_sizes[type]); - } - - if (reste) { - read_sector(f_iso, sector, type); - write(file, sector, reste); - } -} - -void write_sector(FILE * f_iso_r, FILE * f_iso_w, unsigned char * buffer, char type, int number) { - unsigned char old_sector[2352], new_sector[2352]; - - if (type == GUESS) { - type = guess_type(f_iso_r, number); - } - - if (number >= 0) { - sector_seek(f_iso_r, number); - sector_seek(f_iso_w, number); - } - - fread(old_sector, 1, 2352, f_iso_r); - - minute = old_sector[12]; - second = old_sector[13]; - frame = old_sector[14]; - - bcopy((char *) old_sector, (char *) new_sector, 2532); - bcopy((char *) buffer, (char *) new_sector + sec_offsts[type], sec_sizes[type]); - - do_encode_L2(new_sector, type, 0); - if (!ppf_file) { - fwrite(new_sector, 1, 2352, f_iso_w); - } else { - write_ppf(old_sector, new_sector, number); - } -} - -void write_sector(int f_iso_r, int f_iso_w, unsigned char * buffer, char type, int number) { - unsigned char old_sector[2352], new_sector[2352]; - - if (type == GUESS) { - type = guess_type(f_iso_r, number); - } - - if (number >= 0) { - sector_seek(f_iso_r, number); - sector_seek(f_iso_w, number); - } - - read(f_iso_r, old_sector, 2352); - - minute = old_sector[12]; - second = old_sector[13]; - frame = old_sector[14]; - - bcopy((char *) old_sector, (char *) new_sector, 2532); - bcopy((char *) buffer, (char *) new_sector + sec_offsts[type], sec_sizes[type]); - - do_encode_L2(new_sector, type, 0); - if (!ppf_file) { - write(f_iso_w, new_sector, 2352); - } else { - write_ppf(old_sector, new_sector, number); - } -} - -void write_datas(FILE * f_iso_r, FILE * f_iso_w, unsigned char * buffer, char type, int number, long size) { - long nbsectors, i; - unsigned char sector[2352]; - - if (type == GUESS) { - type = guess_type(f_iso_r, number); - } - - if (number >= 0) { - sector_seek(f_iso_r, number); - sector_seek(f_iso_w, number); - } - - nbsectors = size / sec_sizes[type]; - - for (i = 0; i < nbsectors; i++) { - write_sector(f_iso_r, f_iso_w, buffer + i * sec_sizes[type], type, number + i); - } - - if (size % sec_sizes[type]) { - memset(sector, 0, 2352); - bcopy((char *) (buffer + i * sec_sizes[type]), (char *) sector, size % sec_sizes[type]); - write_sector(f_iso_r, f_iso_w, sector, type, number + i); - } -} - -void write_datas(int f_iso_r, int f_iso_w, unsigned char * buffer, char type, int number, long size) { - long nbsectors, i; - unsigned char sector[2352]; - - if (type == GUESS) { - type = guess_type(f_iso_r, number); - } - - if (number >= 0) { - sector_seek(f_iso_r, number); - sector_seek(f_iso_w, number); - } - - nbsectors = size / sec_sizes[type]; - - for (i = 0; i < nbsectors; i++) { - write_sector(f_iso_r, f_iso_w, buffer + i * sec_sizes[type], type, number + i); - } - - if (size % sec_sizes[type]) { - memset(sector, 0, 2352); - bcopy((char *) (buffer + i * sec_sizes[type]), (char *) sector, size % sec_sizes[type]); - write_sector(f_iso_r, f_iso_w, sector, type, number + i); - } -} - -void write_file(FILE * f_iso_r, FILE * f_iso_w, FILE * file, char type, int number) { - long size, nbsectors, i; - unsigned char buffer[2352]; - - if (type == GUESS) { - type = guess_type(f_iso_r, number); - } - - if (number >= 0) { - sector_seek(f_iso_r, number); - sector_seek(f_iso_w, number); - } - - size = filesize(file); - nbsectors = size / sec_sizes[type]; - - if (size % sec_sizes[type]) { - nbsectors++; - } - - for (i = 0; i < nbsectors; i++) { - memset(buffer, 0, 2352); - fread(buffer, 1, sec_sizes[type], file); - write_sector(f_iso_r, f_iso_w, buffer, type); - } -} - -void write_file(int f_iso_r, int f_iso_w, int file, char type, int number) { - long size, nbsectors, i; - unsigned char buffer[2352]; - - if (type == GUESS) { - type = guess_type(f_iso_r, number); - } - - if (number >= 0) { - sector_seek(f_iso_r, number); - sector_seek(f_iso_w, number); - } - - size = filesize(file); - nbsectors = size / sec_sizes[type]; - - if (size % sec_sizes[type]) { - nbsectors++; - } - - for (i = 0; i < nbsectors; i++) { - memset(buffer, 0, 2352); - read(file, buffer, sec_sizes[type]); - write_sector(f_iso_r, f_iso_w, buffer, type); - } -} - -void show_head_entry(void) { - printm(M_BARE, "Sector - Size - Date - Time - Flags - Name\n"); -} - -int show_entry(struct DirEntry * dir) { - char pbuf[200]; - if (!dir->R) { - return 1; - } - - strncpy(pbuf, (char *) &(dir->id), dir->N); - pbuf[dir->N] = 0; - - printm(M_BARE, "%6i - %8i - %2i/%02i/%02i - %2i:%02i:%02i%+03.1f - %c%c%c%c%c%c%c%c - %s\n", - dir->Sector, dir->Size, dir->Day, dir->Month, dir->Year, dir->Hour, dir->Minute, dir->Second, ((float) dir->Offset) / 4, - dir->Flags & 1 ? 'H' : '-', dir->Flags & 2 ? 'D' : '-', dir->Flags & 4 ? 'A' : '-', dir->Flags & 8 ? 'R' : '-', - dir->Flags & 16 ? 'P' : '-', dir->Flags & 32 ? '1' : '-', dir->Flags & 64 ? '1' : '-', dir->Flags & 128 ? 'C' : '-', pbuf); - return dir->R; -} - -int show_dir(FILE * f_iso, struct DirEntry * dir) { - unsigned int ptr; - unsigned char * buffer; - - if (!(dir->Flags & 2)) { - return 0; - } - - buffer = (unsigned char *) malloc(dir->Size); - read_datas(f_iso, buffer, GUESS, dir->Sector, dir->Size); - - ptr = 0; - while(ptr < dir->Size) { - ptr += show_entry((struct DirEntry *) &(buffer[ptr])); - } - - free(buffer); - return 1; -} - -int show_dir(int f_iso, struct DirEntry * dir) { - unsigned int ptr; - unsigned char * buffer; - - if (!(dir->Flags & 2)) { - return 0; - } - - buffer = (unsigned char *) malloc(dir->Size); - read_datas(f_iso, buffer, GUESS, dir->Sector, dir->Size); - - ptr = 0; - while(ptr < dir->Size) { - ptr += show_entry((struct DirEntry *) &(buffer[ptr])); - } - - free(buffer); - return 1; -} - -struct DirEntry find_dir_entry(FILE * f_iso, struct DirEntry * dir, char * name) { - unsigned int ptr, size; - unsigned char * buffer; - struct DirEntry r = {0, 0, 0, 0, 0}; - - if (!(dir->Flags & 2)) { - return r; - } - - buffer = (unsigned char *) malloc(size = dir->Size); - read_datas(f_iso, buffer, GUESS, dir->Sector, dir->Size); - - ptr = 0; - while(ptr < size) { - dir = (struct DirEntry *) &(buffer[ptr]); - if (!dir->R) { - ptr++; - } else { - if (!strncmp(name, (char *) &(dir->id), dir->N)) { - r = *dir; - } - ptr += dir->R; - } - } - - free(buffer); - return r; -} - -struct DirEntry find_dir_entry(int f_iso, struct DirEntry * dir, char * name) { - unsigned int ptr, size; - unsigned char * buffer; - struct DirEntry r = {0, 0, 0, 0, 0}; - - if (!(dir->Flags & 2)) { - return r; - } - - buffer = (unsigned char *) malloc(size = dir->Size); - read_datas(f_iso, buffer, GUESS, dir->Sector, dir->Size); - - ptr = 0; - while(ptr < size) { - dir = (struct DirEntry *) &(buffer[ptr]); - if (!dir->R) { - ptr++; - } else { - if (!strncmp(name, (char *) &(dir->id), dir->N)) { - r = *dir; - } - ptr += dir->R; - } - } - - free(buffer); - return r; -} - -struct DirEntry * find_dir_entry(FILE * f_iso, unsigned char ** bufout, struct DirEntry * dir, char * name) { - unsigned int ptr, size; - unsigned char * buffer; - struct DirEntry * rdir = 0; - *bufout = 0; - - if (!(dir->Flags & 2)) { - return 0; - } - - buffer = (unsigned char *) malloc(size = dir->Size); - read_datas(f_iso, buffer, GUESS, dir->Sector, dir->Size); - - ptr = 0; - while(ptr < size) { - dir = (struct DirEntry *) &(buffer[ptr]); - if (!dir->R) { - ptr++; - } else { - if (!strncmp(name, (char *) &(dir->id), dir->N)) { - rdir = dir; - } - ptr += dir->R; - } - } - - if (rdir->R) { - *bufout = buffer; - } else { - free(buffer); - } - return rdir; -} - -struct DirEntry * find_dir_entry(int f_iso, unsigned char ** bufout, struct DirEntry * dir, char * name) { - unsigned int ptr, size; - unsigned char * buffer; - struct DirEntry * rdir = 0; - *bufout = 0; - - if (!(dir->Flags & 2)) { - return 0; - } - - buffer = (unsigned char *) malloc(size = dir->Size); - read_datas(f_iso, buffer, GUESS, dir->Sector, dir->Size); - - ptr = 0; - while(ptr < size) { - dir = (struct DirEntry *) &(buffer[ptr]); - if (!dir->R) { - ptr++; - } else { - if (!strncmp(name, (char *) &(dir->id), dir->N)) { - rdir = dir; - } - ptr += dir->R; - } - } - - if (rdir->R) { - *bufout = buffer; - } else { - free(buffer); - } - return rdir; -} - -int show_iso_infos(FILE * f_iso) { - unsigned char buffer[2048]; - char pbuff[130]; - short int s, nogood = 0; - - read_sector(f_iso, buffer, GUESS, 16); - - printm(M_BARE, "Sector guessed mode : %s\n", sec_modes[guess_type(f_iso, 16)]); - printm(M_BARE, "offset-size-info : contents\n"); - printm(M_BARE, " 0 - 1- 1 : %i\n", buffer[0]); - memcpy(pbuff, buffer + 1, 5); - pbuff[5] = 0; - printm(M_BARE, " 1 - 5-`CD001' : %s\n", pbuff); - printm(M_BARE, " 6 - 2- 1 : %i\n", s = *((short int *) &(buffer[6]))); - printm(M_BARE, "(*this was the signature*)\n"); - if (buffer[0] != 1) nogood = 1; - if (strcmp(pbuff, "CD001")) nogood = 1; - if (s != 1) nogood = 1; - - if (nogood) { - printm(M_BARE, "Not a valid iso9660 file.\n"); - return 0; - } - - memcpy(pbuff, buffer + 8, 32); - pbuff[32] = 0; - printm(M_BARE, " 8 - 32- SYSID : %s\n", pbuff); - memcpy(pbuff, buffer + 40, 32); - pbuff[32] = 0; - printm(M_BARE, " 40 - 32- VOLID : %s\n", pbuff); - printm(M_BARE, " 80 - 8- SNum : %li\n", *((long int *) &(buffer[80]))); - printm(M_BARE, " 120 - 4- VOLSiz : %i\n", *((short int *) &(buffer[120]))); - printm(M_BARE, " 124 - 4- VOLNum : %i\n", *((short int *) &(buffer[124]))); - printm(M_BARE, " 128 - 4- SSize : %i\n", *((short int *) &(buffer[128]))); - printm(M_BARE, " 132 - 8- PSize : %li\n", *((long int *) &(buffer[132]))); - printm(M_BARE, " 140 - 4- 1SLPath: %i\n", *((short int *) &(buffer[140]))); - printm(M_BARE, " 144 - 4- 2SLPath: %i\n", *((short int *) &(buffer[144]))); - printm(M_BARE, " 148 - 4- 1SBPath: %i\n", swap_dword(*((short int *) &(buffer[148])))); - printm(M_BARE, " 152 - 4- 2SBPath: %i\n", swap_dword(*((short int *) &(buffer[152])))); - memcpy(pbuff, buffer + 190, 128); - pbuff[128] = 0; - printm(M_BARE, " 190 - 128- VStId : %s\n", pbuff); - memcpy(pbuff, buffer + 318, 128); - pbuff[128] = 0; - printm(M_BARE, " 318 - 128- PubId : %s\n", pbuff); - memcpy(pbuff, buffer + 446, 128); - pbuff[128] = 0; - printm(M_BARE, " 446 - 128- DPrId : %s\n", pbuff); - memcpy(pbuff, buffer + 574, 128); - pbuff[128] = 0; - printm(M_BARE, " 574 - 128- AppId : %s\n", pbuff); - memcpy(pbuff, buffer + 702, 37); - pbuff[37] = 0; - printm(M_BARE, " 702 - 37- CpyFile: %s\n", pbuff); - memcpy(pbuff, buffer + 739, 37); - pbuff[37] = 0; - printm(M_BARE, " 739 - 37- AbsFile: %s\n", pbuff); - memcpy(pbuff, buffer + 776, 37); - pbuff[37] = 0; - printm(M_BARE, " 776 - 37- BibFile: %s\n", pbuff); - printm(M_BARE, " 813 - 17- DTCreat: %s\n", format_date(&buffer[813])); - printm(M_BARE, " 830 - 17- DTModif: %s\n", format_date(&buffer[830])); - printm(M_BARE, " 847 - 17- DTExpir: %s\n", format_date(&buffer[847])); - printm(M_BARE, " 864 - 17- DTEffec: %s\n", format_date(&buffer[864])); - - printm(M_BARE, "Root record:\n"); - show_head_entry(); - show_entry((DirEntry *) &(buffer[156])); - - return 1; -} - -int show_iso_infos(int f_iso) { - unsigned char buffer[2048]; - char pbuff[130]; - short int s, nogood = 0; - - read_sector(f_iso, buffer, GUESS, 16); - - printm(M_BARE, "Sector guessed mode : %s\n", sec_modes[guess_type(f_iso, 16)]); - printm(M_BARE, "offset-size-info : contents\n"); - printm(M_BARE, " 0 - 1- 1 : %i\n", buffer[0]); - memcpy(pbuff, buffer + 1, 5); - pbuff[5] = 0; - printm(M_BARE, " 1 - 5-`CD001' : %s\n", pbuff); - printm(M_BARE, " 6 - 2- 1 : %i\n", s = *((short int *) &(buffer[6]))); - printm(M_BARE, "(*this was the signature*)\n"); - if (buffer[0] != 1) nogood = 1; - if (strcmp(pbuff, "CD001")) nogood = 1; - if (s != 1) nogood = 1; - - if (nogood) { - printm(M_BARE, "Not a valid iso9660 file.\n"); - return 0; - } - - memcpy(pbuff, buffer + 8, 32); - pbuff[32] = 0; - printm(M_BARE, " 8 - 32- SYSID : %s\n", pbuff); - memcpy(pbuff, buffer + 40, 32); - pbuff[32] = 0; - printm(M_BARE, " 40 - 32- VOLID : %s\n", pbuff); - printm(M_BARE, " 80 - 8- SNum : %li\n", *((long int *) &(buffer[80]))); - printm(M_BARE, " 120 - 4- VOLSiz : %i\n", *((short int *) &(buffer[120]))); - printm(M_BARE, " 124 - 4- VOLNum : %i\n", *((short int *) &(buffer[124]))); - printm(M_BARE, " 128 - 4- SSize : %i\n", *((short int *) &(buffer[128]))); - printm(M_BARE, " 132 - 8- PSize : %li\n", *((long int *) &(buffer[132]))); - printm(M_BARE, " 140 - 4- 1SLPath: %i\n", *((short int *) &(buffer[140]))); - printm(M_BARE, " 144 - 4- 2SLPath: %i\n", *((short int *) &(buffer[144]))); - printm(M_BARE, " 148 - 4- 1SBPath: %i\n", swap_dword(*((short int *) &(buffer[148])))); - printm(M_BARE, " 152 - 4- 2SBPath: %i\n", swap_dword(*((short int *) &(buffer[152])))); - memcpy(pbuff, buffer + 190, 128); - pbuff[128] = 0; - printm(M_BARE, " 190 - 128- VStId : %s\n", pbuff); - memcpy(pbuff, buffer + 318, 128); - pbuff[128] = 0; - printm(M_BARE, " 318 - 128- PubId : %s\n", pbuff); - memcpy(pbuff, buffer + 446, 128); - pbuff[128] = 0; - printm(M_BARE, " 446 - 128- DPrId : %s\n", pbuff); - memcpy(pbuff, buffer + 574, 128); - pbuff[128] = 0; - printm(M_BARE, " 574 - 128- AppId : %s\n", pbuff); - memcpy(pbuff, buffer + 702, 37); - pbuff[37] = 0; - printm(M_BARE, " 702 - 37- CpyFile: %s\n", pbuff); - memcpy(pbuff, buffer + 739, 37); - pbuff[37] = 0; - printm(M_BARE, " 739 - 37- AbsFile: %s\n", pbuff); - memcpy(pbuff, buffer + 776, 37); - pbuff[37] = 0; - printm(M_BARE, " 776 - 37- BibFile: %s\n", pbuff); - printm(M_BARE, " 813 - 17- DTCreat: %s\n", format_date(&buffer[813])); - printm(M_BARE, " 830 - 17- DTModif: %s\n", format_date(&buffer[830])); - printm(M_BARE, " 847 - 17- DTExpir: %s\n", format_date(&buffer[847])); - printm(M_BARE, " 864 - 17- DTEffec: %s\n", format_date(&buffer[864])); - - printm(M_BARE, "Root record:\n"); - show_head_entry(); - show_entry((DirEntry *) &(buffer[156])); - - return 1; -} - -int get_iso_infos(FILE * f_iso) { - unsigned char buffer[2048]; - char pbuff[130]; - short int s, nogood = 0; - - read_sector(f_iso, buffer, GUESS, 16); - - memcpy(pbuff, buffer + 1, 5); - pbuff[5] = 0; - - s = *((short int *) &(buffer[6])); - if (buffer[0] != 1) nogood = 1; - if (strcmp(pbuff, "CD001")) nogood = 1; - if (s != 1) nogood = 1; - - if (nogood) { - printm(M_ERROR, "Not a valid iso9660 file.\n"); - return 0; - } - - pt1 = *((short int *) &(buffer[140])); - pt2 = *((short int *) &(buffer[144])); - snum = *((int *) &(buffer[80])); - ptl = *((long int *) &(buffer[132])); - rootDir = *((struct DirEntry *) &(buffer[156])); - return 1; -} - -int get_iso_infos(int f_iso) { - unsigned char buffer[2048]; - char pbuff[130]; - short int s, nogood = 0; - - read_sector(f_iso, buffer, GUESS, 16); - - memcpy(pbuff, buffer + 1, 5); - pbuff[5] = 0; - - s = *((short int *) &(buffer[6])); - if (buffer[0] != 1) nogood = 1; - if (strcmp(pbuff, "CD001")) nogood = 1; - if (s != 1) nogood = 1; - - if (nogood) { - printm(M_ERROR, "Not a valid iso9660 file.\n"); - return 0; - } - - pt1 = *((short int *) &(buffer[140])); - pt2 = *((short int *) &(buffer[144])); - snum = *((int *) &(buffer[80])); - ptl = *((long int *) &(buffer[132])); - rootDir = *((struct DirEntry *) &(buffer[156])); - return 1; -} - -int get_pt_infos(FILE * f_iso) { - unsigned char * buffer; - - if ((pt1 <= 0) && (pt2 <= 0)) - if (!get_iso_infos(f_iso)) - return 0; - - if ((!pt1) & (!pt2)) { - printm(M_ERROR, "No path table defined.\n"); - return 0; - } - - buffer = (unsigned char *) malloc(ptl); - read_datas(f_iso, buffer, GUESS, !pt1 ? pt2 : pt1, ptl); - - if (buffer[0] == 1) - if (buffer[1] == 0) - if (buffer[6] == 1) - if (buffer[7] == 0) - if (buffer[8] == 0) - if (buffer[9] == 0) - root = *((unsigned long int *) &(buffer[2])); - - free(buffer); - return root ? 1 : 0; -} - -int show_pt_infos(FILE * f_iso) { - unsigned char * buffer; - char pbuf[100]; - int i, ptr; - - if ((pt1 <= 0) && (pt2 <= 0)) - if (!get_iso_infos(f_iso)) - return 0; - - if ((!pt1) & (!pt2)) { - printm(M_ERROR, "No path table defined.\n"); - return 0; - } - - buffer = (unsigned char *) malloc(ptl); - read_datas(f_iso, buffer, GUESS, !pt1 ? pt2 : pt1, ptl); - - printm(M_BARE, "node^paren@sector : name\n"); - for (ptr = 0, i = 1; buffer[ptr]; ptr += ptr & 1, i++) { - strncpy(pbuf, (char *) &(buffer[8 + ptr]), buffer[ptr]); - pbuf[buffer[ptr]] = 0; - printm(M_BARE, "%3i ^ %3i @ %6i: %s\n", i, *((unsigned short *) &(buffer[6 + ptr])), *((unsigned long *) &(buffer[2 + ptr])), pbuf); - ptr += 8 + buffer[ptr]; - } - - free(buffer); - return 1; -} - -int show_pt_infos(int f_iso) { - unsigned char * buffer; - char pbuf[100]; - int i, ptr; - - if ((pt1 <= 0) && (pt2 <= 0)) - if (!get_iso_infos(f_iso)) - return 0; - - if ((!pt1) & (!pt2)) { - printm(M_ERROR, "No path table defined.\n"); - return 0; - } - - buffer = (unsigned char *) malloc(ptl); - read_datas(f_iso, buffer, GUESS, !pt1 ? pt2 : pt1, ptl); - - printm(M_BARE, "node^paren@sector : name\n"); - for (ptr = 0, i = 1; buffer[ptr]; ptr += ptr & 1, i++) { - strncpy(pbuf, (char *) &(buffer[8 + ptr]), buffer[ptr]); - pbuf[buffer[ptr]] = 0; - printm(M_BARE, "%3i ^ %3i @ %6i: %s\n", i, *((unsigned short *) &(buffer[6 + ptr])), *((unsigned long *) &(buffer[2 + ptr])), pbuf); - ptr += 8 + buffer[ptr]; - } - - free(buffer); - return 1; -} - -struct DirEntry find_path(FILE * f_iso, char * path) { - char ** pts = split(path, '/'); - struct DirEntry dir = {0, 0, 0, 0, 0}; - - if ((pt1 <= 0) && (pt2 <= 0)) - if (!get_iso_infos(f_iso)) - return dir; - - if ((!pt1) & (!pt2)) { - printm(M_ERROR, "No path table defined.\n"); - return dir; - } - - if (!**pts) - pts++; - - for (dir = rootDir; *pts; pts++) { - if (!strlen(*pts)) - continue; - dir = find_dir_entry(f_iso, &dir, *pts); - if (!dir.R) - return dir; - } - - return dir; -} - -struct DirEntry find_path(int f_iso, char * path) { - char ** pts = split(path, '/'); - struct DirEntry dir = {0, 0, 0, 0, 0}; - - if ((pt1 <= 0) && (pt2 <= 0)) - if (!get_iso_infos(f_iso)) - return dir; - - if ((!pt1) & (!pt2)) { - printm(M_ERROR, "No path table defined.\n"); - return dir; - } - - if (!**pts) - pts++; - - for (dir = rootDir; *pts; pts++) { - if (!strlen(*pts)) - continue; - dir = find_dir_entry(f_iso, &dir, *pts); - if (!dir.R) - return dir; - } - - return dir; -} - -struct DirEntry find_parent(FILE * f_iso, char * path) { - char ** pts, * p; - struct DirEntry dir = {0, 0, 0, 0, 0}; - - if ((p = strchr(path, '/'))) { - *p = 0; - } - if (!*path) { - return rootDir; - } - pts = split(path, '/'); - - if ((pt1 <= 0) && (pt2 <= 0)) - if (!get_iso_infos(f_iso)) - return dir; - - if ((!pt1) & (!pt2)) { - printm(M_ERROR, "No path table defined.\n"); - return dir; - } - - if (!**pts) - pts++; - - for (dir = rootDir; *pts; pts++) { - if (!strlen(*pts)) - continue; - dir = find_dir_entry(f_iso, &dir, *pts); - if (!dir.R) - return dir; - } - - return dir; -} - -struct DirEntry find_parent(int f_iso, char * path) { - char ** pts, * p; - struct DirEntry dir = {0, 0, 0, 0, 0}; - - if ((p = strchr(path, '/'))) { - *p = 0; - } - if (!*path) { - return rootDir; - } - pts = split(path, '/'); - - if ((pt1 <= 0) && (pt2 <= 0)) - if (!get_iso_infos(f_iso)) - return dir; - - if ((!pt1) & (!pt2)) { - printm(M_ERROR, "No path table defined.\n"); - return dir; - } - - if (!**pts) - pts++; - - for (dir = rootDir; *pts; pts++) { - if (!strlen(*pts)) - continue; - dir = find_dir_entry(f_iso, &dir, *pts); - if (!dir.R) - return dir; - } - - return dir; -} |