Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Простой консольный текстовый редактор на C  (Прочитано 15031 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Самір Гасимов

  • Автор темы
  • Участник
  • *
  • Сообщений: 210
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #15 : 25 Апреля 2013, 19:36:15 »
Тут pads?

ed_buf = newpad(MAX_ROWS, MAX_COLS);
win 7 pro ukr @ desktop (ASUS P5L-VM 1394, Intel Pentium D 3.00GHz, 2GB DDR2, SATA WD500GB, ASUS nVidia GeForce 210 Silent 1GB DDR3)

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #16 : 25 Апреля 2013, 19:40:10 »
Да.
Делюсь знаниями, но их у меня мало!

Оффлайн Самір Гасимов

  • Автор темы
  • Участник
  • *
  • Сообщений: 210
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #17 : 25 Апреля 2013, 20:23:17 »
Таки классная штука pads  :)
win 7 pro ukr @ desktop (ASUS P5L-VM 1394, Intel Pentium D 3.00GHz, 2GB DDR2, SATA WD500GB, ASUS nVidia GeForce 210 Silent 1GB DDR3)

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #18 : 26 Апреля 2013, 01:39:15 »
Ура! Наконец-то!
Исходник:
(Нажмите, чтобы показать/скрыть)
Результат работы программы:
(Нажмите, чтобы показать/скрыть)

Пользователь решил продолжить мысль 26 Апреля 2013, 11:48:09:
Конечно, это еще не редактор совсем, но первая из функций собственно редактирования
уже реализована.

Самір, отпишитесь, надо ли еще помочь c какими-то частями редактора?

Просто доделать всё за пару дней точно не смогу, а может, в каком-то конкретном месте
что-то требуется?
« Последнее редактирование: 26 Апреля 2013, 11:48:09 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн Самір Гасимов

  • Автор темы
  • Участник
  • *
  • Сообщений: 210
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #19 : 26 Апреля 2013, 22:09:32 »
Так не компилирует:
Код: (bash) [Выделить]
gcc -lncurses editorr.c -o editorr

Ошибка:
...
editorr.c:(.text+0x1a5): undefined reference to `stdscr'
editorr.c:(.text+0xABC): undefined reference to `wmove'
editorr.c:(.text+0xABC): undefined reference to `echo'
editorr.c:(.text+0xABC): undefined reference to `cbreak'
...
win 7 pro ukr @ desktop (ASUS P5L-VM 1394, Intel Pentium D 3.00GHz, 2GB DDR2, SATA WD500GB, ASUS nVidia GeForce 210 Silent 1GB DDR3)

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #20 : 26 Апреля 2013, 22:14:35 »
Щас проверю на другой системе. Возможно, у меня что-то когда-то давно
было установлено, а у вас — нет.

Напишите, какая у вас система. У меня сейчас — 10.04.

И еще покажите
Код: (bash) [Выделить]
dpkg --get-selections | grep curses
« Последнее редактирование: 26 Апреля 2013, 22:18:37 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн Самір Гасимов

  • Автор темы
  • Участник
  • *
  • Сообщений: 210
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #21 : 26 Апреля 2013, 22:29:39 »
У меня 12.10

Это в Geany:
Если щелкнуть "Compile":
gcc -lncurses -c "editorr.c" (in directory: /home/ubuntu/editorr)
Compilation finished successfully.
Если щелкнуть "Build":
gcc  -lncurses -o "editorr" "editorr.c" (in directory: /home/ubuntu/editorr)
/tmp/ccd5Rf2J.o: In function `main':
editorr.c:(.text+0x25): undefined reference to `initscr'
editorr.c:(.text+0x2a): undefined reference to `raw'
editorr.c:(.text+0x2f): undefined reference to `stdscr'
editorr.c:(.text+0x3f): undefined reference to `keypad'
editorr.c:(.text+0x44): undefined reference to `noecho'
editorr.c:(.text+0x88): undefined reference to `newpad'
editorr.c:(.text+0xc0): undefined reference to `wmove'
editorr.c:(.text+0xe4): undefined reference to `waddnstr'
editorr.c:(.text+0x13c): undefined reference to `stdscr'
editorr.c:(.text+0x144): undefined reference to `wrefresh'
editorr.c:(.text+0x179): undefined reference to `stdscr'
editorr.c:(.text+0x191): undefined reference to `wmove'
editorr.c:(.text+0x19b): undefined reference to `stdscr'
editorr.c:(.text+0x1b6): undefined reference to `waddnstr'
editorr.c:(.text+0x1f2): undefined reference to `prefresh'
editorr.c:(.text+0x1f7): undefined reference to `stdscr'
editorr.c:(.text+0x20f): undefined reference to `wmove'
editorr.c:(.text+0x214): undefined reference to `stdscr'
editorr.c:(.text+0x21c): undefined reference to `wgetch'
editorr.c:(.text+0x3ea): undefined reference to `wmove'
editorr.c:(.text+0x417): undefined reference to `waddnstr'
editorr.c:(.text+0x47a): undefined reference to `prefresh'
editorr.c:(.text+0x4af): undefined reference to `stdscr'
editorr.c:(.text+0x4c7): undefined reference to `wmove'
editorr.c:(.text+0x4d1): undefined reference to `stdscr'
editorr.c:(.text+0x4ec): undefined reference to `waddnstr'
editorr.c:(.text+0x4f1): undefined reference to `stdscr'
editorr.c:(.text+0x509): undefined reference to `wmove'
editorr.c:(.text+0x50e): undefined reference to `stdscr'
editorr.c:(.text+0x516): undefined reference to `wrefresh'
editorr.c:(.text+0x521): undefined reference to `echo'
editorr.c:(.text+0x526): undefined reference to `stdscr'
editorr.c:(.text+0x536): undefined reference to `keypad'
editorr.c:(.text+0x53b): undefined reference to `cbreak'
editorr.c:(.text+0x540): undefined reference to `endwin'
collect2: error: ld returned 1 exit status
Compilation failed.

ubuntu@ubuntu:~/editorr$ dpkg --get-selections | grep curses
libncurses5:i386                install
libncurses5-dev                    install
libncursesw5:i386                install
ncurses-base                    install
ncurses-bin                    install
win 7 pro ukr @ desktop (ASUS P5L-VM 1394, Intel Pentium D 3.00GHz, 2GB DDR2, SATA WD500GB, ASUS nVidia GeForce 210 Silent 1GB DDR3)

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #22 : 26 Апреля 2013, 22:50:18 »
У меня тоже c Live CD не работает (Runtu 12.04). Буду разбираться.

А у вас раньше компилилось?

И какая у вас система?
Делюсь знаниями, но их у меня мало!

Оффлайн Самір Гасимов

  • Автор темы
  • Участник
  • *
  • Сообщений: 210
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #23 : 26 Апреля 2013, 23:01:50 »
У меня Ubuntu Live USB.
win 7 pro ukr @ desktop (ASUS P5L-VM 1394, Intel Pentium D 3.00GHz, 2GB DDR2, SATA WD500GB, ASUS nVidia GeForce 210 Silent 1GB DDR3)

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5738
  • Все по палатам!
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #24 : 26 Апреля 2013, 23:06:38 »
В нормальной системе все компилится
Извините, я все еще учусь

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #25 : 26 Апреля 2013, 23:34:08 »
Да по Live USB понятно, а разрядность? выпуск? 12.10 или еще какая?

Попробую c другой флешки запустить.
Делюсь знаниями, но их у меня мало!

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5738
  • Все по палатам!
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #26 : 26 Апреля 2013, 23:42:41 »
Да поставить Ubuntu (или что там) на флешку и не мучаться.
Извините, я все еще учусь

Оффлайн Самір Гасимов

  • Автор темы
  • Участник
  • *
  • Сообщений: 210
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #27 : 26 Апреля 2013, 23:42:54 »
Поставил какие-то пакеты и пошло.
Код: (Bash) [Выделить]
gcc editorr.cpp -lncurses -o editorr
Пользователь решил продолжить мысль 26 Апреля 2013, 23:44:53:
(Нажмите, чтобы показать/скрыть)

Пользователь решил продолжить мысль 26 Апреля 2013, 23:57:56:
Некоторые моменты:
1. По Ctrl+C не убивается;
2. По F10 у меня выбирается пункт главного меню терминала File;
3. Нету Backspace, Enter, Delete
4. Не читает file.txt если ./editorr file.txt

А вообще класно!


Пользователь решил продолжить мысль 27 Апреля 2013, 00:02:42:
Да по Live USB понятно, а разрядность? выпуск? 12.10 или еще какая?

Дык Ubuntu 12.10 32bit
« Последнее редактирование: 27 Апреля 2013, 00:02:42 от Самір Гасимов »
win 7 pro ukr @ desktop (ASUS P5L-VM 1394, Intel Pentium D 3.00GHz, 2GB DDR2, SATA WD500GB, ASUS nVidia GeForce 210 Silent 1GB DDR3)

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5738
  • Все по палатам!
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #28 : 27 Апреля 2013, 00:02:48 »
Самір Гасимов,
По ctrl+C и нельзя выходить, иначе текст потеряешь. Выход надо сделать по команде, причем, если текст изменен, то надо предложить его сохранить
Извините, я все еще учусь

Оффлайн Самір Гасимов

  • Автор темы
  • Участник
  • *
  • Сообщений: 210
    • Просмотр профиля
Re: Простой консольный текстовый редактор на C++
« Ответ #29 : 27 Апреля 2013, 00:08:36 »
По ctrl+C и нельзя выходить
Да, я не подумал что сказал.

Код: (C) [Выделить]
/* Вниз.
   1. Если курсор в последней строке файла, то куда дальше вниз? Некуда.
      Значит, ничего не надо делать:
      break;
   2. Если курсор НЕ в самой нижней строке окна редактирования, то его просто
      надо подвинуть вниз:
      c_row++;
   3. А если в самой нижней строке окна, то он должен физически остаться
      на том же месте, а файл надо подвинуть на строчку вверх:
      o_vert++;
   4. В случаях 2 и 3 курсор перемещается в файле на одну строку вниз:
      f_line++;
   Это первоначальный примитивный вариант обработки "стрелки вниз", сюда надо
   добавить еще кое-какие проверки и действия.                                */
  case KEY_DOWN:
   if (f_line == MAX_ROWS) break;
   if (c_row < UL_ROW+V_ROWS-1) c_row++;
    else                        o_vert++;
   f_line++;
   break;

Еще надо запретить курсору опускатся на последнюю строку + 1

Код: (C) [Выделить]
if (c_row < UL_ROW+V_ROWS) break;Так?
« Последнее редактирование: 27 Апреля 2013, 00:32:50 от Самір Гасимов »
win 7 pro ukr @ desktop (ASUS P5L-VM 1394, Intel Pentium D 3.00GHz, 2GB DDR2, SATA WD500GB, ASUS nVidia GeForce 210 Silent 1GB DDR3)

 

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