22,9 → 22,8 |
*/ |
|
static int cmd_dir(struct cmd_funcparam *p) { |
const char *filespecptr = NULL; |
const char *filespecptr = "*.*"; |
struct DTA *dta = (void *)0x80; /* set DTA to its default location at 80h in PSP */ |
int i; |
|
if (cmd_ishlp(p)) { |
outputnl("Displays a list of files and subdirectories in a directory."); |
32,33 → 31,8 |
return(-1); |
} |
|
/* parse command line */ |
for (i = 0; i < p->argc; i++) { |
if (p->argv[i][0] == '/') { |
switch (p->argv[i][1]) { |
default: |
outputnl("Invalid switch"); |
return(-1); |
} |
} else { /* filespec */ |
if (filespecptr != NULL) { |
outputnl("Too many parameters"); |
return(-1); |
} |
filespecptr = p->argv[i]; |
} |
} |
if (findfirst(dta, filespecptr, DOS_ATTR_RO | DOS_ATTR_HID | DOS_ATTR_SYS | DOS_ATTR_DIR | DOS_ATTR_ARC) != 0) return(-1); |
|
if (filespecptr == NULL) filespecptr = "."; |
|
file_truename(filespecptr, p->BUFFER); |
|
/* if dir then append \????????.??? */ |
i = file_getattr(p->BUFFER); |
if ((i > 0) && (i & DOS_ATTR_DIR)) strcat(p->BUFFER, "\\????????.???"); |
|
if (findfirst(dta, p->BUFFER, DOS_ATTR_RO | DOS_ATTR_HID | DOS_ATTR_SYS | DOS_ATTR_DIR | DOS_ATTR_ARC) != 0) return(-1); |
|
outputnl(dta->fname); |
|
while (findnext(dta) == 0) outputnl(dta->fname); |