Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 [ 178 ] 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242

15.18. Программа: tcapdemo 551

t> Смотри также-

Документация по модулю Win32::Process, входящая в поставки Perl для систем Microsoft Windows.

15.18. Программа: tcapdemo

Описание

Следующая программа очищает экран и рисует на нем до тех пор, пока не будет прервана. Она показывает, как использовать модуль Тегт::Сар для очистки экрана, перемещения курсора и записи в любую позицию экрана. В ней также используется рецепт 16.6.

Пример 15.9. tcapdemo

#!/usr/bin/perl -w

# tcapdemo - прямое позиционирование курсора

use POSIX; use Term-:Cap;

initO, # Инициализация Term:Сар,

zipO; # Рисование линий на экране.

finishO, # Последующая очистка.

exitO;

# Две вспомогательные функции Смысл clear screen очевиден, а

# clear end очищает до конца экрана.

sub clear screen { $tcap->Tputs(сГ, 1, «ВТООиТ) } sub clear end { $tcap->Tputs(cd, 1, «ВТОООТ) }

# Переместить курсор в конкретную позицию, sub gotoxy {

П)у($х, $у) = @ ;

$tcap->Tgoto(cm, $х, $у, .STDOUT);

# Определить скорость терминала через модуль POSIX и использовать

# для инициализации Term:;Cap. sub init {

$1 = 1;

Sdelay = (shiftO 0) . 0.005;

my Stermios = POSIX:.Termios->new();

Stermios->getattr;

my Sospeed = Stermios->getospeed;

Stcap = Term-Cap->Tgetent ({ TERM => undef, OSPEED => Sospeed }); Stcap->Trequire(qw(cl cm cd));



until Sinterrupted,

# Очистить экран sub finish {

gotoxy(0, Smaxrow),

clear end(),

t> Смотри также -

Документация по стандартному модулю Term::Cap; termcap(5) (если есть).

15.19. Программа: tkshufflepod

Эта короткая программа с помощью Тк выводит список всех заголовков =head1 в файле и позволяет изменить порядок их следования перетаскиванием. Клавища S сохраняет изменения, а q завершает программу. Двойной щелчок на элемен-

Пример 15.9 (продолжение)

# Рисовать линии на экране, пока пользователь

# не нажмет Ctrl-С sub zip {

clear screen(),

(Smaxrow, Smaxcol) = ($tcap->{ li} - 1, $tcap->{ co} - 1),

©chars = qw(. - / I \ ),

sub circle { push(@chars shift ©chars), }

Sinterrupted = 0,

$SIG{INT} = sub { ++$interrupted },

Scol = Srow = 0,

($row sign, $col sign) =(11),

do {

gotoxy(Scol Srow) print Schars[0]

select(undef, undef, undef Sdelay)

Srow += $row sign, Scol += $col sign,

If (Srow == Smaxrow) { $row sign = -1 circle }

elsif (Srow == 0 ) { Srow sign = +i, circle, }

if (Scol == Smaxcol) { $col sign = -1 circle, ) elsif (Scol == 0 ) { $col sign = +1 circle )



те списка выводит его содержимое в элементе Pod. Текст раздела записывается во временный файл, находящийся в каталоге /tmp; файл удаляется при уничтожении элемента Pod.

При запуске программе передается имя просматриваемого pod-файла:

% tkshufflepod chap15 pod

Мы часто использовали эту программу при работе над книгой. Исходный текст программы приведен в примере 15.10.

Пример 15.10. tkshufflepod

#1/usr/bin/perl -w

# tkshufflepod - изменение порядка разделов =head1 в pod-файле

use Тк use strict,

# declare variables

my Spodfile, # Имя открываемого файла

my $m, # Главное окно

my $1, # Элемент Listbox

my ($up, $down) # Перемещаемые позиции

my ©sections, # Список разделов pod

my $all pod # Текст pod-файла (используется при чтении)

# Прочитать pod-файл в память и разбить его на разделы Spodfile = shift II - ,

undef $/

open(F, < Spodfile )

or die Can t open Spodfile S\n Sall pod = <F>, close(F)

©sections = split(/(?==head1)/, $all pod),

# Превратить ©sections в массив анонимных массивов Первый элемент

# каждого массива содержит исходный текст сообщения а второй -

# текст следующий за =head1 (заголовок раздела)

foreach (©sections) { /( *)/,

S = [ S , SI ]

# Запустить Тк и вывести список разделов Sm = MainWindow->new(),

SI = Sm->Listbox( -width => 60)->pack( -expand => 1, -fill => both ),



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 [ 178 ] 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242