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(" 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 <local_file>\n");
printf("\tSAVE [-t type] [-a addr] [-l len] local_file <apple_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;

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,
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);

View File

@ -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;

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);
if (file_entry.storage_type==PRODOS_FILE_SUBDIR) {
prodos_dump_subdir(voldir,file_entry.key_pointer);
}
}
/* move to next */