Мгновенный вывод символа в позицию консоли

mspSUSE

New member
20.07.2009
3
0
#1
Посмотрите, пожалуйста, код,
он компилируется на TDM GCC,
но к сожалению результирующий файл не работает под Windows 7, 8, 32-64 bits
Помогите, пожалуйста, разобраться.
Код:
		  # include <stdio.h>
		  # include <conio.h>
		  # include <iostream>
		  # include <windows.h>
 
		  void print_xy (
						  int x, // абсцисса
						  int y, // ордината
						  char s, // cимвол
						  int color, // цвет символа
						  int fon // фон символа
						)
		  {
			// Этот код компилируется под Borland C++ 3.1 и
			// и программа работает под Windows 7 32 bit
			
			// Но этот код хотя и компилируется под TDM-GCC Dev-C++
			// но, увы, не работает под Windows 7 32 bit -
			// зависает с ошибкой :-(
			
			// Код нужен, для того, чтобы постоянно выводить
			// текущее время в опредленные позиции консоли во
			// во время работы текстового редактора
  
			/*
			  // MSP, 15.01.99, 10:54
			  молниеносный вывод символа на экран, через видеопамять.
			  модель памяти Large
 
			  Иногда бывает удобно или необходимо изменить модель памяти
			  для отдельных функций или данных. Это изменение можно
			  произвести с помощью модификаторов near, far и huge.
 
			  char far *
				data;
 
			  Указатель data теперь является дальним указателем независимо
			  от того, какая модель памяти указана компилятору при обработке
			  программы.
			  Я указал Compact. А для data будет работать Large.
			*/
 
			/*
			  MSP, 23.03.15, 21:46
			  По каким адресам располагается окно консоли?
			  Это правильный код?
			*/
			
			char far * v_mem = (char far *) 0xb8000000L;
			v_mem += (x - 1) * 2 + (y - 1) * 160;
			* v_mem ++ = s;
			* v_mem = color + (fon * 16);
 
		  } // end void print_xy (int, int, char, int, int)
		  
		  using namespace std;
 
		  int main ()
		  {
			system ("cls");
			
			// молниеносный вывод белого символа на синем фоне символа (!)
			// в позицию (10, 8) экрана консоли,
			// при молниеносном выводе
			// курсор отключен, его не видно, он не мигает
			print_xy (10, 8, '!', 15, 1);
			
			getch ();
			
			return 0;
		  }
 
R

rrrFer

#2
Стандартными средствами это сделать невозможно. Такой код не может быть кроссплатформенным.

Используйте библиотеку curses - ее авторы реализовали различные версии для различных операционных систем, там решена эта и другие задачи (например вывод цветного текста в консоль).
 
Симпатии: Понравилось mspSUSE

mspSUSE

New member
20.07.2009
3
0
#3
Стандартными средствами это сделать невозможно. Такой код не может быть кроссплатформенным.

Используйте библиотеку curses - ее авторы реализовали различные версии для различных операционных систем, там решена эта и другие задачи (например вывод цветного текста в консоль).

Большое спасибо!