Subversion Repositories SvarDOS

Rev

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

Rev 364 Rev 365
Line 102... Line 102...
102
  const struct CMD_ID *cmdptr;
102
  const struct CMD_ID *cmdptr;
103
  struct cmd_funcparam p;
103
  struct cmd_funcparam p;
104
  unsigned short argoffset;
104
  unsigned short argoffset;
105
  char cmdbuff[256];
105
  char cmdbuff[256];
106
 
106
 
-
 
107
  /* special case: is this a drive change? (like "E:") */
-
 
108
  if ((cmdline[0] != 0) && (cmdline[1] == ':') && ((cmdline[2] == ' ') || (cmdline[2] == 0))) {
-
 
109
    if (((cmdline[0] >= 'a') && (cmdline[0] <= 'z')) || ((cmdline[0] >= 'A') && (cmdline[0] <= 'Z'))) {
-
 
110
      unsigned char drive = cmdline[0];
-
 
111
      unsigned char curdrive = 0;
-
 
112
      if (drive >= 'a') {
-
 
113
        drive -= 'a';
-
 
114
      } else {
-
 
115
        drive -= 'A';
-
 
116
      }
-
 
117
      _asm {
-
 
118
        push ax
-
 
119
        push dx
-
 
120
        mov ah, 0x0e     /* DOS 1+ - SELECT DEFAULT DRIVE */
-
 
121
        mov dl, drive    /* DL = new default drive (00h = A:, 01h = B:, etc) */
-
 
122
        int 0x21
-
 
123
        mov ah, 0x19     /* DOS 1+ - GET CURRENT DRIVE */
-
 
124
        int 0x21
-
 
125
        mov curdrive, al /* cur drive (0=A, 1=B, etc) */
-
 
126
        pop dx
-
 
127
        pop ax
-
 
128
      }
-
 
129
      if (curdrive != drive) puts(doserr(0x0f));
-
 
130
      return(-1);
-
 
131
    }
-
 
132
  }
-
 
133
 
-
 
134
  /* try matching an internal command */
107
  cmdptr = cmd_match(cmdline, &argoffset);
135
  cmdptr = cmd_match(cmdline, &argoffset);
108
  if (cmdptr == NULL) return(-2); /* command is not recognized as internal */
136
  if (cmdptr == NULL) return(-2); /* command is not recognized as internal */
109
 
137
 
110
  /* printf("recognized internal command: '%s', tail of command at offset %u\r\n", cmdptr->cmd, argoffset); */
138
  /* printf("recognized internal command: '%s', tail of command at offset %u\r\n", cmdptr->cmd, argoffset); */
111
 
139