Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Программа терминала на С/С++


Автор: ssp 14.9.2005, 08:10
требует реализовать простенький терминал для компьютера для доступа к нему через последовательный порт. Не хочется изобретать велосипед, может кто то видел библиотеку для работы с ANSI символами? Т.е. нарисовать рамку, вывести строку в нужные координаты и т.д.

Автор: Dreamer_0x01 14.9.2005, 08:32
Не очень понял...
Порт - это порт. ANSI-символы - это ANSI-символы. Что именно?

Автор: ssp 14.9.2005, 08:37
библиотека для программирования текстового GUI используя ANSI - символы.

Автор: Romikgy 14.9.2005, 08:37
Мож это поможет
http://vingrad.ru/CPP-FAQ-002452
Добавлено @ 08:38
Цитата(ssp @ 14.9.2005, 08:37)
библиотека для программирования текстового GUI используя ANSI - символы.

WinAPI OemToChar & CharToOem

Автор: ssp 14.9.2005, 08:45
2Romikgy с портом проблем нет. Это не под Windows. Если подробнее есть контроллер, нужно выводить куда-то диагностические сообщения. т.е. функция printf выводит на указанный порт. Но так смотреть сообщения сложно (т.к. процесс циклический), смотрится все это в ГиперТерминале. Вот и хотелось бы с помощью ESC символов набросать простой GUI.
Другими словами, что б была функция outto(int x, int y, char *format, ...);

Автор: Romikgy 14.9.2005, 09:02
Цитата(ssp @ 14.9.2005, 08:45)
Вот и хотелось бы с помощью ESC символов набросать простой GUI.

Вот это я не понял smile
Цитата(ssp @ 14.9.2005, 08:45)
Другими словами, что б была функция outto(int x, int y, char *format, ...);

что есть x,y,format , и это все должно идти от компа в контроллер?

Автор: Dreamer_0x01 14.9.2005, 09:09
не очень понял, чем же сложно смотреть.Я вот например тоже программлю на контроллеры. Так терминалкой все на ура сотрится. Правда, не Гипер терминалом, а другими более удобными. Я например пользуюсь Advanced Serial Port Monitor. Единственная проблема с этой прогой - ее шареварность. Но если хочешь, этот недостаток исправляется ;)
Сложность работы с терминалкой пожалуй может возникнуть при условии, что данные у тебя идут слишком в большом количестве и не помещаются на экран, тогда действительно придется писать свою "тестилку" - виндовую программу-окошко, в контролах которого отобразить требуемые тебе данные, но без всяких извращений типа "putto" и т.д, хотя если хочешь действительно что-то подобное терминалке сделать, то и это можно, но нужно ли?
Опять же, вводимые тобой данные удобнее не из командной строки получать, как в терминалке, а создать например свои кнопки на форме, по нажатию на которые в порт будет идти нужный пакет для твоего устройства.
Я например сейчас как раз занимаюсь тем, что пишу прграмму-терминалку для общения с прибором. Но у меня достаточно сложный прибор, поэтому кроме общения как такогого она еще и с данными уйму тучу операций делает. Штуку эту делаю на MFC, но с портом работаю в отдельном потоке на WInAPI.
Могу дать куски когда, конфигурирующие порт и посылающие/принимающие в него данные, а поместить данные в свои контролы - думаю сможешь и сам ;)

А по портам вот ресурс неплохой, я изучал понему. Хоть и дельфевый, ну винАпи он и в Африке винАпа, функции-то и параметры те же ;)

http://www.megalib.com/books/461/mastering/ports1.htm

Автор: ssp 14.9.2005, 09:14
Romikgy ну как работают терминальные программы под Linux? там же все рисуется на ESC - последовательностях. Под ДОСом был драйвер ANSI.sys для отображения комманд... Типа BBS...

Цитата(Romikgy @ 14.9.2005, 11:02)
что есть x,y,format , и это все должно идти от компа в контроллер?

x, y координаты куда вывести текст. Это просто к примеру...

Автор: Mayk 14.9.2005, 09:21
Цитата(ssp @ 14.9.2005, 12:45)
outto(int x, int y, char *format, ...);

ээ.. а что самому мешает написать что-то типа
Код

int outto(int x,y, const  char* fmt, ...)
{
    va_list lst;
    va_start(lst,fmt);
    printf("\x1b[%d,%d;",y,x); 
    vprintf(fmt, lst);
    va_end(lst);
}

Коды ANSI находятся с полпинка через гугль.

Автор: Romikgy 14.9.2005, 09:29
Вот это до сих пор понять не могу
Цитата(ssp @ 14.9.2005, 09:14)
рисуется на ESC

причем здеся эскейп и рисуется?
Текст шлешь в русской кодировке? или англ. буквами?
С ббс не пришлось разбиратся smile но догадывають , что типа используются флаги , для начала сообщения и его конца.
И второе приложение будет какое консоль или гуи? Если гуи то непонятно (хотя можно и рисовать так) зачем х,у , выводить в компонент типа листбокс и вперед.

ЗЫ и вооще прикольно в ветке по винапи говорить
Цитата(ssp @ 14.9.2005, 09:14)
ну как работают терминальные программы под Linux

smile

Автор: ssp 14.9.2005, 09:32
Mayk мешает лень. Хочется взять готовое smile

Автор: Dreamer_0x01 14.9.2005, 09:43
А устройство слабо перепрограмить, чтоб оно данные выводило "правильно"? ;)
например
"param 1 = 0.00 param2 ="abcd" .....Param N="lalalala" \r"

Обрати внимание на символ 0x0D в конце строки. Тогда если ты такое сообщение будешь слать терминалке допустим несколько раз в секунду - ты будешь видеть в терминалке эту строку...
А можно еще и многострочный вывод сделать и соответствующе терминалку поднастроить...

Автор: ssp 14.9.2005, 09:51
Dreamer_0x01 зачем что то поднастраивать... Есть нормальные терминалы. Проще esc-последовательности.
а что я увижу при N=20 и ширине 40 ?

Автор: Romikgy 14.9.2005, 10:58
Дя.... так зачем здесь вопрос задавать если хоцца готовое и уже сделанное? smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)