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

Ваш аккаунт

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

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

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

Прерывания, ввод текст до ввода символа $

70K
18 апреля 2011 года
Павел Галкин
2 / / 18.04.2011
Выручайте, третий день не могу смекнуть..

Задание такое: С помощью прерываний ввести строку символов, которая будет показываться, пока не введем $.
Проделать с Эхо, и без.


Когда текст вбит в саму программу, то это конечно легко.. Но текст надо вводить с клавиатуры.. Я уже циклами себе мозги расплавил..
Обязательное условие: использование лишь библиотеки dos.h

Заранее благодарю.
316
19 апреля 2011 года
Alm3n
889 / / 29.05.2009
какой язык и компилятор?
введенная строка выведется после ввода символа $?
70K
19 апреля 2011 года
Павел Галкин
2 / / 18.04.2011
C++, TurboC3.0
Строка отображается и программа прерывается после ввода $.

Сейчас до меня доходит, что если в программе будет $, то просто маяком можно перейти в конец программы..
А эхо как я понял должен дважды выводить символ на экран через _AH=2.
Хотя в прерываниях я не силён, программирование не моя специальность.

Дали нам один пример:
{ char far *ss="qwerty$";
_AH=9;
_DS=FP_SEG(ss);
_DX=FP_OFF(ss);
geninterrupt(0x21);
}

Принцип работы этих команд даже не объяснено, вычитывайте сами, разбирайтесь и пишите программу. По-этому набросал много, а толку нет.
316
19 апреля 2011 года
Alm3n
889 / / 29.05.2009
ss - адрес строки.
в ah - номер функции. 09 - вывод на экран.
в ds - адрес сегмента данных, где размещаются все строки.
в dx - адрес самой строки.
geninterrupt(0x21) - вызов 21го прерывания.
строки, выводимые таким образом должны заканчиваться знаком '$', он не выводится. подробнее можно прочесть тут
41K
19 апреля 2011 года
kisssko
108 / / 28.10.2010
Вот рабочий вариант! ;)

Код:
#include <dos.h>

typedef unsigned char uchar;

#define BUFSIZE 32

uchar      str_buf[BUFSIZE];
uchar far *s_hint_in  = "\r\nВведите строку: $";
uchar far *s_hint_out = "\r\nВы ввели: $";
uchar far *s_empty    = "...а ничего не ввели!$";

uchar far *s_eol      = "\r\n$";
uchar far *s_bell     = "\x7$";
uchar far *s_bs       = "\x8 \x8$";
uchar far *s_delrc    = " \x8$";
uchar far *s_space    = " $";

uchar dos_charin()
{
 _AH=0x01;
 geninterrupt(0x21);
 return (uchar)_AL;
}

void dos_strout(uchar far *buf)
{
 _AH=0x09;
 _DS=FP_SEG(buf);
 _DX=FP_OFF(buf);
 geninterrupt(0x21);
}

int dos_strin(uchar *buf, int buf_size)
{
 uchar sym=0;
 int charcount=0;
 do {
     sym=dos_charin();
     if(sym==8)
      {
       if(charcount>0) {dos_strout(s_delrc);charcount--;continue;}
       else {dos_strout(s_space);continue;}
      }
     if(sym==0){continue;}
     if((charcount==(buf_size-1))&&(sym!=(uchar)'$'))
      {dos_strout(s_bell);dos_strout(s_bs);continue;}
     buf[charcount++]=sym;
    } while(sym!=(uchar)'$');
 dos_strout(s_bs);
 return --charcount;
}


int main()
{
 unsigned int entered_chars=0;
 dos_strout(s_hint_in);
 entered_chars=dos_strin(str_buf, BUFSIZE);
 dos_strout(s_eol);
 dos_strout(s_hint_out);
 if(entered_chars>0)
  {dos_strout((uchar far*)str_buf);}
 else
  {dos_strout(s_empty);}
 dos_strout(s_eol);
 return 0;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог