Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
16
Добавлен:
20.04.2024
Размер:
19.07 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

Перед компиляцией необходимо поправить Makefile, внеся следующие изменения:

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

df

 

 

 

.c

 

 

 

p

 

 

INSTALLDIR=/etc/logcheckn

 

 

 

 

 

 

g

 

 

 

 

 

 

-xcha

e

 

INSTALLDIR_SH=/usr/local/bin TMPDIR=/etc/logcheck/tmp

Кроме того, 67 строка должна выглядеть так:

@if [ ! -d $(TMPDIR) ]; then /bin/mkdir -p $(TMPDIR); fi

Устанавливаем: make linux && install-log logcheck

Теперь надо изменить переменные в основном скрипте - /usr/local/bin/logcheck.sh. Внеси следующие изменения:

TMPDIR=/etc/logcheck/tmp HACKING_FILE=/etc/logcheck/logcheck.hacking VIOLATIONS_FILE=/etc/logcheck/logcheck.violations VIOLATIONS_INGORE_FILE=/etc/logcheck/logcheck.violations.ignore IGNORE_FILE=/etc/logcheck/logcheck.ignore

Также необходимо изменить пути к лог-файлам. По умолчанию в LFS все события фиксируются в файле /var/log/sys.log, поэтому закомментируй все, что относится к Red Hat (строки 169-171), и добавь следующее:

#LFS-3.3

$LOGTAIL /var/log/sys.log > $TMPDIR/check.$$

Все, скрипт готов к употреблению. Пропиши его в cron для запуска каждый час и полу- чай отчет по почте!

Шифрование

Теперь займемся поддержкой шифрования. OpenSSL - некоммерческая реализация протоколов SSL (Security Sockets Layer) и TLS (Transport Layer Security) с полной криптографией. Скачиваем: www.openssl.org/source/openssl-0.9.7.tar.gz.

Устанавливаем:

perl util/perlpath.pl /usr/bin

После этого надо отредактировать файл Configure для оптимизации. В строке 331 замени опцию -m486 на -march=i686 -mcpu=i686 для оптимизации.

./Configure linux-elf -DSSL_FORBID_ENULL --prefix=/usr --openssldir=/etc/ssl && make &&

make install && install-log openssl

OpenSSL, как ты знаешь, используется для поддержки шифрования почти во всех программах - начиная от SSH и заканчивая почтовыми клиентами. Ни для кого не секрет, что программа telnet, призванная решать ежедневные административные задачи, передает данные в открытом виде, что делает их доступными для электронного прослушивания (sniffing). Программа SSH, которая была создана для замены программ telnet, rlogin, rsh, rexec полностью решает эту проблему, шифруя передаваемые данные. Кстати, раз уж речь зашла об r-программах, поделюсь своими наблюдениями. rlogin читает файл .rhosts, который находится в домашней директории и содержит IP-адреса машин, с которых возможен вход без пароля. На первый взгляд это удобно, но при подмене IP-адреса (spoofing) атакующий может получить шелл. Об этом написано во всех книгах по безопасности, об этом не раз писал и X. Однако во всех дистрибутивах Linux эти программы устанавливаются по умолчанию. Спрашивается - зачем? Дистрибутивы тащат за собой софт, который повсеместно не используется уже несколько лет. Отсюда получается большой объем системы и необходимость начинать настройку безопасности с удаления старых неиспользуемых программ. OpenSSH - это свободно распространяемая реализация SSH. Скачиваем: ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-3.5p1.tar.gz. Устанавливаем:

./configure --prefix=/usr \ --sysconfdir=/etc/ssh \ --with-ipv4-defaults \ --with-md5-passwords \ --with-pam &&

make && make install &&

install-log openssh

Создаем файл /etc/pam.d/sshd:

#Begin /etc/pam.d/sshd

auth required pam_stack.so service=system-auth

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

<PageP

 

079>

 

 

 

 

i

 

 

 

 

 

 

 

r

 

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

to

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 Взлом 6 Юниксоид 7 Кодинг 8 Юниты 9 Quit> 79

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

 

 

F

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

P

D

 

 

<Page 018>

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

w Click

Юниксоид

 

 

 

 

 

 

 

m

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

 

 

 

.

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

g

 

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ДЕЛАЕМ СИСТЕМУ ПУЛЕНЕПРОБИВАЕМОЙ!

Shaman (aka_shaman@mail.ru)

auth

rquired

pam_nologin.so

account

required

pam_stack.so serv-

ice=system-auth

 

 

password required

pam_stack.so service=system-

auth

 

 

session

required

pam_stack.so serv-

ice=system-auth

 

 

session

required

pam_limits.so

#End /etc/pam.d/sshd

Если ты хочешь открыть на своей машине ssh-сервер, в /etc/rc.d/init.d создай скрипт:

#!/bin/sh

source /etc/sysconfig/rc source $rc_functions

case "$1" in start)

echo "Starting SSH... " loadproc sshd

;;

stop)

echo "Stopping SSH... " killproc sshd

;;

restart) $0 stop $0 start

;;

*)

echo "Usage: $0 {start|stop|restart}" exit 1

esac

Остается лишь сделать на него символические ссылки в директориях rcN.d.

Tripwire

Средняя инсталляция Linux включает в себя порядка 20000 файлов. Уследить за всеми довольно трудно. Для решения этой проблемы была создана программа tripwire. При первом запуске она сканирует диск и создает базу системных файлов, цифровой отпечаток системы в безопасном состоянии. Настройка tripwire для LFS - процесс очень долгий. Дело в том, что в конфигурационном файле прописываются файлы, за которыми надо следить. По умолчанию в нем прописаны файлы для Red Hat. В LFS файлов намного меньше, да и расположение порой другое, поэтому на подгонку файла конфигурации может уйти довольно много времени. Скачиваем: www.tripwire.org/files/tripwire-2.3-47.bin.tar.gz.

Это готовые бинарники, не требующие компиляции. Для установки надо запустить инсталляционный скрипт install.sh, но сначала нужно поправить файл install.cfg. Tripwire может посылать отчеты по почте, поэтому в файле install.cfg надо отредактировать переменную TWMAILMETHOD. По умолчанию используется метод SENDMAIL. Если он тебя устраивает, то надо поправить путь к sendmail - переменную TWMAILPROGRAM. Значение по умолча-

нию - /usr/lib/sendmail -oi -t. Есть и альтернативный метод - через хост. В этом случае закомментируй все относящееся к методу SENDMAIL и раскомментируй метод SMTP:

TWMAILMETHOD=SMTP

TWSMTPHOST="mail.domain.com"

TWSMTPPORT=25

После этого будут выведены значения опций, которые надо подтвердить. Затем tripwire скопирует файлы и нач- нет создавать ключи, для чего нужно ввести парольную фразу. Парольная фраза отличается от пароля широтой выбора. Она может быть любой длины и содержать пробелы. Сначала нужно ввести парольную фразу для клю- чевого файла, а затем - для локального ключевого файла. После генерации ключа будет создан файл конфигурации, и tripwire запросит парольную фразу для сайта. После окончания установки конфигурационные файлы будут находиться в /etc/tripwire.

Теперь надо настроить файл политики /etc/tripwire/twpol.txt. Однако tripwire использует не этот файл. Настоящий файл политики зашифрован и называется tw.pol. После некоторых исправлений в файле twpol.txt надо сгенерить tw.pol:

twadmin --create-polfile /etc/tripwire/twpol.txt

После этого надо ввести парольную фразу и будет сгенерирован зашифрованный файл политики.

Теперь надо сгенерировать базу данных tripwire: tripwire --init

По запросу надо ввести локальную парольную фразу, и начнется генерация базы. Вот тут-то и проявятся ошибки в файле политики:

..................

###Warning: File system error.

###Filename: /bin/somefile

###No such file or directory

###Continuing

Записав все ошибки, надо исправить файл twpol.txt и опять попробовать сгенерировать базу. После всего этого гимора, база должна сгенериться без ошибок. После первого запуска tripwire сохранит снимок всей системы, который будет использоваться как эталон при последующих проверках. Проверка выполняется с помощью следующей команды:

tripwire --check

Результатом проверки будет подробный отчет о файловой системе - количество добавленных, удаленных, модифицированных файлов и оценка их критичности. После подгонки файла политики, файлы twpol.txt и twcfg.txt необходимо удалить. Однако я все же рекомендую удалить текстовые файлы с сервера и хранить их на внешнем носителе

– мало ли, вдруг тебе понадобится их модифицировать.

Сетевая безопасность

Iptables - пакетный фильтр, брандмауэр, созданный на основе ядра Linux. Обычно брандмауэр ставят на маршрутизаторе, который перенаправляет пакеты согласно правилам фильтрации. Однако им можно защитить и обычную рабочую станцию. Основными данными при фильтрации являются IP-адреса отправителя и получателя, порты отправителя и получателя, протокол. На основе этих данных можно составить цепочки правил брандмауэра. Скачиваем: www.netfilter.org/.

Для установки iptables необходимы исходники ядра. Устанавливаем:

make KERNEL_DIR=/usr/src/linux && make install KERNEL_DIR=/usr/src/linux &&

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

ХАКЕР\¹58\Октябрь\2003P

 

 

 

 

 

i

 

 

 

 

 

 

 

r

 

 

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

to

BUY

 

 

 

 

 

 

 

 

 

 

 

 

install-log iptables

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

После этого надо перекомпилить ядро с поддержкой ipt- ables. В секции Networking options включи опцию Network packet filtering (replaces ipchains). После этого в этой же секции появится пункт IP: Netfilter Configuration. Заходи в него и включи опцию IP tables support. Остальное - по вкусу и желанию. Затем компиль ядро, добавляй в LILO и перегружайся. Далее надо создать скрипт, содержащий цепочки. Создай файл /etc/rc.d/rc.firewall и пиши в него:

#!/bin/sh

IPTABLES=/usr/local/sbin/iptables

#Для начала очищаем цепочки от старых правил $IPTABLES -F INPUT

$IPTABLES -F OUTPUT $IPTABLES -F FORWARD

#А зачем нужна эта строка - поймешь дальше /etc/rc.d/rc.firewall-blocked

#End /etc/rc.d/rc.firewall

Этот скрипт очищает цепочки от старых правил и подгружает файл rc.firewall-blocked. Существует множество документов по пакетным фильтрам. Один из лучших - книга Р. Зиглера "Брандмауэры в Linux". На русском языке она есть только для ipchains, в английском варианте есть вторая редакция - по iptables. Защититься от сканирования портов и от последующих атак нам поможет IDS. IDS - Intrusion Detective System - система обнаружения атак в реальном времени. При коннекте IDS рассматривает трафик на предмет вредоносных действий и в случае их обнаружения принимает определенные меры.

Скачиваем: www.psionic.com/products/. Устанавливаем:

make linux && make install

Теперь правим конфигурационный файл /usr/local/psionic/portsenrty/portsentry.conf. Будем запускать portsentry в расширенном режиме обнаружения скрытого сканирования, поэтому в секции Port Configuration ничего редактировать не надо. В секции Ignore Options исправь:

BLOCK_UDP="2"

BLOCK_TCP="2"

Это значит, что при обнаружении сканирования будет выполнена внешняя команда, поэтому в секциях Dropping Routes и TCP Wrappers все закомментируй, а в секции External Command пиши:

KILL_RUN_CMD="/usr/local/psionic/portsentry/add_ rule $TARGET$"

Теперь создай файл /usr/local/psionic/portsentry/add_rule и пиши в него:

#!/bin/sh

echo "/usr/local/sbin/iptables -I INPUT -s" $1 " -j DROP" >> /etc/rc.d/rc.firewall-blocked /etc/rc.d/rc.firewall

Этот скрипт будет добавлять запрещающие правила в файл rc.firewall-blocked и перезапускать брандмауэр. PortSentry - одна из самых простых IDS, однако это не значит, что она неэффективна. У меня она ловила порядка 10 попыток сканирования с разных IP в сутки.

Заключение

Описанные программы позволяют существенно уменьшить вероятность взлома системы и установку бэкдоров. Не забывай вовремя их обновлять и следи за bug-trac'ом. Будут вопросы – мыль.

 

 

1

 

2

 

3

 

4

 

80

Ньюсы

Феррум

Inside

PC_Zone

Implant

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

Ñâîé

 

 

C

 

E

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

 

 

 

F

 

 

 

 

 

t

 

 

 

 

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

P

 

 

 

NOW!

o

 

Кодинг

 

 

 

 

 

 

 

 

 

 

 

w

 

to

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

o

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

.c

 

 

 

 

 

 

 

p

 

 

 

g

 

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СВОЙ ВИДЕОКОМБАЙН НА DELPHI

 

 

 

 

 

 

 

Лозовский Александр (alexander@real.xakep.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

видеокомбайн

 

 

 

 

 

 

 

 

 

 

 

 

íà Delphi

 

 

 

 

 

 

 

 

 

 

 

 

-файлов

 

 

 

 

Пишем проигрыватель AVI

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

В августовском

Кодинге я рассказывал,

как создать собственный подарочный

 

â

 

мне на почту стали приходить письма

.

Сразу после выхода того номера,

. Расскажи, как или кинь линк,

ãäå

аудиоплеер

 

 

 

 

 

 

äóõå: "Çâóê

это круто, но хотелось бы еще

и видео

и мне ничего не остается, кроме

 

 

 

. Требования эти становятся все настойчивее,

 

 

 

узнать"

 

как рассказать об

этом сразу всем.

 

 

 

 

 

 

 

 

 

 

 

.xakep.ru)

 

 

 

 

Лозовский Александр (alexander@real

 

 

 

 

 

 

 

 

 

-èäåÿ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Мечта

 

нам в проигрывании AVI-файлов (а именно

о них сегодня

Компонентов, помогающих

 

 

наших

 

 

 

 

 

 

 

из них является произведение

пойдет речь), не так много. Самым достойным

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.alcatech.de/down

братьев

из Германии под названием:

"Multimedia Tools" (www

 

 

 

 

 

 

 

 

 

6). Как ни странно, оно оправдывает

 

 

 

 

 

 

 

.exe, ýòî ëèíê äëÿ Delphi

load/mmtools/mmtool6

 

 

 

 

 

 

 

 

 

разработчики постарались в одном

ñâîå

подозрительное название. Дело в том, что

 

 

 

 

 

 

 

 

 

 

 

 

собрать все, что может потребоваться

кодеру мультимедийных продуктов на

пакете

 

 

 

с аудио/видео файлами. В 2,3 Мб

 

 

 

производства,

 

от дизайна до работы

всех этапах

 

 

 

 

и редактирования (кстати,

 

 

 

 

 

 

воспроизведения

хранятся компоненты для записи,

 

звукового

потока,

 

 

 

 

 

 

визуализации

весьма

профессионального)

WAV-файлов,

 

. Ìíå íå

создания, редактирования

и воспроизведения

AVI-файлов и многое другое

 

 

 

 

 

 

 

 

обо всем пакете, а вот разработчики

хватит

 

трех таких статей, чтобы рассказать

 

 

демок,

который ты можешь качнуть с

 

 

 

и сделали набор примерно из 100

напряглись

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.exe. Весят они всего 3,3 Мб. Правда,

 

 

 

 

 

 

.de/download/mmtools/mmdemos

 

 

 

 

 

 

 

 

 

 

 

 

www.alcatech

 

 

 

полное отсутствие хелпа или другой вразумительной

наличие демок не оправдывает

 

 

 

 

 

 

 

 

 

 

 

. Надпись "Currently there

документации (кроме весьма общего обзора

компонентов)

 

 

 

 

 

 

are still no helpfiles available, sorry ;-(" висит

на их сайте с 1998 года и вряд ли когда-

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нибудь исчезнет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Инсталляция

 

 

 

 

 

 

 

 

 

 

 

 

архива -> открытие

Устанавливается

это немецкое чудо по старой

схеме: распаковка

 

 

забудь,

÷òî

 

от версии) из каталога с компонентом

(кстати, не

файла *.dpk

(имя зависит

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

â path),

далее - ОК -> Compile -> Install.

путь к этой директории должен быть прописан

 

 

. Там прибавилось

Это все, теперь самое время посмотреть на палитру

компонентов

 

 

 

-

целых 8 закладок (MMTools, MMDesign,

MMWave, MMVisual, MMMixer, MMDSP, MMD

 

 

 

 

 

 

интересует в основном содержимое

SOUND,

MMAVI). Несмотря на то, что нас сегодня

 

для работы с AVI-файлами, в том

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

последней вкладки (в ней находятся инструменты

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Они тебе тоже пригодятся

 

числе DivX), я опишу и некоторые другие компоненты

 

 

 

 

 

 

 

Путь к сердцу юзера лежит

 

через интерфейс

 

 

è MMDESIGN

Этот факт разработчики

знают не хуже нас, поэтому закладки MMTOOLS

 

. Например:

 

 

 

 

 

пестрят разными приятными компонентами

 

 

 

 

 

 

 

.

MMWheel - колесико, похожее на то, которым регулируется

громкость радиоприемника

 

.

Для этого его и рекомендуют использовать,

но, по сути, это - круглая замена трекбару

 

 

 

Свойства Value, MinValue и MaxValue

говорят сами за себя.

 

 

 

табло" (по

 

 

имеющие вид "информационного

MMLEDLABEL - позволяет делать label'ы,

 

 

 

 

 

 

 

 

 

типу часов в

метро). Такой

же вид имеют MMLEDPanel (обычный счетчик) и MMLEDSpin

 

 

 

 

 

. Также имеются собственные

(счетчик + стрелки вверх/вниз

для изменения показаний)

 

 

CheckBox'û,

 

 

 

 

-чисел, красочные

аналоги Gauge, обычного Edit'a, Edit'a

для флоат

 

è

визуализации

это заточено для управления

 

 

 

. Õîòÿ âñå

 

RadioButton'ы и многое другое

 

 

 

 

 

 

.

 

звука, ничто

не мешает тебе использовать их в любых

других приложениях

 

 

разработчиков, имеющий

 

 

 

 

но, по утверждению

TMMHiTimer - аналог обычного таймера,

 

 

 

. Ýòî

 

. К тому же свойство Priority определяет приоритет

его потока

большую точность

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

может быть очень важно

 

 

 

 

 

 

 

 

 

 

Вкладка "Wave"

компонентов, связанных

ñî

звуком

-

Здесь содержится гигантское количество

 

è ò.ï.

 

 

 

 

 

 

 

 

воспроизведение,

запись, конвертирование

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMWavePlayer

- плеер, он и в Африке

плеер. Позволяет

работать с моно, стерео и

 

 

Старые добрые

 

 

звуком. Понимает только один формат - WAV.

мультиканальным

 

 

 

.

 

процедуры Play, Stop и Pause присутствуют

и в нем, поэтому пойдем дальше

íà

 

 

для записи звука. Очень похож

TMMWaveRecorder

- компонент, предназначенный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

процедурой Recording.

 

 

предыдущий, только работа его инициируется

 

 

 

 

 

 

 

 

 

 

 

Это, как ты понимаешь, 2 основных

компонента, но есть еще куча дополнительных,

 

построения

различных

кривых

и многого

предназначенных

 

для фильтрации,

 

 

 

 

 

 

 

 

 

 

 

 

äåìû.

 

 

 

 

 

 

 

 

 

другого. В освоении их тебе помогут

 

 

 

 

 

 

 

 

 

Вкладка "Visual"

 

 

Иначе говоря

-

осциллоскопы,

Компоненты,

визуализирующие

звуковой поток.

 

 

 

 

 

 

 

. А увидев,

сказать: "О,

построители спектрограмм,

уровни... в общем, это надо видеть

 

 

 

 

 

я-я, дас ист гут. Штангентзиркуль! Гут!"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-файлами

 

 

 

 

 

Работа с AVI

 

 

 

 

 

 

под мультимедийные

AVIOpenDialog -

стандартный

диалог

открытия, переделанный

 

 

и немецкий

ÿçûê

 

 

 

 

 

 

 

 

 

 

 

. Из серьезных изменений я заметил только фильтр расширений

 

 

.

файлы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

интерфейса,

поэтому пользоваться

им может только настоящий фанат Вольфштайна

 

 

 

 

 

.

 

 

 

 

 

 

Имеется также MMAVISaveDialog

как диалог сохранения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

82

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TMMAVIFile

 

-

 

пожалуй,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

самый

 

важный

 

компонент,

предназначенный

äëÿ

 

 

 

 

 

 

 

 

 

обслуживания

AVI-файла.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Свойство FileName определяет

 

 

 

 

to

 

 

 

 

 

 

 

 

 

задает

 

òèï

 

 

имя файла,

AccessMode

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

доступа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(amRead - только

 

чтение,

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

o

m

amWrite

 

-

запись).

 

 

 

 

amReadWrite

-

 

чтение-запись,

 

 

 

 

 

 

 

 

 

После этого

òû

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

получаешь доступ к

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

самым

 

 

 

 

 

 

 

 

 

 

 

p

df

 

 

 

 

 

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

интимным местам

 

 

 

 

 

 

g

 

 

 

 

 

файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

(ÿ

 

èìåþ

â

 

âèäó

 

потоки).

 

Осуществить

 

ýòîò

самый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

доступ

поможет,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

например, функция TypedStreams

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

после

передачи ей типа

 

(stVideo/stAudio) è

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

номера

 

 

потока,

 

îíà

вернет тебе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

переменную

 

òèïà

 

TMMAVIStream.

Êàê

ýòî

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

использовать, я

покажу на примере.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Процедуры:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OpenFile - открывает заданный файл.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CreateFile - создает новый файл (дело в

том, что с помощью этой коллекции можно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

также создавать

AVI-файлы).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CreateVideoStream

-

 

создает

видеопоток в заданном

файле (для этого

åé íàäî

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

передать

 

 

FrameRate

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(как правило,

1) и имя потока -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

любую

строку).

Например:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

"MainSound".

Возвращает

 

переменную типа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TMMAVIStream.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CreateAudioStream

- соответственно

создает

аудиопоток (в качестве

аргументов -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

формат и имя потока).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Äà,

кстати,

 

âñå

 

нижеописанные

 

компоненты

 

работают

только

ñ

файлом,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обработанным

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TMMAVIFile, поэтому

свойства, типа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FileName, ó íèõ íåò.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVIControl -

отменный пульт контроля над воспроизведением аудио и

видео.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Уже содержит

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

â

себе кнопки Play,

Stop, Pause, трек для быстрой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

таймер. В

 

 

 

 

 

 

 

 

навигации и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

общем, отличная вещь.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Свойства:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

VideoDisplay - определяет имя компонента,

показывающего изображение. Обычно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ýòî

MMAVIVideoDisplay, его я опишу чуть

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

позже.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RewindWhenDone

 

-

 

åñëè

 

TRUE, òî

позиция

 

 

чтения

файла

 

ïî

окончании

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

воспроизведения возвращается к началу,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AddFile - добавляет

 

 

 

 

 

 

 

 

 

 

 

 

 

если FALSE - остается.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

файл в список воспроизведения. Ей необходимо

передать имя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

компонента TMMAVIFile.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AddStream - то же самое, но для потока.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hasAudio - принимает значение TRUE, если в

заданном файле присутствует

çâóê.

 

 

 

 

 

 

 

 

 

 

 

 

 

hasVideo -

аналогично предыдущей, но

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для видео.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Playing - становится

TRUE, åñëè èäåò

процесс воспроизведения.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Paused -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

воспроизведение на паузе.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TRUE, åñëè

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

И, наконец, процедуры

PLAY,

PAUSE и STOP заботятся, соответственно, о запуске

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

воспроизведения, паузе и стопе.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Çíàÿ

эти и некоторые другие

процедуры, можно

легко обойтись без визуальной

 

 

 

 

 

 

 

 

 

 

 

части

этого

 

 

компонента

è

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сделать

собственный

дизайн.

Точнее,

 

ìû

просто

 

 

 

 

 

 

 

 

 

 

 

 

обязаны это

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сделать, если твое творение выйдет за пределы

твоего

компа. Думаю,

 

 

 

 

 

 

 

 

 

 

 

пользователю

 

не надо знать,

почему

 

он заплатил $20 за прогу,

 

 

 

 

 

 

 

 

 

 

 

 

помощью чужих

компонентов

 

 

 

написанную

ñ

 

 

 

 

 

 

 

 

 

 

 

 

:). Правда, Multimedia Tools

стоят около 260 евро, так

 

 

 

 

 

 

 

 

 

 

 

что все справедливо.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVIVideoDisplay

-

компонент-дисплей. Перед

 

началом

 

работы,

 

êàê

ÿ

óæå

 

 

 

 

 

 

 

 

 

 

 

говорил,

должен

áûòü

связан

ñ MMAVIControl,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

õîòÿ

возможна

 

è

 

работа на

 

 

 

 

 

 

 

 

 

 

 

автопилоте

-

 

â

этом случае

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

показывать он будет не весь поток, а

 

отдельные

 

 

 

 

 

 

 

 

 

 

фреймы. Для этого необходимо:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1) Добавить

файл в список.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2)

 

Передать номер потока (то

есть, первый).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3) Выбрать номер фрейма:

AVIDisplay.FrameIdx :=

номер.

Нумеруются они от

íóëÿ

 

 

 

 

 

 

 

 

 

 

äî

 

 

Streams[x].Length-1,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

поэтому экранизацией

 

легко

управлять

ñ

 

 

помощью

 

 

 

 

 

 

 

 

 

 

 

трекбара или слайдера.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVICompressor - отвечает

за работу с AVI-файлами. Например, ты

легко можешь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

создать собственную AVI'шку из

нескольких

BMP,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

записывать потоки в файл и многое

 

 

 

 

 

 

 

 

 

 

 

другое. По сути, это - путь к редактированию

авишек. А плеер с функциями editor'а -

 

 

 

 

 

 

 

 

 

 

 

ýòî

 

уже о-го-го, такое даже WMPlayer'у не

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ïîä ñèëó.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AddStream -

добавляет поток в файл. Откуда брать поток и

файл? Об этом я уже писал

 

 

 

 

 

 

 

 

 

 

÷óòü

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выше, когда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

переменная типа

рассказывал про TMMAVIFile. Ей передается только один

аргумент -

 

 

 

 

 

 

 

 

 

 

TMMAVIStream.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SaveToFile - сохраняет

потоки в

файле;

главное здесь - не скинуть на диск ненужные

 

 

 

 

 

 

 

 

 

 

данные, поэтому

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пользуйся FreeStreams

как процедурой,

обнуляющей список потоков.

 

 

 

 

 

 

 

 

 

 

Те же действия,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

проведенные для аудиопотока с сохранением

â WAV-ôàéë,

позволяют

 

 

 

 

 

 

 

 

 

 

выдирать звук из файла кино.

Возьми на заметку - очень полезная вещь.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Кодинг

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Наконец-то мы переходим к

торжественной части. Она будет совсем несложной, и тебе

 

 

 

 

 

 

 

 

понадобится не

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

более 1% CPU твоего мозга.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Клади

íà

 

форму

компоненты:

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMLabel

 

 

(объемный

 

лейбл

èç

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMTools),

 

1

MMAVIVideoDisplay,

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVIOpenDialog,

1

MMAVIFile,

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVICompressor,

1

MMSlider

(ïî

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

òèïó

 

трекбара

èç

MMTools),

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVISaveDialog,

1

MMAVIControl, 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

кнопки.

Это должно

выглядеть как на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ðèñ. 1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Расставим caption'ы:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Button1 -

"открыть...". Это

кнопка для

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

открытия

файлов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Button2

-

 

"Обн. фреймы".

 

À

ýòà

 

 

 

 

 

 

 

Ðèñ.1

Форма для плеера

 

 

 

 

 

 

 

 

 

 

обнуляет

 

 

 

список

 

сохраненных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

фреймов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Button3

 

-

 

"Порвать A/V". Позволяет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

83

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

ИГРЫ ПО КАТАЛОГАМ С ДОСТАВКОЙ НА ДОМ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

www.e-shop.ru

www.gamepost.ru

 

$135.99

Технические параметры:

Процессор: 32-Bit ARM

 

Память: 32-96 KB VRAM (в CPU), 256 KB

 

Экран: 2.9’’ TFT c отражающей матрицей

 

(40.8 ìì õ 61.2 ìì)

 

Разрешение и цвет: 240х160 пикселей,

 

32.768 возможных цветов

 

Размеры (ШхВхТ): 144.5 х 82 х 24.5 мм

 

Âåñ: 140 ã

 

Питание: 2 батареи класса АА (15 часов)

 

Носители данных: картриджи

$89.99

Game Boy è Game Boy Color

Другое: Стереозвук, совместим с играми для

 

Технические спецификации только для GBA SP:

* Интегрированная подсветка LCD экрана* Входящая в комплект перезаряжаемая Lithium Ion батарея, способная работать 10 часов безостановочной игры, заряжаемая всего 3 часа

$55.99

 

 

$59.99

 

 

 

 

 

 

Golden Sun: The

Mortal Kombat:

Lost Age

Tournament Edition

 

 

 

 

 

$49.99

 

 

$52.99

 

 

 

 

 

 

$63.99

Final Fantasy

Tactics Advance

$59.99

 

 

 

Advance Wars 2:

Donkey Kong

Banjo Kazooie:

Black Hole Rising

Country

Grunty's Revenge

Заказы по интернету – круглосуточно!

e-mail: sales@e-shop.ru

Заказы по телефону можно сделать

ñ 10.00 äî 21.00 ïí - ïò

 

ñ 10.00 äî 19.00 ñá - âñ

СУПЕРПРЕДЛОЖЕНИЕ

стоимость доставки

 

 

 

ДЛЯ ИНОГОРОДНИХ ПОКУПАТЕЛЕЙ

снижена на 10%!

 

WWW.GAMEPOST.RU

(095) 928-6089 (095) 928-0360 (095) 928-3574

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

w

 

 

to

 

 

 

 

o

Кодинг

P

 

 

 

 

 

NOW!

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

o

m

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

СВОЙ ВИДЕОКОМБАЙН НА DELPHI

Лозовский Александр (alexander@real.xakep.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-файл на два - с видео и со

 

 

 

 

 

 

 

 

 

 

 

делить AVI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

звуком.

 

 

-

"Ïî

 

.

После

åå

 

 

 

 

 

 

 

 

 

 

 

Button4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

кадрам"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нажатия ты сможешь выбирать нужный

 

 

 

 

 

 

 

 

 

 

 

 

тебе кадр с помощью slider'a.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

То, что у меня получилось, ты видишь

 

 

 

 

 

 

 

 

 

 

 

 

íà ðèñ. 2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь,

когда интерфейс

более

èëè

 

 

 

 

 

 

 

 

 

 

 

 

менее

 

готов, пора бы внести

ïàðó

 

 

 

 

 

 

 

 

 

 

 

 

 

строчек

êîäà.

Начнем

 

ñ

самого

 

 

 

 

 

 

 

 

 

 

 

 

 

главного - онклика для первой кнопки.

 

 

 

 

 

 

 

 

 

 

 

 

 

Âîò îí:

 

 

 

 

 

 

 

 

 

Рис.2 Готовая форма

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.Execute then //Если диалог сработал, то

 

 

 

 

 

IF MMAVIOpenDialog1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

.FileName; //Передадим имя

 

.FileName := MMAVIOpenDialog1

 

 

 

 

 

 

 

 

 

 

 

MMAVIFile1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

компоненту

 

 

 

 

 

 

 

 

 

 

 

 

 

.FileName);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Caption := ExtractFileName(MMAVIOpenDialog1

 

 

 

 

 

 

 

 

 

 

 

.OpenFile;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVIFile1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.FreeStreams;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVIControl1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.AddFile(MMAVIFile1);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVIControl1

 

.Refresh;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVIVideoDisplay1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Здесь все должно быть понятно, если

ты читал

теорию,

поэтому пойдем дальше - сразу

 

 

 

 

 

 

 

 

 

 

 

 

íà OnClick:

ко второй кнопке, запускающей

процесс навигации по кадрам. Посмотрим

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.AddFile(MMAVIFile1); //Ассоциируем

 

 

 

 

 

MMAVIVideoDisplay1

ñ

//файлом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVIVideoDisplay1

 

//Берем первый поток

 

 

 

 

 

 

 

 

.StreamIdx := 0;

 

 

 

 

 

MMAVIVideoDisplay1

 

 

 

 

 

 

 

 

 

 

.Length-1; //Макс. значение

 

 

 

 

 

 

 

 

 

 

.Streams[0]

 

 

 

 

 

 

 

 

 

 

 

.MaxValue:= MMAVIFile1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMSlider1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

слайдера

.Enabled := True; //Включаем

слайдер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMSlider1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

После этого подготовительного

этапа и создания события OnChange для слайдера:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.Position;

 

 

 

 

 

 

 

 

 

 

.FrameIdx := MMSlider1

 

 

 

 

 

 

 

 

 

 

 

MMAVIVideoDisplay1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

каждое изменение

его положения будет нам выводить соответствующий

кадр. Сохранить

 

 

 

событие

сможем простым кликом

íà

дисплее. Вот и

создавай

åãî â ôàéë ìû

 

врезки 1.

 

 

 

 

 

 

MMAVIVideoDisplay1Click

и пиши туда содержимое

 

ôàéë (ò.å. bmp) è

 

на компоненте мы создаем растровый

Логика такая - после клика

 

 

 

 

 

 

 

 

 

 

 

 

.

И поскольку нас интересует чистый

копируем

туда содержимое MMAVIVideoDisplay1

 

обрезаем. Именно для этого нужны

 

компонента, мы их аккуратненько

кадр без границ

 

 

 

.

 

 

 

 

 

 

манипуляции с размерами,

которые ты видел во врезке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

врезка 1

Листинг procedure

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.MMAVIVideoDisplay1Click

 

 

 

TForm1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure TForm1.MMAVIVideoDisplay1Click(Sender:

TObject);

 

 

 

 

 

 

 

 

 

 

 

 

var

 

 

 

 

 

 

 

 

 

 

 

ôàéë

 

 

 

 

 

 

 

 

 

 

 

Bmp: TBitmap; //объявляем растровый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

.Refresh; //Освежимся :)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMAVIVideoDisplay1

 

 

 

 

 

ôàéë

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.Create; //Создаем

 

 

 

 

 

 

 

 

 

 

 

Bmp := TBitmap

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

try //Попытаемся (на случай ошибки)

 

 

 

 

 

 

 

 

.BevelExtend;

Bmp.Width

 

 

 

 

 

 

 

 

 

.Width-2*MMAVIVideoDisplay1

 

 

 

 

:= MMAVIVideoDisplay1

- границы

 

 

 

 

 

 

 

 

 

 

//ширина битмапа=ширине

кадра

 

 

 

 

 

.BevelExtend;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.Height-2*MMAVIVideoDisplay1

 

 

 

 

Bmp.Height:= MMAVIVideoDisplay1

 

 

 

 

 

 

 

 

 

 

 

 

 

//То же с высотой

 

 

 

 

 

 

 

 

 

 

 

.Height), //Копируем

 

 

 

 

 

 

 

 

 

 

 

 

 

.Width,Bmp

 

 

 

 

 

 

 

 

 

 

 

.CopyRect(Rect(0,0,Bmp

 

 

 

 

 

 

 

 

 

 

 

 

 

Bmp.Canvas

 

прямоугольничек

 

 

 

 

 

 

 

 

 

 

 

 

 

соответствующий

 

 

 

 

 

.BeveledRect); //в битмап

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.Canvas,MMAVIVideoDisplay1

 

 

 

 

 

 

 

MMAVIVideoDisplay1

 

 

 

 

 

.bmp'); //сохраняем файл на диск

 

 

Bmp.SaveToFile('pic'+inttostr(N)+'

 

 

 

 

 

 

 

 

 

 

 

 

 

Inc(n); //увеличим счетчик

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

finally

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bmp.Free; //освободим память

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

врезка 2

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

Листинг procedure

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.Button3Click(Sender: TObject);

TForm1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure TForm1.Button3Click(Sender:

TObject);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

var

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

VideoStream: TMMAVIStream; //Аудиопоток

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AudioStream: TMMAVIStream; //Видеопоток

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FName: string;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

.TypedStreams[stVideo,0]; //берем первый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

VideoStream := MMAVIFile1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

видеопоток

 

 

 

 

 

 

 

.TypedStreams[stAudio,0]; //То же для аудио

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AudioStream := MMAVIFile1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

try

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FName :=

 

 

 

 

 

 

.FileName)+ChangeFileExt(ExtractFileName(MMAVIFile

 

 

 

 

 

 

 

 

ExtractFilePath(MMAVIFile1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.FileName),'');

 

 

 

 

 

 

 

 

 

юзером

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Получаем

имя файла, выбранного

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

With MMAVICompressor1

do //Работаем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

//Добавим

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AddStream(VideoStream);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

_video.avi'); //Сохраняем в файл

 

 

 

 

 

 

 

 

 

 

 

SaveToFile(FName+'

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FreeStreams; //Освобождаем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AddStream(AudioStream);

//Добавим аудио

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

_audio.wav'); //И скинем его на диск

 

 

 

 

 

 

 

 

 

 

SaveToFile(FName+'

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FreeStreams;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

finally

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

аудио и видео!'); //Поведаем об

 

ShowMessage ('Файл успешно порван на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

успехе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Имя файла имеет вид picX.bmp, где Х -

номер по

порядку, от нуля до... сколько изволите

 

 

 

формы

и ОнКлик button2:

:). Для ее инициализации не забудь вдолбить в OnCreate

 

 

 

 

 

 

 

 

 

 

 

N:=0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Разрывной файл

 

 

 

 

файла на два (аудио и видео) - это

Как я уже говорил, функция деления исходного

 

 

 

юзеры

мечтают сохранять

жемчужина любой

 

 

 

 

-проги :),

 

поскольку многие

медиа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. À ìû ñ

 

 

 

 

 

 

 

 

 

 

 

 

. Просто они не знают, как это сделать

любимые фразы/музон из фильмов

 

 

 

 

третьей кнопки (врезка

2).

 

 

 

тобой знаем, поэтому

и ставим онклик для

 

 

 

читал статью, но

 

 

 

 

 

 

 

 

 

поскольку ты внимательно

 

Принцип работы этого кода тебе ясен,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

учти, что файлы эти сохраняются

в каталоге С ИСХОДНЫМ ФАЙЛОМ и имеют имена

 

 

 

 

 

 

 

_video.avi.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

_audio.wav и имя_исходного

 

 

 

 

 

 

 

 

 

 

 

 

 

_исходного

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

â âèäå èìÿ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Логическое завершение

 

è

 

непринужденно

Этот компонент

не единственный, позволяющий

 

легко

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- жестокая эксплуатация Windows

проигрывать

видео. Есть и другой путь, а именно

 

 

 

 

 

 

 

 

 

 

управляются

 

 

 

äëÿ

тебя не секрет, что все продукты от MS легко

Media Player (думаю,

 

выпущен

 

 

ýòîé

 

è áåç

того несложной

задачи,

áûë

ИЗВНЕ

:)).

 

Äëÿ

 

упрощения

 

 

 

 

 

 

 

.zip èëè áåðè

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(качай его

 

 

 

 

 

 

 

.com/amovie/amovie

 

компонент TActiveMovie

ñ www.delphicity

 

 

 

 

 

 

 

 

6.4

версии) в

 

.

Он позволяет встраивать Windows Media Player (старше

 

 

 

на диске)

 

. Отсюда

следуют и его достоинства - он может

проигрывать клипы в

 

 

 

 

 

 

 

 

 

 

твою форму

 

 

 

 

 

 

(вперед-назад),

увеличивать/уменьшать

изображение,

любом

направлении

 

 

 

 

 

 

 

 

 

 

что придет

в голову.

За это приходится

захватывать

кадры и делать с ними все,

 

ни странно, эта особенность

 

интерфейсом WMP на твоей проге. Как

расплачиваться

 

 

 

 

 

 

 

 

сайте есть

 

 

 

 

 

 

 

 

 

 

 

. Разобраться с ним несложно, на

не помешала ему дожить

до 5 версии

 

 

 

 

довольно

 

 

 

 

 

 

подробная

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

Естественно, на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

документация

 

 

 

 

 

Да, кстати,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

100% english language.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

помимо

MTools

ó

 

Swift Software

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

есть и другие продукты. Загляни

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

í

 

 

 

 

 

 

 

 

 

 

à

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.html.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.de/downloads

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

www.swiftsoft

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Возможно, тебе понравится что-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

то еще. На этом все. Удачи!

 

.

.avi èç c:\Windows

Увлекательный фильм: clock

 

Ничего интереснее я не нашел :)

 

84

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

d

 

 

 

 

 

 

 

F

 

 

 

 

t

 

 

 

 

 

 

 

D

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

P

 

 

NOW!

o

Кодинг

 

Новые

 

 

 

 

 

 

w

to

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

o

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

.c

 

 

 

 

 

 

 

 

p

 

 

g

 

 

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

НОВЫЕ ПРОКЛЯТИЯ ДЛЯ С-КОДЕРОВ ПОД LINUX

 

 

 

 

 

 

 

Иван Скляров (Sklyarov@real.xakep.ru)

 

 

 

 

 

 

 

 

 

 

проклятия

 

 

 

 

 

 

 

 

 

-кодеров

ïîä

 

 

 

äëÿ Ñ

 

 

 

 

 

Linux

 

ñ ncurses

 

 

 

Быстрое введение в программирование

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

-кодеров

проскакивают вопросы, типа: "А как

ìíå

 

 

 

Периодически

в форумах для Linux

 

"А как мне сделать оконный интерфейс

отловить нажатие клавиши?",

 

программно

 

поддержку мыши?" и т.д. и т.п.

Íà ÷òî

 

 

 

 

 

 

â

консольной программе?", "А как мне включить

 

.

 

 

более опытные программеры

всегда отвечают одинаково: "man

ncurses"

 

 

 

 

 

 

 

 

 

.xakep.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

Иван Скляров (Sklyarov@real

 

 

 

Однако чтобы научиться

кодить с использованием

ncurses по одним лишь манам,

делать,

тот поймет

:)). Ncurses

гением (кто пробовал это

нужно быть

как минимум

 

 

 

 

параметров,

атрибутов

è ò.ä.,

поэтому

man больше

содержит сотни функций,

человек знает

 

 

 

 

 

. Íî åñëè

подходит в

качестве справки, когда уже знаешь,

что искать

 

 

не встречал

 

 

практически

что искать,

разве он будет спрашивать?

В то же время я

 

которые

бы обучали ncurses

îò

литературы

 

или толковых

статей на русском,

 

 

 

примерах.

Как правило, это либо

прилежно

простого к

 

сложному на реальных

к манам

 

 

лучшем

случае,

комментарии

выписанные

отрывки из man, либо, в

 

 

 

 

материалы по теме, заслуживающие

внимания

начинающих

(впрочем, кое-какие

 

 

 

 

.

кодеров, приведены

 

 

. Эта статья призвана

восполнить этот пробел

во врезке)

 

 

 

 

 

 

 

 

 

 

Подразумевается,

что язык C или C++ ты уже знаешь.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

История появления ncurses

 

 

 

 

 

для создания

-независимых программ

На первых UNIX-системах

терминально

 

 

только

 

самые

 

termcap,

предоставляющая

 

использовалась

база данных

 

многие

проги,

 

 

 

. Termcap

äî

сих пор используют

 

 

 

 

 

 

 

 

 

 

низкоуровневые возможности

 

с терминалами на более высоком уровне была

например, редактор vi. Для работы

 

 

 

 

 

 

 

 

возникла

создана надстройка

над termcap - база данных terminfo. На основе terminfo

 

 

 

 

 

curses

разрабатывалась

для обеспечения работы

библиотека curses. Первоначально

 

 

.

 

Позднее была

 

 

 

 

 

 

 

с экраном в игре rogue

и существовала

только на BSD-системах

 

"new

curses"

 

версия

 

 

 

 

.

Кстати,

создана ее расширенная

 

- ncurses (new curses)

 

 

 

 

 

Ncurses

 

 

 

(отсюда и название статьи).

 

переводится как "новые проклятия"

 

последний релиз можно найти по адресу:

разрабатывается по открытой лицензии,

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

www.gnu.org/software/ncurses/

 

 

 

 

 

 

 

 

 

 

 

Немного теории

è curscr (ñì. ðèñ.1).

В ncurses существуют два понятия экрана - stdscr

 

Рис.1. Схема экранов stdscr и curscr

 

 

 

 

 

 

 

Сurscr (текущий экран) - всегда содержит

образ экрана, отображающийся

в данный

 

 

â

 

- это экран,

 

расположенный

.

Stdscr (стандартный экран)

 

 

момент на терминале

 

 

 

 

 

как отобразить их

. На нем по умолчанию делаются все изменения перед тем,

 

 

îäíà

памяти

 

оптимизации: пока на curscr

показывается

на текущем экране. Это сделано для

 

 

 

 

 

 

 

 

 

 

86

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

P

D

 

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

NOW!

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NOW!

r

 

 

 

 

 

BUY

 

 

 

 

информация, на stdscr подготавливается другая. Для отображения

stdscr íà curscr

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

используется функция

refresh().

Â

ncurses также

широко

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

используется понятие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

îêíà.

Îêíî

- ýòî

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

m

 

часть экрана. По сути,

stdscr

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

è curscr ýòî òîæå

îêíà

размером с

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

 

 

экран.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

Точка с

координатами

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

df

 

 

 

 

e

 

 

 

(0, 0) всегда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

расположена в верхнем левом углу окна.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

Îêîí íà

экране

может

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

быть любое количество,

причем

они могут перекрываться.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

По умолчанию,

ncurses-îêíà íå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

имеют ни обрамления, ни цвета и

представляют

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

собой лишь пустой виртуальный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

на текущий

экран только

 

 

 

 

прямоугольник экрана. Для отображения из stdscr

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

одного окна служит функция wrefresh(win).

Вообще любая

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

функция в ncurses, которая

содержит префикс

 

 

 

 

 

 

 

 

Рис.2. Наша первая

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'w', относится к окну. Если

такого

программа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

префикса нет, то функция относится ко

всему

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

getch, erase

работают с stdscr,

 

 

 

 

 

 

экрану. Например, функции addch,

<stdio.h> â

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а аналогичные

функции waddch, wgetch, werase - с

программу не нужно. В

нашу прогу мы еще

подключаем хедер

<string.h>,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

т.к. далее

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

определенным окном (хотя в качестве определенного окна можно

задать и stdscr).

 

будем

использовать

функции

библиотеки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Некоторые функции могут

еще иметь префикс

'mv'

 

 

 

единственную функцию strlen,

 

 

обработки

строк,

à

 

точнее,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

помимо

 

какого-то

 

 

 

- это означает, что

функция,

определяющую длину строки.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

основного

действия,

 

изменяет

текущие

 

 

 

 

 

Ñ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Например,

функция mvaddstr(y, x,

str)

 

 

 

координаты (у, x).

 

помощью двух макросов #define

ìû

устанавливаем две

именованные

константы:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

заменяет собой две функции move(y, x) и

высоту и

ширину окна, в

котором

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

addstr(str),

аналогично

 

mvwaddstr(win,

работает

будет

наше послание.

Ò.ê.

 

библиотека ncurses

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y,

x,

str)

заменяет

wmove(win,

y,

x) è

с символьными

терминалами, то она не

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

waddstr(win, str).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

оперирует таким

понятием, как

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Также

íàäî

отметить

 

понятия

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

"точка" экрана, и поэтому все длины,

высоты и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

физического

 

è

 

логического

курсоров. Под

Понятно, что раз

 

ncurses

обходит

 

 

координаты задаются в символах.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

физическим

курсором

 

 

 

 

 

 

 

 

 

 

 

стороной

графический экран, то любые линии

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

понимается

курсор,

который

всегда

присутствует в

можно строить

только из символов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

системе,

причем

 

в единственном

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

псевдографики,

правда с

возможностью смены

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

экземпляре.

Логические

курсоры

создаются

цвета (в распоряжении имеется всего 8 цветов).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ncurses. Èõ

может быть

 

 

 

 

 

 

Обычный размер экрана в консоли

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

несколько,

по одному

íà

 

каждое окно.

Перемещением

- 80 колонок на 25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

физического

 

курсора

управляет

функция

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

линий, но на X-терминалах размеры могут быть любыми.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

физический курсор

 

 

mvcur. Äëÿ òîãî

чтобы

сделать

В функции main() мы

определяем строку, которую будем выводить в окне. Описываем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

невидимым,

используется функция curs_set.

my_win, êàê

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

указатель

на структуру WINDOW. Эта

структура хранит высоту, ширину,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

позицию

îêíà

è

 

 

åãî

контекст. Любое новое

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Наша первая

 

программа

 

 

 

 

 

 

инициализировано

 

 

 

îêíî

â

 

программе

должно быть

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с помощью WINDOW*. Stdscr и curscr тоже

получают указатели на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WINDOW, íî ýòî

 

происходит

автоматически, после

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выполнения

initscr().

Функция

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

initscr()

является

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

входом

â

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

По старинной хакерской

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ncurses.

 

Также

имеется

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

традиции мы напишем

программу, которая посылает этот

ncurses

-

 

endwin().

 

Îíà

 

 

функция, завершающая

работу

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

освобождает

память,

 

выделенную

 

 

ïîä

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мир куда подальше (см. листинг). Результаты

программы показаны

íà ðèñ.2.

 

восстанавливает режимы

 

терминала, которые были

 

 

 

ncurses,

 

è

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Äëÿ òîãî

чтобы

откомпилировать

 

 

 

 

 

 

 

 

 

 

 

 

äî

вызова

 

initscr().

Вызывать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

прогу с ncurses,

â

командной строке надо указать

initscr() è endwin() â

программе можно сколько угодно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ôëàã -lncurses.

Ò.å.

для нашей

программы будет

 

 

 

 

 

 

 

 

 

 

 

 

раз. Но когда

ncurses активна,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

òàê: gcc fuck.c -o

fuck -lncurses.

то категорически не рекомендуется

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рассмотрим по порядку, как

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I/O, òèïà printf, scanf è ïð.

 

 

пользоваться функциями стандартной

библиотеки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

работает "fuck.c". Код ты найдешь на врезке 1.

 

Используй

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

можно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

только функции библиотеки ncurses, иначе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include <curses.h> - любая программа с

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

столкнуться с ошибками вывода на экране.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ncurses должна включать этот заголовочный

Следующий

áëîê

 

 

инициализирует

 

цвета,

которые

ìû

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ôàéë.

Замечу,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

будем

 

использовать

â

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

что должен подключаться

 

именно

<curses.h>,

à íå <ncurses.h>.

программе.

Вызовом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Впрочем, можно

использовать

è

последний, т.к.

собираемся

 

 

 

 

 

 

 

 

функции start_color() мы оповещаем систему

î

òîì, ÷òî

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

системе и

является символической

он обычно тоже присутствует в

использовать

цвета (без этого вызова

система о нашем желании не

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ссылкой на файл curses.h.

Кроме того,

<curses.h>

узнает).

Затем с помощью

has_colors() выясняем,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

автоматически

подключает хедер

<stdio.h>,

поэтому

 

цвета. Так, например,

 

 

 

способен ли терминал

выводить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дополнительно

включать

BSD-системы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не дружат с цветами. Если такая возможность

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Листинг fuck.c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

врезка 1

Что такое ncurses?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include

<curses.h>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ncurses - ýòî

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include

<string.h>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

библиотека

с огромными возможностями, которая

позволяет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

создавать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#define

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

программы, не

зависящие от типа терминала.

Ncurses

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WHEIGHT 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

поддерживается

любой UNIX-like

системой. Наглядным примером работы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#define

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WWIDTH 40

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

библиотеки является Midnight Commander.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int main () {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WINDOW *my_win;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

char

*str="FUCK YOU, WORLD!";

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

initscr();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

start_color();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if (has_colors()) {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

init_pair(1, COLOR_CYAN, COLOR_RED);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

my_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

win=newwin(WHEIGHT, WWIDTH, (LINES-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WWIDTH)/2);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WHEIGHT)/2, (COLS-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

box(my_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

win, '*', '*');

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

wbkgd(my_win, COLOR_PAIR(1)|A_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mvwaddstr(my_win, WHEIGHT/2,

 

BOLD|A_BLINK);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(WWIDTH-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

wrefresh(my_win);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

strlen(str))/2, str);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

endwin();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

return 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MC активно юзает ncurses

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

to

 

 

 

 

 

o

 

Кодинг

 

 

 

 

 

 

 

P

 

 

 

 

 

 

NOW!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

o

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

НОВЫЕ ПРОКЛЯТИЯ ДЛЯ С-КОДЕРОВ ПОД LINUX

 

 

 

 

 

 

 

 

 

 

Иван Скляров (Sklyarov@real.xakep.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

åñòü,

то мы определяем цветовую пару (с помощью

init_pair), которую будем

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

â

 

 

 

. Пара представляет собой foreground и background

 

 

 

использовать

дальнейшем

 

. Список всех восьми цветов, которые

 

 

 

цвета

 

(голубой

и красный

в нашем случае)

 

 

 

 

 

можно найти в man

 

 

 

 

 

ñ

цветовой поддержкой,

 

 

 

можно использовать на терминалах

íàñ -

1) является

 

 

 

 

в функции

init_pair (ó

 

 

 

init_pair

 

â

 

подразделе

Colors. Число

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мы захотим использовать

 

 

 

 

идентификатором

цветовой пары, т.е. если в дальнейшем

 

 

 

 

 

 

номеру

(с помощью

 

 

 

 

 

 

 

 

обратиться

по этому

 

 

 

 

ýòó ïàðó, òî

ê

ней достаточно будет

пар можно инициализировать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Цветовых

 

 

 

 

специального атрибута COLOR_PAIR(n))

разные

 

 

.

 

 

 

 

 

 

 

любое количество, и все они должны иметь

номера

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рекомендуется

к изучению

 

 

 

 

 

"nCurses

.

Eric S. Raymond è Zeyd M. Ben-Halim

Intro"

 

-intro.html

.sposad.ru/doc/man/ncurses/ncurses

Перевод: http://spslug

 

 

 

(òàì æå èùè russian ìàíû ncurses).

 

 

Sven Goldt è ïð. "Linux Programmer's

Guide".

 

.koi8-r.txt

 

 

 

 

.rb.ru/books/lpg

 

Перевод: http://ufalug

 

 

 

 

 

-

 

-Programming

 

www.tldp.org/HOWTO/NCURSES

 

 

HOWTO/ - HOWTO ïî ncurses

 

 

.

 

 

 

(перевода не встречал)

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

С помощью функции newwin мы создаем

окно. Newwin имеет следующий формат:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WINDOW *newwin(int

nlines, int ncols, int begin_y, int begin_x);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

_x - координаты верхнего левого угла. nlines и ncols - число

линий и

 

 

 

 

 

 

 

 

 

 

_y è begin

 

 

 

 

 

 

 

 

 

 

 

 

 

subwin для создания подокон, что

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

колонок нового окна. Существует еще функция

 

 

 

 

 

 

 

 

 

 

 

 

 

бывает полезно

в некоторых случаях.

 

 

 

 

 

 

 

 

 

координаты окна так, чтобы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Далее

с помощью нехитрых вычислений мы определяем

è WWIDTH ìû

установили в

îíî

выводилось в середине экрана. Но если WHEIGHT

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

взялись переменные

LINES è COLS? Äåëî â òîì, ÷òî

начале программы, то откуда

 

 

 

 

 

 

 

переменные,

функция

 

initscr(), кроме всего прочего,

инициализирует эти две

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

устанавливая в них значения числа строк

и столбцов терминала

 

 

 

 

 

Функция box(win, vert, hor) очерчивает

указанное окно. В нашей программе окно по

 

звездочками - '*'. Если вместо символов

вертикали и горизонтали очерчивается

 

 

 

 

 

 

линиями.

Существуют и другие

указать нули, то окно будет

обрамлено прямыми

 

Более подробно

о них можно

 

 

 

 

 

 

 

 

 

.

 

аналогичные функции, например,

border/wborder

 

 

 

 

 

 

 

 

 

 

 

узнать в man.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-первых,

ñ

 

помощью

Функция

 

wbkgd устанавливает атрибуты окна. Во

 

 

 

ïàðó, à âî-

 

 

 

 

мы инициализируем

определенную ранее цветовую

COLOR_PAIR(1)

 

 

 

 

 

 

 

 

данном

случае его правильно было бы

 

 

 

 

OR '|' (õîòÿ â

вторых, с помощью символа

 

 

 

 

íàøå

окно является

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Таким образом,

назвать AND)

добавляем другие атрибуты

 

 

 

 

 

(A_BLINK).

Список других

 

 

яркости

(A_BOLD) è

 

мерцающим

окном

повышенной

 

 

 

 

 

 

 

 

 

 

 

 

 

_attr. В качестве атрибута можно указать и символ

атрибутов можно найти в man curs

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

в одинарных

кавычках, он станет фоновым

символом

îêíà.

Существует

огромное

 

 

 

 

помещает строку по

середине

Функция

mvwaddstr

 

 

 

как, впрочем, и для

 

 

 

 

функций

 

для вывода

символов и строк,

количество других

 

 

 

 

 

 

 

 

 

...

 

 

 

 

 

 

ввода.

Смотри man addch, addchstr, echochar,

printw, scanw

отображения

îêíà íà

После всех приготовлений

мы вызываем wrefresh(win) для

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не совсем корректен,

экране и завершаем

работу. Надо сказать, что такой выход

 

 

 

 

 

ïîä

 

 

 

 

 

 

 

 

 

освобождать память, отведенную

т.к. сначала нужно удалять все окна (точнее,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

них) с помощью оператора delwin(win)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работаем с клавой

 

 

 

 

OK, окна "рисовать" научились, а что насчет

клавиатуры? Посмотрим второй пример

 

 

 

 

 

 

. Ýòà

 

 

 

 

 

 

 

 

 

 

 

 

.ru или на диске к журналу)

 

(см. программу

keeper.c на нашем сайте www.xakep

 

окнами в

 

 

 

 

 

 

 

захламляет экран разноцветными

программа - хранитель экрана, который

 

 

 

 

 

 

 

 

 

 

 

 

 

случайном порядке (см. рис.3), пока

не будет нажата клавиша F10.

 

 

íàì

 

-lncurses.

 

Большинство инструкций

 

gcc

 

 

.c -o

keeper

 

 

 

Компиляция:

keeper

 

 

 

 

 

 

 

только новые, которые так или

знакомы из первого примера, поэтому рассмотрим

 

 

 

 

 

иначе связаны с клавой:

 

 

 

 

 

 

 

 

 

 

 

 

 

curs_set(0) - скрывает

физический курсор.

 

 

 

. Функция echo(), наоборот,

 

 

 

 

 

 

 

 

 

noecho() - отключает отображение

ввода пользователя

 

 

 

 

включает.

 

 

эта функция активна,

читаемый ввод немедленно

 

доступен

cbreak() - когда

 

 

äî

 

 

 

.

 

 

программе, иначе он будет буферизироваться

получения целой строки

 

íà

 

 

 

 

 

 

timeout(13) - работает в паре с функцией

getch(), блокирует работу программы

 

13 миллисекунд для принятия

ввода.

 

 

 

цифровую клавиатуру,

клавиши

 

 

использовать

keypad(stdscr, TRUE)

-

позволяет

 

 

 

 

 

 

 

клавиши.

 

 

 

 

перемещения курсора и

функциональные

 

помощью

 

 

 

 

 

В бесконечном

цикле мы считываем

одиночное нажатие клавиши с

 

 

 

 

 

 

 

 

 

 

getch(). Если нажата F10

(KEY_F(10)),

то выходим из цикла и завершаем работу.

 

_getch.

 

Макросы других клавиш (KEY_) можно

посмотреть в man curs

 

èç

 

после появления на экране удаляется

Хочу заметить, что каждое окно в цикле

 

 

 

 

 

 

.

 

 

 

 

. Это важно запомнить

 

 

 

 

памяти (delwin)

 

функция clear() с последующим

refresh() полностью

Перед выходом из программы

 

 

 

 

 

 

 

.

 

 

 

 

 

 

очищает экран

 

 

 

 

 

 

IDIOT

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Äëÿ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пожалуй,

самое частое применение

 

ncurses - это создание меню в программах

 

 

 

 

 

 

 

 

 

 

меню. Посмотрим работу этой

 

 

 

 

 

 

 

 

специальная библиотека

 

этого

в ней даже имеется

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

примере

(программу

idiot.c также бери с нашего сайта

 

библиотеки на третьем

 

 

 

 

 

 

 

 

 

и позволяет одним

 

 

 

 

выводит меню из 4 пунктов

 

xakep.ru или с диска). Idiot

 

 

 

 

 

 

 

íà

www.

 

 

 

 

 

 

 

 

 

CD-ROM или дисковод,

вывести все процессы

нажатием клавиши замаунтить

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

экран или показать текущую дату и время

(ñì. ðèñ.4)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ò.ê.

 

 

прога

 

предназначена

 

äëÿ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лентяев

è

 

чайников, которые

íå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

знают

команд,

òî

отсюда

 

è

åå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

название - Idiot.

 

использующие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Программы,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ìåíþ,

 

должны

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

библиотеку

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

компилиться

ñ

дополнительным

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ключом -lmenu,

т.е. в нашем случае:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

gcc idiot.c -o idiot

-lmenu -lncurses,

è

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

включать

 

 

заголовочный

 

ôàéë

Рис.4. Работает Idiot

 

 

 

 

 

 

 

 

 

 

<menu.h>. Этот заголовочный файл

 

 

 

 

 

 

 

 

 

 

автоматически

подключает

 

хедер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

<curses.h>, поэтому повторно его включать

не следует

 

 

 

по таким правилам:

меню, создаются

В общем случае программы, использующие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. Инициализировать

 

ncurses.

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Создать элементы меню, используя

new_item()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Создать меню, используя new_menu()

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. Поместить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

меню, используя menu_post()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5. Регенерировать

экран.

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6. Обработать пользовательские

запросы в цикле

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7. Убрать меню, используя menu_unpost()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8. Удалить меню, используя

free_menu() .

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9. Удалить элементы меню, используя

free_item()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10. Завершить ncurses.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Прежде чем выполнять второй пункт,

мы должны определить элементы меню в

 

 

äëÿ íåãî

память (с помощью calloc). В

массиве (у нас это *choice[]) и подготовить

 

 

 

 

 

 

subwin подокно, за которым

программе

мы создаем окно, а в этом окне с помощью

 

 

 

 

чтобы

удобно

áûëî

 

 

 

 

 

 

 

 

 

 

 

.

Это сделано для того,

закрепляем

ìåíþ

 

 

_menu_win)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(set

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выдерживать отступы от края окна.

 

 

 

 

и надпись

"F1 to exit"

ñ

цветами,

Чтобы вставить

 

заголовок

программы

 

 

 

 

 

 

 

wbkgd,

ìû

воспользовались

отличающимися

 

îò

установленных

функцией

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

â ïàðå.

 

 

 

 

 

 

 

 

 

 

 

 

инструкциями wattron и wattroff, работающими

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В цикле, с помощью инструкции

выбора switch, определяется

нажатие клавиш

 

 

 

 

 

ìåíþ

 

 

 

специальная

функция библиотеки

Если это "стрелка вниз", то вызывается

 

 

 

 

 

 

Ýòî

 

провоцирует

перемещение

menu_driver ñ

атрибутом

 

 

 

 

 

 

_ITEM.

 

 

REQ_DOWN

.

Аналогично

происходит

со "стрелкой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

указателя меню вниз на одну позицию

 

 

 

 

ENTER,

ñ

помощью

 

функции

вверх" (см. man

 

 

_driver).

Если нажата

 

 

menu

 

определяется

 

название

пункта меню

è

выбирается

 

 

 

 

 

 

_item())

 

 

item_name(current

команда,

которая

будет выполнена

â

функции

system. Çà

соответствующая

 

 

 

 

 

 

 

 

 

 

 

ê man.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

деталями обращайся

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Надо сказать, несмотря на то, что

Idiot написан в учебных целях, сейчас

ÿ åãî þçàþ

 

набирать

 

 

 

нажать

îäèí

раз кнопку, чем

постоянно

:). Действительно,

быстрее

 

 

 

 

 

 

 

 

 

понравится,

особенно если заточишь

 

утомительные команды. Поверь, тебе он тоже

 

 

 

 

;). Ïèøè,

если возникнут какие-то

 

его под себя. Это ведь ты теперь тоже умеешь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Помогу.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вопросы/осложнения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис.3. F10 прекратит безобразие

88

Соседние файлы в папке журнал хакер