Текущий каталог в DOSBox [Необязательно: Использование TURBO C] - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу выполнить команду в указанном каталоге c и затем вернуться обратно. (Для этого есть причина [допустимость параметров ...]).

Я пытался сделать это в пакетном файле для DOSBox ...

@echo off
cd>cd.cd
cd %mypath%
dosomething 1 2 3
::I am not sure....
cd (type cd.cd) 

%CD%, %dI, FOR l oop в DOSBox ничего не работает ...

Я написал C программу, но не смог найти функцию, которая возвращает текущий каталог для TURBO C 16-бит. ..

Может кто-нибудь помочь мне с этим?

Ответы [ 3 ]

2 голосов
/ 13 февраля 2020

%CD% - это переменная в Windows cmd , поэтому ее нельзя использовать в MS-DOS. Вы можете обойти это, сохранив текущий вывод каталога из команды cd без каких-либо параметров в переменную, перенаправив вывод команды в файл, а затем прочитать файл с диска

  • Подготовьте файл, содержащий только @set cd= без новых строк. Его можно создать в DOS, нажав Ctrl + Z , затем Введите во время работы COPY CON. Давайте назовем его init.txt
  • Затем каждый раз, когда вы хотите получить текущий каталог, запускайте

    cd >cd.txt
    copy init.txt+cd.txt setcd.bat
    setcd
    
  • Последняя команда сохранит текущий каталог в %CD% переменная

Get current dir

1 голос
/ 13 февраля 2020

Чтобы получить текущий каталог программно из Turbo C, вам нужно прочитать текущую структуру каталогов (CDS) . Текущий каталог - это первое 67-байтовое поле, содержащее строку с нулевым символом в конце

. Чтобы получить адрес первого CDS, вы используете функцию 52h из DOS int 21h (установите AH = 52h). Следующие CDS можно получить, добавив смещение к первому адресу. Для получения дополнительной информации читайте

0 голосов
/ 13 февраля 2020
  1. Метод команды (первый ответ @ phuclv) (Недостаток: необходимо сохранить постоянный файл)

  2. Метод сборки (первый ответ @ phuclv) (Недостаток: я не могу найти какой-либо способ выполнять системные вызовы в сборке, было бы замечательно, если бы кто-то мог предоставить пример и попросить какого-то привилегированного пользователя отредактировать этот ответ, чтобы удалить эту информацию)

  3. Метод TURBO C (Так как я в любом случае писал код C90, я просто использовал способ, которым я все равно собирался .)

Вот пример кода C90, который можно использовать для получения и выполнения некоторой операции в TURBOC3:

#include<stdio.h>
//#include<string.h>

void main()
{

  char path[128];
  system("cd>__p_");
  fscanf(fopen("__p_","r"),"%[^\n]",path);
  remove("__p_");

  //path variable/array/pointer contains your current path.

  //printf(path);

  //strcat(command,path); //char command[128]="cd ";
  //system(command); 

}
...