Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2011, 19:45   #1
templton
 
Регистрация: 19.01.2011
Сообщений: 7
По умолчанию Работа с клавиатурой посредством dos.h - geninterrupt

Здравствуйте, уважаемые программисты. Подскажите в чем проблема. Вывожу рисунок посредством команды dos в языке turbo c. Необходимо зациклить вывод картинки до нажатия клаши esc. При нажатии стрелки вправво выполнить некую другую команду.
Короче, надо обработать нажатые символы на клавиатуре, но без подтвердения клавишей enter.
Вот, что получилось у меня. Жирным большим шрифтом выделил мое зацикливание, но оно требует подтверждения клавишей enter.

Код:
#include <math.h>
#include <stdio.h>
#include <dos.h>
#include <bios.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

/*“бв**®ўЄ* Ја*дЁзҐбЄ®Ј® ०Ё¬**/
void set_mode(int mode)
  {
    _AH=0x00;
    _AL=mode;
    geninterrupt(0x10);
  }

/*“бв**®ўЄ* Єгаб®а**/
   void goto_xy(int x, int y)
   {
      _AH=0x02;
      _DH=y;
      _DL=x;
      geninterrupt(0x10);
   }

/*ЏҐз*вм бЁ¬ў®«**/
   void print_symbol(char str, char atr)
   {
      _AH=0x09;
      _AL=str;
      _CX=1;
      _BL=atr;
      geninterrupt(0x10);
   }

/*‚лў®¤ ЇЁЄбҐ«п x,y*/
   void paint_pixel(int x, int y, int color)
   {
      _AH=0x0C;
      _AL=color;
      _CX=x;
      _DX=y;
      geninterrupt(0x10);
   }

/*Їа®аЁб®ўЄ* «Ё*Ё©*/
  void paint_line(int x1,int y1, int x2, int y2, int color)
  {
    int x;
    int y;
    for (x=x1;x<=x2;x=x+1)
      {
	if (x2==x1) x1=0.1;
	y=(abs(y2-y1))*(abs(x-x1))/(abs(x2-x1))+y1;
	paint_pixel(x,y,color);
      }
  }



/*Їа®аЁб®ўЄ* «Ё*Ё©*/
  void paint_line_x(int x1,int y1, int x2, int y2, int color)
  {
    int x;
    int y;
    int p;
    if (x2<=x1)
	{
	  p=x1;x1=x2;x2=p;
	  p=y1;y1=y2;y2=p;
	}
    for (x=x1;x<=x2;x=x+1)
      {
	y=(y2-y1)*(x-x1)/(x2-x1)+y1;
	paint_pixel(x,y,color);
      }
  }

  void paint_line_y(int x1, int y1, int x2, int y2, int color)
  {
    int x;int y;
    if (y2<=y1)
	{
	  x=y1;y1=y2;y2=x;
	  x=x1;x1=x2;x2=x;
	}
    for (y=y1;y<=y2;y++)
      {
	x=(y-y1)*(x2-x1)/(y2-y1)+x1;
	paint_pixel(x,y,color);
      }
  }


   /*®вбвгЇ ®в Єа*Ґў нЄа****/
   int shiftx=10;
   int shifty=10;
   /*‡*¬Ґ¤«Ґ*ЁҐ бЄ®а®бвЁ*/
   int stop=5000;

   int a[10][10][2];
   int obh[20];
   int x1,y1,x2,y2;
   int i,j,k,t;




main()
{
union REGS in, rr;
set_mode(19);



for (;;)
{
rr.h.ah=1;

  t=1;
  for (i=1;i<=7;i++)
  {
   t=1;
    for (j=1;j<=9;j++)
      {
	  x1=a[i][obh[t]][1];y1=a[i][obh[t]][2];
	  x2=a[i][obh[t+1]][1];y2=a[i][obh[t+1]][2];
	  paint_line_x(x1,y1,x2,y2,7);
	  paint_line_y(x1,y1,x2,y2,7);

	t=t+2;


	  if ((j==6) && (i==4))
	      {
		j=20;
		t=t+2;
		x1=a[i][1][1];y1=a[i][1][2];
		x2=a[i][4][1];y2=a[i][4][2];
		paint_line_x(x1,y1,x2,y2,7);
		paint_line_y(x1,y1,x2,y2,7);
	      }

      }


   delay(30000);
   t=1;
    for (j=1;j<=9;j++)
      {
	  x1=a[i][obh[t]][1];y1=a[i][obh[t]][2];
	  x2=a[i][obh[t+1]][1];y2=a[i][obh[t+1]][2];
	  paint_line_x(x1,y1,x2,y2,0);
	  paint_line_y(x1,y1,x2,y2,0);

	t=t+2;


	  if ((j==6) && (i==4))
	      {
		j=20;
		t=t+2;
		x1=a[i][1][1];y1=a[i][1][2];
		x2=a[i][4][1];y2=a[i][4][2];
		paint_line_x(x1,y1,x2,y2,0);
		paint_line_y(x1,y1,x2,y2,0);
	      }

      }



    }
intdos(&rr,&rr);
if (rr.h.al==27) break;

}


}
P.s. Более говенного языка, чем си этот в жизни не видел и не слышал. Доходило до того, что меняю пару строк в этом файле и картинка выводиться перестает. Начинаю через пару часов биться головой о стену, перенабираю вручную всеь код - работает.
Или задам массив а[7][7][2] - хрен, не работает, хотя использую именно столько данных, Увеличиваю размерность - все начинает работать. Причем переставл работать массив obh[], который вообще никаким боком... Короче, уважуха всем тем, кто это дерьмо под названием си увеет разобрать!

Последний раз редактировалось Stilet; 03.04.2011 в 19:54.
templton вне форума Ответить с цитированием
Старый 03.04.2011, 19:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Короче, надо обработать нажатые символы на клавиатуре, но без подтвердения клавишей enter.
А про функцию kbhit() из conio.h ты ничего не слышал?
Цитата:
Более говенного языка, чем си этот в жизни не видел и не слышал.
Ну все... Ща тебя местные профи-с++ с асфальтом смешают ))))
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.04.2011, 09:12   #3
templton
 
Регистрация: 19.01.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А про функцию kbhit() из conio.h ты ничего не слышал?

Ну все... Ща тебя местные профи-с++ с асфальтом смешают ))))
Большое спасибо за ответ.
Задача простая, но мозг вынесла основательно. Вот то ли дело Pascal - все просто и понятно, куча помогающих функций, а главное имена функций нормальные. writeln - сразу все понятно. cout - и что, откуда это и куда? cin - аналогично. Когда прикнешь к нему, конечно, все кажется естественно, но осваивать pascal в 1000 раз проще, чем си.
Интересно, о чем думали основатели си, придумывая оператор cin? Олицетворение вечности ) Что бы он вообще мог означать? Причем в английском языке такого слова нет. В остальных, скорее всего тоже. Вот что к чему назвать оператор абракадаброй. Назвали бы тогда уж fignafig>>[переменная] - то же самое
templton вне форума Ответить с цитированием
Старый 06.04.2011, 09:18   #4
templton
 
Регистрация: 19.01.2011
Сообщений: 7
По умолчанию

Во, дошло.
cin - Console input !!!
cout - console output !!!
templton вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с клавиатурой xdall Общие вопросы Delphi 8 09.12.2010 15:36
Работа с клавиатурой! FartNick Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 11.10.2010 17:20
работа с клавиатурой progN Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 30.04.2010 17:22
Работа с клавиатурой в С++ Matr1x C++ Builder 5 27.01.2010 22:56
Работа с клавиатурой АлексейМк Общие вопросы C/C++ 1 05.08.2009 01:27