Subversion Repositories SvarDOS

Compare Revisions

Ignore whitespace Rev 416 → Rev 417

/svarcom/trunk/cmd/dir.c
32,7 → 32,7
static int cmd_dir(struct cmd_funcparam *p) {
const char *filespecptr = NULL;
struct DTA *dta = (void *)0x80; /* set DTA to its default location at 80h in PSP */
int i;
unsigned short i;
unsigned short availrows; /* counter of available rows on display (used for /P) */
#define DIR_FLAG_PAUSE 1
#define DIR_FLAG_WIDE 2
109,13 → 109,21
 
if (filespecptr == NULL) filespecptr = ".";
 
{
unsigned short r = file_truename(filespecptr, p->BUFFER);
if (r != 0) {
outputnl(doserr(r));
return(-1);
/* special case: "DIR drive:" (truename() fails on "C:" under MS-DOS 6.0) */
if ((filespecptr[0] != 0) && (filespecptr[1] == ':') && (filespecptr[2] == 0)) {
if ((filespecptr[0] >= 'a') && (filespecptr[0] <= 'z')) {
p->BUFFER[0] = filespecptr[0] - ('a' - 1);
} else {
p->BUFFER[0] = filespecptr[0] - ('A' - 1);
}
i = curpathfordrv(p->BUFFER, p->BUFFER[0]);
} else {
i = file_truename(filespecptr, p->BUFFER);
}
if (i != 0) {
outputnl(doserr(i));
return(-1);
}
 
if ((flags & DIR_FLAG_BARE) == 0) {
unsigned char drv = p->BUFFER[0];
133,12 → 141,18
outputnl("");
}
 
/* if dir then append \????????.??? */
i = file_getattr(p->BUFFER);
if ((i > 0) && (i & DOS_ATTR_DIR)) strcat(p->BUFFER, "\\????????.???");
/* if dir: append a backslash (also get its len) */
i = path_appendbkslash_if_dir(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);
/* if ends with a \ then append ????????.??? */
if (p->BUFFER[i - 1] == '\\') strcat(p->BUFFER, "????????.???");
 
i = findfirst(dta, p->BUFFER, DOS_ATTR_RO | DOS_ATTR_HID | DOS_ATTR_SYS | DOS_ATTR_DIR | DOS_ATTR_ARC);
if (i != 0) {
outputnl(doserr(i));
return(-1);
}
 
availrows = screen_getheight();
 
outputnl(dta->fname);