Интернет-журнал "Домашняя лаборатория", 2007 №5
Шрифт:
($sr, $cr) = unpack("CC", $reg);
printf "%x\n%x", $sr, $cr;
$cr |= 0x20; # bi-direct
$reg = pack("CC", 0x01, $cr); # SOH + control byte
print LPT $reg;
print LPT "Hello, world!\r";
sleep 3000;
close LPT;
warn " ";
Обратите внимание, что в команде чтения read размер буфера дан отрицательным, это является просьбой к серверу вернуть значения контрольного регистра и регистра чтения (два байта). Естественно, что сервер понимает это (смотрите программу этого сервера). Поскольку с сервера будет получена текстовая строка, переменная $reg была сделана текстовой, путем записи в нее пары пробелов.
Для
Знак + в начале имени файла означает, что файл нужен для чтения и записи. Операция |= (битовое «или»), просто сокращенная форма конструкции $сг = $сг | 0x20.
Урок 6. Последовательный порт
Последовательный порт (RS-232) тоже может быть использован для управления некоторыми устройствами, тем более что некоторые современные измерительные приборы имеют встроенный интерфейс для него. В нижеследующем примере использован другой подход к проблеме доступа к регистрам порта. В этом подходе первые 2 байта ввода/вывода содержат данные контрольного регистра, другие 2 байта — получаемые/посылаемые портом данные.
#Lesson 6
open(СОМ, "+#СОМ1") || die "";
$sr =2; # -1 for serial register and -1 or 0 for data means do not set/send
$sr <<= 16; # first 2 bytes are register, second 2 bytes are data
# actually for setting/sending is used only second byte in pair
print COM $sr; # DTR is set, it works like printf(COM "%d", $sr);
$str = "";
read(COM, $str, 12); # read serial register and data as decimal string
$sr = dec($str) >> 16; # converts string to bytes and gets register
# first 2 bytes are register, second 2 bytes are data
printf "0x%x", $sr;
close COM;
warn " ";
Операции << и >> производят сдвиг битов числа, соответственно влево и вправо на указанное количество позиций, добавляя на освободившиеся места нули. Каждый сдвиг это, по сути, умножение (влево) или деление (вправо) на 2.
Урок 7. Ввод-вывод звуковой карты
Нижеследующий скрипт считывает 160 байтов из звуковой карты и отправляет на нее, через мини-сервер, тоже 160, случайных байтов. Этого достаточно, чтобы услышать скрип в динамике.
#Lesson 7
open(AUDIO, "+#AUD1") || die "";
$str = "";
read(AUDIO, $str, 160);
@x = unpack("Cl60", $str);
printf "0x%x", $x[10];
srand;
for($idx =0; $idx < 160; $idx++) {
$x[$idx] += rand(50) — rand(50);
}
$str = pack("C160", 0x);
write(AUDIO, $str, 160);
close AUDIO;
warn " ";
В
этом примере для вывода используется команда write, обратная по смыслу команде read, но аналогичная по формату.Обратите внимание, на использование переменной $х в команде printf. Это означает 10 порядковая переменная (или 11 по счету, поскольку в QSL индексы считаются с нуля) массива переменных @х, то есть @х можно записать как $х[].
В блоке, далее, это и используется.
Прим. ред.: Во всех примерах, перед исполнением замените кавычки на нормальные, поскольку те, что присутствуют, не всегда соответствуют требуемым, некоторые были заменены MS Word.
ТИХОЕ ПОМЕШАТЕЛЬСТВО
Полный справочник по уходу за пресноводными тропическими рыбами
М. Бейли, П. Бергресс
Содержание рыб — любимое занятие людей всех возрастов и всех слоев общества. Оно позволяет иметь домашних животных даже тем, кто по разным причинам — из-за нехватки места, плохого состояния здоровья и т. п. — не имеет возможности держать собаку или кошку. Ведь практически в любом доме можно найти место для маленького аквариума. С другой стороны, для кого-то это занятие может превратиться в хобби, что непременно приведет к изменениям в жизни аквариумиста, проявившемся, например, в покупке огромного демонстрационного аквариума для гостиной или множества маленьких аквариумов для мальков, в постройке специального «рыбьего домика» или устройстве большого пруда в саду, или даже ко всему этому вместе взятому — в зависимости от того, как далеко заведет энтузиаста его увлечение.
В этой книге речь пойдет только об одном аспекте аквариумистики, а именно — о содержании пресноводных тропических рыб. Правда, часть информации, данной в книге, вполне можно применить и к другим вариантам содержания рыб (например, в аквариумах с тропической морской и холодной морской водой, с солоноватой водой, с холодной пресной водой и в прудах). В данной книге учитывается огромное количество и большое разнообразие представителей группы тропических пресноводных рыб и гарантируется охват этой специфической области.
Рыбы радикально отличаются от других распространенных домашних животных тем, что они живут в воде и поэтому не могут разделить с нами нашу непосредственную окружающую среду. Это означает, что их нельзя взять на руки и погладить, или бросить им палку, чтобы они принесли нам ее обратно, или взять их с собой в автомобильную поездку. Но вскоре становится очевидно, что они замечают человеческую деятельность вокруг и реагируют на приближение своего хозяина — особенно в часы кормления. В то же время они спокойны, их не нужно приучать к дому, они не портят мебель, не кусают посетителей, не воруют пищу с кухни. Однако они, разумеется, нуждаются в «системе жизнеобеспечения», которой для них является аквариум. Заметим при этом, что хорошо оформленный и правильно содержащийся аквариум, заполненный яркими, здоровыми рыбами, находящимися в постоянном движении и ведущими повседневную жизнь почти так же, как в природе, может стать не только украшением гостиной, но и центром интересной деятельности. Он даст вам возможность создать прекрасный подводный сад (сами по себе водные растения — захватывающая тема), а также послужит учебным пособием, если в доме есть дети.