Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как определить "ответ" програмы ДОСу?

7.2K
30 января 2005 года
MFOB
40 / / 25.01.2005
Подскажите пожалуста!
Как мне "определить" сообщение этои программы после ее запуска, другой моей прогой??

 
Код:
USES crt,dos;
VAR
str:string[10];
BEGIN
str:=PARAMSTR(1);
IF str='X' THEN WRITELN('WELCOM!!!')
           ELSE WRITELN('Go home!!!');

END.
9.8K
31 января 2005 года
Alex_Boo
2 / / 31.01.2005
Цитата:
Originally posted by MFOB
Подскажите пожалуста!
Как мне "определить" сообщение этои программы после ее запуска, другой моей прогой??

 
Код:
USES crt,dos;
VAR
str:string[10];
BEGIN
str:=PARAMSTR(1);
IF str='X' THEN WRITELN('WELCOM!!!')
           ELSE WRITELN('Go home!!!');

END.



Если ты хочешь чтобы это саабчение появлялось во время работы другой проги то просто можешь сделать эту прогу с сообщением как модуль и вызывать его из базовой проги, или запускать ее командой EXEC.

7.2K
31 января 2005 года
MFOB
40 / / 25.01.2005
Цитата:
Originally posted by Alex_Boo
... или запускать ее командой EXEC.


Нет так я уже сделал.
Я хотел бы распознать или как нибудь перехватить ее вывод на экран,
Ну например Halt; возращает 0 ,
а вот Halt(1); возвращает 1.
И переменной DOS >errorlever< узнаем резульат завершения проги. И вот тоже самое только со строкой??

301
31 января 2005 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by MFOB

Нет так я уже сделал.
Я хотел бы распознать или как нибудь перехватить ее вывод на экран,
Ну например Halt; возращает 0 ,
а вот Halt(1); возвращает 1.
И переменной DOS >errorlever< узнаем резульат завершения проги. И вот тоже самое только со строкой??


В си есть функция gettext. Она копирует кусок экранного буфера. Ее аналогия должна быть и в пасе. Либо читай экранный буфер по адресу $B8000000. Там нечетные биты - символы, а четные - их цвета.

7.2K
31 января 2005 года
MFOB
40 / / 25.01.2005
lord Kelvin Спасиб буду искать!
7.2K
09 февраля 2005 года
MFOB
40 / / 25.01.2005
Цитата:
Originally posted by lord Kelvin

В си есть функция gettext. Она копирует кусок экранного буфера. Ее аналогия должна быть и в пасе. Либо читай экранный буфер по адресу $B8000000.


Ммм-да чтото не находится в Pascal'e function GetXXXX;
А может можно указателями там какими сослаться?? - только я вот не помню "сегмент:смещение" буфера.

302
09 февраля 2005 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by MFOB

Ммм-да чтото не находится в Pascal'e function GetXXXX;
А может можно указателями там какими сослаться?? - только я вот не помню "сегмент:смещение" буфера.


В паскале есть массивы Mem и MemW, для чтения/записи байтов и слов соответственно.

7.2K
16 февраля 2005 года
MFOB
40 / / 25.01.2005
Цитата:
Originally posted by Sagittarius

В паскале есть массивы Mem и MemW, для чтения/записи байтов и слов соответственно.



MEM - это просто сказка!!!(Все теперь работает)

6.2K
21 февраля 2005 года
prosto
34 / / 12.07.2004
Цитата:
Originally posted by MFOB


MEM - это просто сказка!!!(Все теперь работает)



Еще в паскале есть прекрасная вещь которой нет в си это Absolute
которая связывает переменную с областю памяти
которую пропишеш.
(С помощю неё я скриншоты в дос текстовых екранов делал)
Правда это для текстового режима 03(80х25). ;)

TYPE EKRAN=ARRAY[1..25,1..80,1..2] OF BYTE;
EKRANC=ARRAY[1..25,1..80,1..2] OF CHAR;
VAR
SCR:EKRAN ABSOLUTE $B800:0000;
SCRC:EKRANC ABSOLUTE $B800:0000;
ATRIBUT:BYTE;

{Узнаём атрибут}
FUNCTION ATTR(X,Y:SHORTINT):byte;
BEGIN
ATTR:=SCR[Y,X,2];
END;

(*Узнаём символ*)
FUNCTION SCREEN(X,Y:SHORTINT):byte;
BEGIN
SCREEN:=SCR[Y,X,1];
END;

301
21 февраля 2005 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by prosto


Еще в паскале есть прекрасная вещь которой нет в си это Absolute
<...>


...которой нет в твоей голове, а не в си.=) Ты наверно просто забыл, что в си можно сделать указатель на любое место в памяти.
P.S. Как неудобно-то вышло.=)

259
21 февраля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by prosto


Еще в паскале есть прекрасная вещь которой нет в си это Absolute


Зато в С есть:
malloc();calloc();galloc();

ЗЫ: А в С++ еще new забыл.

259
21 февраля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by AlexandrVSmirno

Зато в С есть:
malloc();calloc();galloc();

ЗЫ: А в С++ еще new забыл.


Если читать строку из области экрана, то встает вопрос какую? А он не решеается. Проще всего создать массив ответов первой проги и в RetCode возвращать индекс из этого массива.

6.2K
22 февраля 2005 года
prosto
34 / / 12.07.2004
Цитата:
Originally posted by lord Kelvin

...которой нет в твоей голове, а не в си.=) Ты наверно просто забыл, что в си можно сделать указатель на любое место в памяти.
P.S. Как неудобно-то вышло.=)



Ну так и в паскале можно динамически с помощю указателей или в си тоже можна статически во время компиляции?

P.S. Как неудобно-то вышло.=) , да о голове-согласен :P

259
22 февраля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by prosto


Ну так и в паскале можно динамически с помощю указателей или в си тоже можна статически во время компиляции?


Догадайся с трех раз.

7.2K
27 февраля 2005 года
MFOB
40 / / 25.01.2005
Цитата:
Originally posted by prosto
Еще в паскале есть прекрасная вещь которой нет в си это Absolute


Насчет absolute?? ==>Почему программка не работает без нажатья клавиши?

Код:
USES CRT;
var
   pp:byte absolute $0040:$0017;
begin
    clrscr;
    writeln('Pressed Ctrl...':45);
    REPEAT
     pp:=pp or $70;delay(1200);
     pp:=pp AND $80;delay(1200);
    UNTIL KEYPRESSED;
end.
4.8K
28 февраля 2005 года
drish
14 / / 23.11.2003
Цитата:
$B8000000


Ты чего? B8000.

7.2K
01 марта 2005 года
MFOB
40 / / 25.01.2005
Цитата:
Originally posted by drish

Ты чего? B8000.


Неполнял???

4.8K
02 марта 2005 года
drish
14 / / 23.11.2003
Цитата:
Непонял???


Видеопамять лежит по адресу 0xb8000

7.2K
03 марта 2005 года
MFOB
40 / / 25.01.2005
Цитата:
Originally posted by drish

Видеопамять лежит по адресу 0xb8000



Да как бы это понятно, програмка о другом о индикаторах на клаве.
Но чего она не пашет без нажатья клавиши непонемаю.(по идеи должна)

4.8K
03 марта 2005 года
drish
14 / / 23.11.2003
Нет, разговор был не об этом :)
Цитата:
В си есть функция gettext. Она копирует кусок экранного буфера. Ее аналогия должна быть и в пасе. Либо читай экранный буфер по адресу $B8000000. Там нечетные биты - символы, а четные - их цвета.

6.2K
05 марта 2005 года
prosto
34 / / 12.07.2004
От немного оторвалса от работы.
Цитата:
Originally posted by drish
Нет, разговор был не об этом :)


Насчёт B8000 drish написал в линейной адресации реального режима где используэться 20 битный адрес.
Почемему не работает без нажатия клавиш, это просто, потому что клавиатуру обслуживает $9 прерывание и когда мы нажымаем клавишу визывается обработчик клавиатуры которий и запихывает байт с адреса $0040:$0017 в порт клавиатуры.

Попробуй явно вызвать $9

 
Код:
asm
int 9h
end;
7.2K
14 марта 2005 года
MFOB
40 / / 25.01.2005
Я уже и так и сяк..
Почему у меня ничего неполучается?
Код:
USES CRT;
const n=9200;
var
   pp:byte absolute $0040:$0017;
   i:integer;  r:byte;
begin
clrscr;
writeln('BEGINING...':45);
i:=1;
REPEAT
 pp:=pp or $70;
 asm;
  mov r,ah
  MOV Ah,$01
  int $09
  mov ah,r
 end;
 delay(n);
 pp:=pp AND $80;
 asm;
  mov r,ah
  MOV Ah,$01
  int $09
  mov ah,r
 end;
 delay(n);
 inc(i);
UNTIL i=100;
end.
6.2K
16 марта 2005 года
prosto
34 / / 12.07.2004
br />



может я чего не понял какой резултат ты хочеш от программы : чтоб лампочки замигали или реакцию на комбинационные клавиши.

7.2K
25 марта 2005 года
MFOB
40 / / 25.01.2005
И то и другое :)
Но вобще я планировал чтобы индикаторы
помигивали там раз в секунду или чуть быстрее.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог