prodos: more work on subdir support

This commit is contained in:
Vince Weaver 2021-08-04 09:04:25 -04:00
parent b4852bf33e
commit ee544928c1
4 changed files with 12 additions and 5 deletions

View File

@ -873,7 +873,7 @@ static void display_help(char *name, int version_only) {
printf("\n"); printf("\n");
printf(" Where disk_image is a valid PRODOS disk image\n" printf(" Where disk_image is a valid PRODOS disk image\n"
" and COMMAND is one of the following:\n"); " and COMMAND is one of the following:\n");
printf("\tCATALOG [dir]\n"); printf("\tCATALOG [dir_name]\n");
printf("\tLOAD apple_file <local_file>\n"); printf("\tLOAD apple_file <local_file>\n");
printf("\tSAVE [-t type] [-a addr] [-l len] local_file <apple_file>\n"); printf("\tSAVE [-t type] [-a addr] [-l len] local_file <apple_file>\n");
printf("\tDELETE apple_file\n"); printf("\tDELETE apple_file\n");
@ -970,6 +970,7 @@ int main(int argc, char **argv) {
int inode; int inode;
int address=0, length=0; int address=0, length=0;
struct voldir_t voldir; struct voldir_t voldir;
int dir_block;
/* Check command line arguments */ /* Check command line arguments */
while ((c = getopt (argc, argv,"a:i:l:t:dhvxy"))!=-1) { while ((c = getopt (argc, argv,"a:i:l:t:dhvxy"))!=-1) {
@ -1226,7 +1227,9 @@ int main(int argc, char **argv) {
case COMMAND_CATALOG: case COMMAND_CATALOG:
prodos_catalog(prodos_fd,&voldir); dir_block=PRODOS_VOLDIR_KEY_BLOCK;
prodos_catalog(&voldir,dir_block);
break; break;

View File

@ -105,7 +105,7 @@ int prodos_find_next_file(int inode, struct voldir_t *voldir);
int prodos_populate_filedesc(unsigned char *file_desc, int prodos_populate_filedesc(unsigned char *file_desc,
struct file_entry_t *file_entry); struct file_entry_t *file_entry);
//unsigned char prodos_char_to_type(char type, int lock); //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); //char *prodos_filename_to_ascii(char *dest,unsigned char *src,int len);
//unsigned char prodos_file_type(int value); //unsigned char prodos_file_type(int value);

View File

@ -209,7 +209,7 @@ static int prodos_print_file_info(int inode, struct voldir_t *voldir) {
return 0; 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 catalog_block,catalog_offset,catalog_inode;
int blocks_free=0; 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(" NAME TYPE BLOCKS MODIFIED CREATED ENDFILE SUBTYPE\n");
printf("\n"); printf("\n");
catalog_block=PRODOS_VOLDIR_KEY_BLOCK; catalog_block=dir_block;
catalog_offset=0; /* skip the header */ catalog_offset=0; /* skip the header */
catalog_inode=(catalog_block<<8)|catalog_offset; catalog_inode=(catalog_block<<8)|catalog_offset;

View File

@ -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); 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 */ /* move to next */