Subversion Repositories SvarDOS

Rev

Rev 403 | Rev 420 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 403 Rev 417
Line 30... Line 30...
30
 */
30
 */
31
 
31
 
32
static int cmd_dir(struct cmd_funcparam *p) {
32
static int cmd_dir(struct cmd_funcparam *p) {
33
  const char *filespecptr = NULL;
33
  const char *filespecptr = NULL;
34
  struct DTA *dta = (void *)0x80; /* set DTA to its default location at 80h in PSP */
34
  struct DTA *dta = (void *)0x80; /* set DTA to its default location at 80h in PSP */
35
  int i;
35
  unsigned short i;
36
  unsigned short availrows;  /* counter of available rows on display (used for /P) */
36
  unsigned short availrows;  /* counter of available rows on display (used for /P) */
37
  #define DIR_FLAG_PAUSE  1
37
  #define DIR_FLAG_PAUSE  1
38
  #define DIR_FLAG_WIDE   2
38
  #define DIR_FLAG_WIDE   2
39
  #define DIR_FLAG_RECUR  4
39
  #define DIR_FLAG_RECUR  4
40
  #define DIR_FLAG_BARE   8
40
  #define DIR_FLAG_BARE   8
Line 107... Line 107...
107
    }
107
    }
108
  }
108
  }
109
 
109
 
110
  if (filespecptr == NULL) filespecptr = ".";
110
  if (filespecptr == NULL) filespecptr = ".";
111
 
111
 
112
  {
-
 
-
 
112
  /* special case: "DIR drive:" (truename() fails on "C:" under MS-DOS 6.0) */
113
    unsigned short r = file_truename(filespecptr, p->BUFFER);
113
  if ((filespecptr[0] != 0) && (filespecptr[1] == ':') && (filespecptr[2] == 0)) {
114
    if (r != 0) {
114
    if ((filespecptr[0] >= 'a') && (filespecptr[0] <= 'z')) {
115
      outputnl(doserr(r));
115
      p->BUFFER[0] = filespecptr[0] - ('a' - 1);
116
      return(-1);
116
    } else {
-
 
117
      p->BUFFER[0] = filespecptr[0] - ('A' - 1);
117
    }
118
    }
-
 
119
    i = curpathfordrv(p->BUFFER, p->BUFFER[0]);
-
 
120
  } else {
-
 
121
    i = file_truename(filespecptr, p->BUFFER);
-
 
122
  }
-
 
123
  if (i != 0) {
-
 
124
    outputnl(doserr(i));
-
 
125
    return(-1);
118
  }
126
  }
119
 
127
 
120
  if ((flags & DIR_FLAG_BARE) == 0) {
128
  if ((flags & DIR_FLAG_BARE) == 0) {
121
    unsigned char drv = p->BUFFER[0];
129
    unsigned char drv = p->BUFFER[0];
122
    char *buff2 = p->BUFFER + (BUFFER_SIZE / 2);
130
    char *buff2 = p->BUFFER + (BUFFER_SIZE / 2);
Line 131... Line 139...
131
    for (i = 0; buff2[i] != 0; i++) if (buff2[i] == '?') buff2[i] = 0;
139
    for (i = 0; buff2[i] != 0; i++) if (buff2[i] == '?') buff2[i] = 0;
132
    outputnl(buff2);
140
    outputnl(buff2);
133
    outputnl("");
141
    outputnl("");
134
  }
142
  }
135
 
143
 
136
  /* if dir then append \????????.??? */
144
  /* if dir: append a backslash (also get its len) */
137
  i = file_getattr(p->BUFFER);
145
  i = path_appendbkslash_if_dir(p->BUFFER);
138
  if ((i > 0) && (i & DOS_ATTR_DIR)) strcat(p->BUFFER, "\\????????.???");
-
 
139
 
146
 
-
 
147
  /* if ends with a \ then append ????????.??? */
-
 
148
  if (p->BUFFER[i - 1] == '\\') strcat(p->BUFFER, "????????.???");
-
 
149
 
140
  if (findfirst(dta, p->BUFFER, DOS_ATTR_RO | DOS_ATTR_HID | DOS_ATTR_SYS | DOS_ATTR_DIR | DOS_ATTR_ARC) != 0) return(-1);
150
  i = findfirst(dta, p->BUFFER, DOS_ATTR_RO | DOS_ATTR_HID | DOS_ATTR_SYS | DOS_ATTR_DIR | DOS_ATTR_ARC);
-
 
151
  if (i != 0) {
-
 
152
    outputnl(doserr(i));
-
 
153
    return(-1);
-
 
154
  }
141
 
155
 
142
  availrows = screen_getheight();
156
  availrows = screen_getheight();
143
 
157
 
144
  outputnl(dta->fname);
158
  outputnl(dta->fname);
145
  availrows--;
159
  availrows--;