diff --git a/utils/prodos-utils/prodos.c b/utils/prodos-utils/prodos.c index f713a7b9..d50b643b 100644 --- a/utils/prodos-utils/prodos.c +++ b/utils/prodos-utils/prodos.c @@ -873,7 +873,7 @@ static void display_help(char *name, int version_only) { printf("\n"); printf(" Where disk_image is a valid PRODOS disk image\n" " and COMMAND is one of the following:\n"); - printf("\tCATALOG [dir]\n"); + printf("\tCATALOG [dir_name]\n"); printf("\tLOAD apple_file \n"); printf("\tSAVE [-t type] [-a addr] [-l len] local_file \n"); printf("\tDELETE apple_file\n"); @@ -970,6 +970,7 @@ int main(int argc, char **argv) { int inode; int address=0, length=0; struct voldir_t voldir; + int dir_block; /* Check command line arguments */ while ((c = getopt (argc, argv,"a:i:l:t:dhvxy"))!=-1) { @@ -1226,7 +1227,9 @@ int main(int argc, char **argv) { case COMMAND_CATALOG: - prodos_catalog(prodos_fd,&voldir); + dir_block=PRODOS_VOLDIR_KEY_BLOCK; + + prodos_catalog(&voldir,dir_block); break; diff --git a/utils/prodos-utils/prodos.h b/utils/prodos-utils/prodos.h index 7255a442..20f612a8 100644 --- a/utils/prodos-utils/prodos.h +++ b/utils/prodos-utils/prodos.h @@ -105,7 +105,7 @@ int prodos_find_next_file(int inode, struct voldir_t *voldir); int prodos_populate_filedesc(unsigned char *file_desc, struct file_entry_t *file_entry); //unsigned char prodos_char_to_type(char type, int lock); -void prodos_catalog(int dos_fd, struct voldir_t *voldir); +void prodos_catalog(struct voldir_t *voldir, int dir_block); //char *prodos_filename_to_ascii(char *dest,unsigned char *src,int len); //unsigned char prodos_file_type(int value); diff --git a/utils/prodos-utils/prodos_catalog.c b/utils/prodos-utils/prodos_catalog.c index a19f8972..679982d6 100644 --- a/utils/prodos-utils/prodos_catalog.c +++ b/utils/prodos-utils/prodos_catalog.c @@ -209,7 +209,7 @@ static int prodos_print_file_info(int inode, struct voldir_t *voldir) { return 0; } -void prodos_catalog(int dos_fd, struct voldir_t *voldir) { +void prodos_catalog(struct voldir_t *voldir, int dir_block) { int catalog_block,catalog_offset,catalog_inode; int blocks_free=0; @@ -222,7 +222,7 @@ void prodos_catalog(int dos_fd, struct voldir_t *voldir) { printf(" NAME TYPE BLOCKS MODIFIED CREATED ENDFILE SUBTYPE\n"); printf("\n"); - catalog_block=PRODOS_VOLDIR_KEY_BLOCK; + catalog_block=dir_block; catalog_offset=0; /* skip the header */ catalog_inode=(catalog_block<<8)|catalog_offset; diff --git a/utils/prodos-utils/prodos_dump.c b/utils/prodos-utils/prodos_dump.c index 996c2650..39f24da3 100644 --- a/utils/prodos-utils/prodos_dump.c +++ b/utils/prodos-utils/prodos_dump.c @@ -290,6 +290,10 @@ int prodos_dump_subdir(struct voldir_t *voldir, int subdir_key_block) { printf("\tHeader pointer: %x\n",file_entry.header_pointer); + if (file_entry.storage_type==PRODOS_FILE_SUBDIR) { + prodos_dump_subdir(voldir,file_entry.key_pointer); + } + } /* move to next */