Russian Qt Forum
Ноябрь 23, 2024, 00:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: не работает curses  (Прочитано 7142 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Октябрь 14, 2009, 21:55 »

Добрый вечер

В принципе от меня на Линукс хотят задачу с командной строкой. Думал - ну не совсем уж, хоть что-то надо сделать в простом текстовом окне, чтобы курсор бегал и можно было затирать что написано (как был CRT в  Pascal  Улыбающийся). Почитал, вроде для этого в Линукс есть curses. Хорошо, скопировал пример (см. ниже), подключил lib. Все выполняется, можно отлаживать, ловит "q". Но НИКАКИХ окон не появляется  Плачущий Что я делаю не так? Если что-то неправильно понял - поправьте. Или может это проблемы  конкретного Линукс (Red Hat)?.

Спасибо

Код:
#include <stdio.h>
#include <sys/types.h>
#include <curses.h>
#include <unistd.h>
#include <time.h>

int current_getch;
int doloop = 1;
static WINDOW *mainwnd;
static WINDOW *screen;
WINDOW *my_win;


int now_sec, now_min, now_hour, now_day, now_wday, now_month, now_year;

time_t now;

struct tm *now_tm;



void screen_init(void)
{
   mainwnd = initscr();
   noecho();
   cbreak();
   nodelay(mainwnd, TRUE);
   refresh(); // 1)
   wrefresh(mainwnd);
   screen = newwin(13, 27, 1, 1);
   box(screen, ACS_VLINE, ACS_HLINE);
}

static void update_display(void)
{
   curs_set(0);
   mvwprintw(screen,1,1,"-------- HEADER --------");
   mvwprintw(screen,3,6,"TIME: %d:%d:%d", now_hour, now_min, now_sec);
   mvwprintw(screen,5,6,"DATE: %d-%d-%d", now_day, now_month, now_year);
   mvwprintw(screen,7,6,"PRESS q TO END");
   mvwprintw(screen,10,1,"-------- FOOTER --------");
   wrefresh(screen);
   refresh();
}

void screen_end(void)
{
   endwin();
}

void maketime(void)
{
// Get the current date/time

now = time (NULL);
now_tm = localtime (&now);
now_sec = now_tm->tm_sec;
now_min = now_tm->tm_min;
now_hour = now_tm->tm_hour;
now_day = now_tm->tm_mday;
now_wday = now_tm->tm_wday;
now_month = now_tm->tm_mon + 1;
now_year = now_tm->tm_year + 1900;
}

int main(void)
{
   screen_init();
   while (doloop) {
      current_getch = getch();
      if (current_getch == 113) {
         doloop = 0;
      }
      maketime();
      update_display();
      sleep(1);
   }
   screen_end();
   printf("TEST ENDS\n");
   return 0;
}
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Октябрь 15, 2009, 22:45 »

ncurces создает только область на экране со своей (вроде) системой координат. Всю отрисовку этой области берет на себя программист. Это не недоделка библиотеки, а фича, тк своя отрисовка пишется минут за 15
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Октябрь 16, 2009, 02:18 »

"Разгуглил" Улыбающийся Это баг в Eclipse который "не имеет эмуляции терминала", еще не зафиксирован. Я понял и вижу что при запуске из Terminal появляется текст, я могу двигать курсор и.т.п. Но в консоли отладчика ничего этого нет и могу только ввести что-то (почему-то зелеными буквами  Плачущий)
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Октябрь 16, 2009, 13:05 »

а, то есть даже текста не было?)
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Октябрь 16, 2009, 13:41 »

а, то есть даже текста не было?)
Не было, функции curses не возвращают никаких ошибок но на консоли пусто
Записан
Tonal
Гость
« Ответ #5 : Октябрь 19, 2009, 07:55 »

Вроде твоим запросам удавлетворяет библиотека readline
Или какой-нибудь из её клонов.

Курсес - это уже полнометражный текстовый интерфейс, с окошками, меню, диалогами. Улыбающийся
Его аналог из турбо-паскаля - TurboVision.
Записан
BRE
Гость
« Ответ #6 : Октябрь 19, 2009, 08:02 »

Его аналог из турбо-паскаля - TurboVision.
[off]
Почему только для паскаля?  Улыбающийся
TurboVision шел с Borland C++ 3.1. Очень не плохая вещь была.
[/off]
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Октябрь 19, 2009, 09:09 »

[off]
Почему только для паскаля?  Улыбающийся
TurboVision шел с Borland C++ 3.1. Очень не плохая вещь была.
[/off]
TurboVision я уже не застал. А вот Turbo Professional - классная была библиотека
Записан
Tonal
Гость
« Ответ #8 : Октябрь 19, 2009, 09:48 »

2 BRE Это да. Причём в он там был до Borland C++ 4.5, пока была поддержка доса. А в поскалях - до 7ки.
А вот Turbo Professional появилась раньше TV - я её ещё на паскале 5-ом юзал. Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.093 секунд. Запросов: 23.