diff --git a/src/shell/shell_cmds.cpp b/src/shell/shell_cmds.cpp index 8566b0c6..e04e018d 100644 --- a/src/shell/shell_cmds.cpp +++ b/src/shell/shell_cmds.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: shell_cmds.cpp,v 1.92 2009-08-15 09:32:20 c2woody Exp $ */ +/* $Id: shell_cmds.cpp,v 1.93 2009-09-21 21:04:25 h-a-l-9000 Exp $ */ #include "dosbox.h" #include "shell.h" @@ -404,6 +404,10 @@ void DOS_Shell::CMD_DIR(char * args) { bool optW=ScanCMDBool(args,"W"); ScanCMDBool(args,"S"); bool optP=ScanCMDBool(args,"P"); + if (ScanCMDBool(args,"WP") || ScanCMDBool(args,"PW")) { + optW=optP=true; + } + bool optB=ScanCMDBool(args,"B"); bool optAD=ScanCMDBool(args,"AD"); char * rem=ScanCMDRemain(args); if (rem) { @@ -450,7 +454,7 @@ void DOS_Shell::CMD_DIR(char * args) { return; } *(strrchr(path,'\\')+1)=0; - WriteOut(MSG_Get("SHELL_CMD_DIR_INTRO"),path); + if (!optB) WriteOut(MSG_Get("SHELL_CMD_DIR_INTRO"),path); /* Command uses dta so set it to our internal dta */ RealPt save_dta=dos.dta(); @@ -458,7 +462,7 @@ void DOS_Shell::CMD_DIR(char * args) { DOS_DTA dta(dos.dta()); bool ret=DOS_FindFirst(args,0xffff & ~DOS_ATTR_VOLUME); if (!ret) { - WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); + if (!optB) WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); dos.dta(save_dta); return; } @@ -483,53 +487,62 @@ void DOS_Shell::CMD_DIR(char * args) { Bit8u minute = (Bit8u)((time >> 5) & 0x003f); /* output the file */ - if (attr & DOS_ATTR_DIRECTORY) { - if (optW) { - WriteOut("[%s]",name); - size_t namelen = strlen(name); - if (namelen <= 14) { - for (size_t i=14-namelen;i>0;i--) WriteOut(" "); - } - } else { - WriteOut("%-8s %-3s %-16s %02d-%02d-%04d %2d:%02d\n",name,ext,"",day,month,year,hour,minute); + if (optB) { + // this overrides pretty much everything + if (strcmp(".",name) && strcmp("..",name)) { + if ((attr & DOS_ATTR_DIRECTORY)||(strlen(ext)==0)) WriteOut("%s\n",name); + else WriteOut("%s.%s\n",name,ext); } - dir_count++; } else { - if (optW) { - WriteOut("%-16s",name); + if (attr & DOS_ATTR_DIRECTORY) { + if (optW) { + WriteOut("[%s]",name); + size_t namelen = strlen(name); + if (namelen <= 14) { + for (size_t i=14-namelen;i>0;i--) WriteOut(" "); + } + } else { + WriteOut("%-8s %-3s %-16s %02d-%02d-%04d %2d:%02d\n",name,ext,"",day,month,year,hour,minute); + } + dir_count++; } else { - FormatNumber(size,numformat); - WriteOut("%-8s %-3s %16s %02d-%02d-%04d %2d:%02d\n",name,ext,numformat,day,month,year,hour,minute); + if (optW) { + WriteOut("%-16s",name); + } else { + FormatNumber(size,numformat); + WriteOut("%-8s %-3s %16s %02d-%02d-%04d %2d:%02d\n",name,ext,numformat,day,month,year,hour,minute); + } + file_count++; + byte_count+=size; } - file_count++; - byte_count+=size; - } - if (optW) { - w_count++; - } - if(optP) { - if(!(++p_count%(22*w_size))) { - CMD_PAUSE(empty_string); + if (optW) { + w_count++; + } + if (optP) { + if (!(++p_count%(22*w_size))) { + CMD_PAUSE(empty_string); + } } } } while ( (ret=DOS_FindNext()) ); if (optW) { if (w_count%5) WriteOut("\n"); } - - /* Show the summary of results */ - FormatNumber(byte_count,numformat); - WriteOut(MSG_Get("SHELL_CMD_DIR_BYTES_USED"),file_count,numformat); - Bit8u drive=dta.GetSearchDrive(); - //TODO Free Space - Bitu free_space=1024*1024*100; - if (Drives[drive]) { - Bit16u bytes_sector;Bit8u sectors_cluster;Bit16u total_clusters;Bit16u free_clusters; - Drives[drive]->AllocationInfo(&bytes_sector,§ors_cluster,&total_clusters,&free_clusters); - free_space=bytes_sector*sectors_cluster*free_clusters; + if (!optB) { + /* Show the summary of results */ + FormatNumber(byte_count,numformat); + WriteOut(MSG_Get("SHELL_CMD_DIR_BYTES_USED"),file_count,numformat); + Bit8u drive=dta.GetSearchDrive(); + //TODO Free Space + Bitu free_space=1024*1024*100; + if (Drives[drive]) { + Bit16u bytes_sector;Bit8u sectors_cluster;Bit16u total_clusters;Bit16u free_clusters; + Drives[drive]->AllocationInfo(&bytes_sector,§ors_cluster,&total_clusters,&free_clusters); + free_space=bytes_sector*sectors_cluster*free_clusters; + } + FormatNumber(free_space,numformat); + WriteOut(MSG_Get("SHELL_CMD_DIR_BYTES_FREE"),dir_count,numformat); } - FormatNumber(free_space,numformat); - WriteOut(MSG_Get("SHELL_CMD_DIR_BYTES_FREE"),dir_count,numformat); dos.dta(save_dta); }