1
0
Fork 0

Œ®© ᠩâ, çâ® 㤠«®áì ¯à®ç¨â âì

This commit is contained in:
Alexander Yakovlev 2018-08-28 22:21:18 +07:00
commit ead6f5ccd1
58 changed files with 6610 additions and 0 deletions

14
500.html Normal file
View File

@ -0,0 +1,14 @@
<html>
<head><title>Ошибка 500</title>
<meta http-equiv="Content-Type" content='text/html; charset=windows-1251'>
<link type="text/css" rel="stylesheet" href="white.css">
</head>
<body>
<h1>Ой</h1>
Похоже,что произошла ошибка №500.<br>
Эта ошибка возникает из-за дыр в сценариях perl.<br>
Прошу вас написать автору на oreolek&lt;at&gt;gmail.com,указав введенную команду.Обнаруженные дыры обычно довольно быстро исправляются.
Пока же вернитесь назад и продолжите чтение.<br>
С уважением,<br>
<i>Oreolek.</i>
</body>

1744
Blog.pdb Normal file

File diff suppressed because it is too large Load Diff

1744
Blog.pdm Normal file

File diff suppressed because it is too large Load Diff

BIN
Gear.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

98
Raven.svg Normal file
View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="744.09448819"
height="1052.3622047"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.45.1"
sodipodi:docbase="C:\Alex\My site_Mk3"
sodipodi:docname="Raven.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.98994949"
inkscape:cx="404.42157"
inkscape:cy="698.86405"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1024"
inkscape:window-height="721"
inkscape:window-x="796"
inkscape:window-y="-4" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 213.14219,265.45335 L 213.14219,265.45335 L 79.802051,260.40259 C 207.08127,205.85435 208.09142,206.8645 208.09142,206.8645 C 243.44676,133.12337 299.00515,136.15382 299.00515,136.15382 C 440.00243,134.70561 403.04633,214.92758 412.14224,216.96602"
id="path2160"
sodipodi:nodetypes="cccccc" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path2162"
sodipodi:cx="302.03561"
sodipodi:cy="202.8239"
sodipodi:rx="29.294424"
sodipodi:ry="18.182745"
d="M 331.33004 202.8239 A 29.294424 18.182745 0 1 1 272.74119,202.8239 A 29.294424 18.182745 0 1 1 331.33004 202.8239 z" />
<path
sodipodi:type="arc"
style="fill:#000000"
id="path2164"
sodipodi:cx="299.00516"
sodipodi:cy="203.32896"
sodipodi:rx="7.0710678"
sodipodi:ry="16.667517"
d="M 306.07623,203.32896 A 7.0710678,16.667517 0 1 1 305.83039,198.97226 L 299.00516,203.32896 z"
sodipodi:start="0"
sodipodi:end="6.0187242" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 410.12193,212.92542 C 407.09148,312.93052 524.26918,413.94577 524.26918,413.94577 L 589.92909,217.97618 L 539.42146,432.12852 L 638.41641,299.79854 L 545.48237,440.20974 L 705.08648,389.70211 L 705.08648,389.70211 L 552.55344,449.30111 L 552.55344,449.30111 L 708.11693,465.46355 L 536.391,458.39249 C 438.4062,503.84936 461.63971,550.31637 461.63971,550.31637 L 492.95444,568.49911 L 444.46712,553.34683 L 422.24376,579.61079 L 429.31483,547.28591 L 395.9798,569.50927 L 443.45697,488.69706 C 357.594,460.41279 328.29958,480.61584 328.29958,480.61584 L 362.64476,566.47881 L 330.31988,541.22499 L 308.09653,571.52957 L 307.08637,541.22499 L 281.83256,556.37728 L 297.995,526.07271 L 299.00515,481.62599 C 236.3757,449.30111 239.40615,457.38233 239.40615,457.38233 C 128.28937,366.4686 190.91883,321.01174 190.91883,321.01174 C 243.44676,281.61579 213.14219,264.4432 213.14219,264.4432"
id="path2166"
sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 80.812204,260.40259 L 207.08127,236.15893 L 209.10158,204.8442"
id="path2190" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 214.17264,265.43304 L 206.09142,238.15893"
id="path2192" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.33059978px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 244.11207,349.96131 C 421.15514,524.08642 441.78152,385.43125 441.78152,385.43125 L 244.11207,349.96131 z "
id="path2194" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
archive/gear16.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

BIN
archive/raven.fla Normal file

Binary file not shown.

37
black.css Normal file
View File

@ -0,0 +1,37 @@
<style type="text/css">
* {
color: #CCC;
font-family: monospace;
}
body {
background: #222;
font-family: monospace;
font-size: 100%;
}
input {
width: 80%;
background: none;
border: none;
font-size: 100%;
font-family: monospace;
}
textarea{
background: none;
border: none;
font-size: 100%;
font-family: monospace;
}
#err{
color:#B22;
}
#hint {
color: #555;
font-size: 90%;
}
#hint a {
color: #44B;
}
#hint a:visited {
color: #646;
}
</style>

1
blogdata/.htaccess Normal file
View File

@ -0,0 +1 @@
deny from all

2
blogdata/200803.txt Normal file
View File

@ -0,0 +1,2 @@
3_Тест №2_Сегодня я тружусь в поте лица над переписыванием PerlBlog 1.09.<br />Помимо задач,которые поставил я перед собой по переделке всего сайта,у меня теперь есть <a href="http://security.uz/bugtraq/default.asp?id=11343">новые</a><br />Первые шаги к исправлению уже сделаны - эти уязвимости теперь заблокированы.Осталось только сделать это...кошерно,так скажем.Чтобы нелегальный запрос не выносил весь блог в исходные коды какого-то левого сайта,а просто вызывал ошибку.<br />По окончании работ я отошлю мою версию авторам PerlBlog.___03/31/2008-19:25_1_&nbsp;
2_28 марта 2008_Здравствуйте!<br />Это - лишь первый пост в этом блоге,и я пишу его больше из тестовых целей,чем из практических.<br />Немного техники.<br />Блог выполнен при помощи движка PerlBlog 1.09.Движок это распространяется по лицензии GNU\GPL,почему я взял на себя смелость адаптировать его под мой сайт,переписав всю "внешнюю" часть и переведя большинство из скриптов (сообщения для администратора я не трогал:у меня нет проблем в английском).Апгрейд дизайна тоже находится в моих планах,но не в данный момент.Говоря честно,в моих планах находится создание целого комплекта дизайнов для моего сайта,на выбор читателя.<br />Также я думаю перенести сюда все мои статьи с <a href="http://oreolek.livejournal.com">LiveJournal</a>...еще много чего я планирую.<br />С уважением,<br />Александр Яковлев___03/28/2008-18:43_2_&nbsp;

2
blogdata/200804.txt Normal file
View File

@ -0,0 +1,2 @@
6_Сайт готов!_Итак,сайт готов.Единственное,что осталось сделать - это счетчик посещений,вещь нужная единственно мне,а не другим.На выход сайта в сеть это не повлияет.В порядке опять же теста опишу разные интересные новшества,которые появились на моем сайте и в движке PerlBlog с моей помощью :-):<br /><br /><ul><br /><li>Вам повезёт!</li><br /><br />Я долго хихикал,когда мне в голову пришла эта идея.<br />Реализовать было ее просто:мой скрипт fortune содержит нужную функцию,я вставил ее без изменений.У нее есть один плюс и один минус.Минус в том,что я думаю,что она будет тормозить,когда общее количество постов в блоге будет большим.Но это наступит только через полгода мимнимум,и то если я буду писать новые статьи ежедневно.Плюс в том,что она никогда не выдаст ___04/01/2008-20:39_0_&nbsp;
5_Список некоторых сокращений_Только что я наткнулся на тройку сокращений...в моей голове выстроилась цепочка подобнейших английских аббревиатур.И тут я понял,как это смешно.И решил составить здесь списочек.<br /><br />Итак,начнем с самых распространенных.После дам перевод.<br />What You See Is What You Get - WYSIWYG<br />Keep It Simple, Stupid - KISS<br />Do the simplest thing that could possibly work - DTSTTCPW <br />Represent concepts once and only once - OAOO<br />You aren't going to need it - YAGNI <br /><br />Что Хочешь,То и Получаешь - ЧХТП<br />Храни всё тупым и простым - ХВТП<br />Делай Самые Простые Вещи,которые могут работать - ДСПВКМР<br />Делай концепт лишь однажды - ДКЛО<br />Тебе это не понадобится - ТЭНП<br /><br />Список буду пополнять.IMHO,это будет хорошей идеей.___04/01/2008-13:14_0_&nbsp;

0
blogdata/200806.txt Normal file
View File

6
blogdata/about.txt Normal file
View File

@ -0,0 +1,6 @@
<p>Я приветствую Вас на моем сайте.Здесь я выложил свои основные компьютерные разработки.Ссылка на мои литературные изыски находится слева - она перенесет вас на сайт проекта <a href="http://zhurnal.lib.ru">&quot;Самиздат&quot;</a> Максима Мошкова,где я разместил некоторые из своих произведений. </p>
<p>Слева (возможно,вы отключили картинки и не можете посмотреть) находится навигационное меню.Если вам интересно,в нем 8 пар картинок.Если вы не хотите его использовать,внизу страницы я его продублировал. </p> <p>Если вам интересно,что я еще сделал...я написал несколько статей для <a href="http://absurdopedia.wikia.com/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:Contributions/Oreolek">Абсурдопедии</a>.Их там же можно и посмотреть.Все статьи я не помню,но,например,<acronym title="Центр По Подготовке Боевых Ниндзя">ЦПБН</acronym> - это моя. Я еще про <acronym title="Международный Универсальный Сертификат Отличного Работника">МУСОР</acronym> там не написал. Может,потом как-нибудь статья появится.Абсурдопедия мне в целом нравится,но там встречаются похабные шуточки или матерные.Или пошлые.А всего этого я не делаю сам и не люблю,когда делают другие. </p>
<p>Также посмотрите в мой блог - там могут быть интересные статьи.
В будущем я планирую поработать над artwork.</p>
<br />
<img src="Signature.gif" alt="Моя подпись" />

4
blogdata/all.txt Normal file
View File

@ -0,0 +1,4 @@
6_Сайт готов!_Итак,сайт готов.Единственное,что осталось сделать - это счетчик посещений,вещь нужная единственно мне,а не другим.На выход сайта в сеть это не повлияет.В порядке опять же теста опишу разные интересные новшества,которые появились на моем сайте и в движке PerlBlog с моей помощью :-):<br /><br /><ul><br /><li>Вам повезёт!</li><br /><br />Я долго хихикал,когда мне в голову пришла эта идея.<br />Реализовать было ее просто:мой скрипт fortune содержит нужную функцию,я вставил ее без изменений.У нее есть один плюс и один минус.Минус в том,что я думаю,что она будет тормозить,когда общее количество постов в блоге будет большим.Но это наступит только через полгода мимнимум,и то если я буду писать новые статьи ежедневно.Плюс в том,что она никогда не выдаст ___04/01/2008-20:39_0_&nbsp;
5_Список некоторых сокращений_Только что я наткнулся на тройку сокращений...в моей голове выстроилась цепочка подобнейших английских аббревиатур.И тут я понял,как это смешно.И решил составить здесь списочек.<br /><br />Итак,начнем с самых распространенных.После дам перевод.<br />What You See Is What You Get - WYSIWYG<br />Keep It Simple, Stupid - KISS<br />Do the simplest thing that could possibly work - DTSTTCPW <br />Represent concepts once and only once - OAOO<br />You aren't going to need it - YAGNI <br /><br />Что Хочешь,То и Получаешь - ЧХТП<br />Храни всё тупым и простым - ХВТП<br />Делай Самые Простые Вещи,которые могут работать - ДСПВКМР<br />Делай концепт лишь однажды - ДКЛО<br />Тебе это не понадобится - ТЭНП<br /><br />Список буду пополнять.IMHO,это будет хорошей идеей.___04/01/2008-13:14_0_&nbsp;
3_Тест №2_Сегодня я тружусь в поте лица над переписыванием PerlBlog 1.09.<br />Помимо задач,которые поставил я перед собой по переделке всего сайта,у меня теперь есть <a href="http://security.uz/bugtraq/default.asp?id=11343">новые</a><br />Первые шаги к исправлению уже сделаны - эти уязвимости теперь заблокированы.Осталось только сделать это...кошерно,так скажем.Чтобы нелегальный запрос не выносил весь блог в исходные коды какого-то левого сайта,а просто вызывал ошибку.<br />По окончании работ я отошлю мою версию авторам PerlBlog.___03/31/2008-19:25_1_&nbsp;
2_28 марта 2008_Здравствуйте!<br />Это - лишь первый пост в этом блоге,и я пишу его больше из тестовых целей,чем из практических.<br />Немного техники.<br />Блог выполнен при помощи движка PerlBlog 1.09.Движок это распространяется по лицензии GNU\GPL,почему я взял на себя смелость адаптировать его под мой сайт,переписав всю "внешнюю" часть и переведя большинство из скриптов (сообщения для администратора я не трогал:у меня нет проблем в английском).Апгрейд дизайна тоже находится в моих планах,но не в данный момент.Говоря честно,в моих планах находится создание целого комплекта дизайнов для моего сайта,на выбор читателя.<br />Также я думаю перенести сюда все мои статьи с <a href="http://oreolek.livejournal.com">LiveJournal</a>...еще много чего я планирую.<br />С уважением,<br />Александр Яковлев___03/28/2008-18:43_2_&nbsp;

3
blogdata/clear.js Normal file
View File

@ -0,0 +1,3 @@
<!--
edCanvas = document.getElementById('name');
//-->

BIN
blogdata/comments.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 B

5
blogdata/footer.txt Normal file
View File

@ -0,0 +1,5 @@
<h3 align="center"><a href="gostinaya.pl">Âåðíóòüñÿ íà ñàéò</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="?random">Ñëó÷àéíûé ïîñò</a></h3>
<p><em>
<a href="mailto:oreolek@gmail.com">Àëåêñàíäð ßêîâëåâ,2008 ãîä </a></em><br />Jabber: oreolek@jabber.ru<br />ICQ: 207-138-403</p>
</body>
</html>

View File

@ -0,0 +1 @@
deny from all

36
blogdata/messages/2.txt Normal file
View File

@ -0,0 +1,36 @@
<threadinfo>
<num>2</num>
<headerfile>200803</headerfile>
<subject>28 марта 2008</subject>
</threadinfo>
<msg>
<name>Здравствуйте!<br />Это - лишь первый пост в этом блоге,и я пишу его больше из тестовых целей,чем из практических.<br />Немного техники.<br />Блог выполнен при помощи движка PerlBlog 1.09.Движок это распространяется по лицензии GNU\GPL,почему я взял на себя смелость адаптировать его под мой сайт,переписав всю "внешнюю" часть,немного оптимизировав внутренности и переведя большинство из скриптов (сообщения для администратора я не трогал:у меня нет проблем в английском).Апгрейд дизайна тоже находится в моих планах,но не в данный момент.Говоря честно,в моих планах находится создание целого комплекта дизайнов для моего сайта,на выбор читателя.<br />Также я думаю перенести сюда все мои статьи с <a href="http://oreolek.livejournal.com">LiveJournal</a>...еще много чего я планирую.<br />С уважением,<br />Александр Яковлев</name>
<email></email>
<website></website>
<image></image>
<date>03/28/2008-18:43</date>
<body>
</body>
</msg>
<msg>
<name>Grom PE</name>
<email></email>
<website></website>
<date>03/30/2008-22:30</date>
<body>
Ух ты, а комментарии работают?<br />А что так много <code>тегов</code>? Не <b>жирно</b> будет?<br />Зачем столько настроек у <a href="http://google.com">ссылок</a>?<br />Обычный юзер <abbr title="совсем запутается, жалко ведь!">запутается</abbr>.
</body>
</msg>
<msg>
<name>Oreolek</name>
<email>oreolek AT gmail.com</email>
<website></website>
<date>03/30/2008-22:36</date>
<body>
Это я не менял,это уже настройки PerlBlog.<br />Но чувствую,что я уже выпущу щас версию 1.10.Количество изменений огромно.
</body>
</msg>

65
blogdata/messages/3.txt Normal file
View File

@ -0,0 +1,65 @@
<threadinfo>
<num>3</num>
<headerfile>200803</headerfile>
<subject>Тест №2</subject>
</threadinfo>
<msg>
<name>Сегодня я тружусь в поте лица над переписыванием PerlBlog 1.09.<br />Помимо задач,которые поставил я перед собой по переделке всего сайта,у меня теперь есть <a href="http://security.uz/bugtraq/default.asp?id=11343">новые</a>.<br />Первые шаги к исправлению уже сделаны - эти уязвимости теперь заблокированы.Осталось только сделать это...кошерно,так скажем.Чтобы нелегальный запрос не выносил весь блог в исходные коды какого-то левого сайта,а просто вызывал ошибку.<br />По окончании работ я отошлю мою версию авторам PerlBlog.</name>
<email></email>
<website></website>
<image></image>
<date>03/31/2008-19:25</date>
<body>
</body>
</msg>
<msg>
<name><h1>ИМЯ МОЕ</h1></name>
<email></email>
<website></website>
<date>03/31/2008-22:57</date>
<body>
></script><br />Это - тест движка на эксплойтность.<br />Я добавил проверку имени и тела коммента.Раньше здесь не было даже проверки на разрешенные теги HTML!Кошмар.<br />Теперь я оставил только их.Впрочем,атрибуты я не отслеживаю.Но onmouseout без > и > не будет работать.
</body>
</msg>
<msg>
<name>Grom PE</name>
<email></email>
<website></website>
<date>06/11/2008-20:32</date>
<body>
Всё повырезало, зачем тогда предпросмотр?
</body>
</msg>
<msg>
<name>Grom PE</name>
<email></email>
<website></website>
<date>06/11/2008-20:32</date>
<body>
<code><br />.loop2:<br /> mov eax, ebx<br /> and eax, 1<br /> imul eax, 0FFFFFFh<br /> push eax<br /></code>
</body>
</msg>
<msg>
<name>Grom PE</name>
<email></email>
<website></website>
<date>06/11/2008-20:36</date>
<body>
А теперь посмотри в код.<br />Не, HTML надо убирать и ставить BB-код вместо него, определенно.<br /><br />&#3232;_&#3232;
</body>
</msg>
<msg>
<name>Grom PE</name>
<email></email>
<website></website>
<date>06/11/2008-20:42</date>
<body>
Кстати, куда всё делось кроме этого поста в блоге?
</body>
</msg>

26
blogdata/messages/5.txt Normal file
View File

@ -0,0 +1,26 @@
<threadinfo>
<num>5</num>
<headerfile>200804</headerfile>
<subject>Список некоторых сокращений</subject>
</threadinfo>
<msg>
<name>Только что я наткнулся на тройку сокращений...в моей голове выстроилась цепочка подобнейших английских аббревиатур.И тут я понял,как это смешно.И решил составить здесь списочек.<br /><br />Итак,начнем с самых распространенных.После дам перевод.<br />What You See Is What You Get - WYSIWYG<br />Keep It Simple, Stupid - KISS<br />Do the simplest thing that could possibly work - DTSTTCPW <br />Represent concepts once and only once - OAOO<br />You aren't going to need it - YAGNI <br /><br />Что Хочешь,То и Получаешь - ЧХТП<br />Храни всё тупым и простым - ХВТП<br />Делай Самые Простые Вещи,которые могут работать - ДСПВКМР<br />Делай концепт лишь однажды - ДКЛО<br />Тебе это не понадобится - ТЭНП<br /><br />Список буду пополнять.IMHO,это будет хорошей идеей.</name>
<email></email>
<website></website>
<image></image>
<date>04/01/2008-13:14</date>
<body>
</body>
</msg>
<msg>
<name>Grom PE</name>
<email></email>
<website></website>
<date>06/11/2008-20:03</date>
<body>
Русские сокращения у тебя получились совсем непроизносимые.<br /><br />Кстати, не советую использовать сокращения - они нужны только тем, кто печатает со скоростью 100 знаков в минуту или еще медленней.
</body>
</msg>

26
blogdata/messages/6.txt Normal file
View File

@ -0,0 +1,26 @@
<threadinfo>
<num>6</num>
<headerfile>200804</headerfile>
<subject>Сайт готов!</subject>
</threadinfo>
<msg>
<name>Итак,сайт готов.Единственное,что осталось сделать - это счетчик посещений,вещь нужная единственно мне,а не другим.На выход сайта в сеть это не повлияет.В порядке опять же теста опишу разные интересные новшества,которые появились на моем сайте и в движке PerlBlog с моей помощью :-):<br /><br /><ul><br /><li>Вам повезёт!</li><br /><br />Я долго хихикал,когда мне в голову пришла эта идея.<br />Реализовать было ее просто:мой скрипт fortune содержит нужную функцию,я вставил ее без изменений.У нее есть один плюс и один минус.Минус в том,что я думаю,что она будет тормозить,когда общее количество постов в блоге будет большим.Но это наступит только через полгода мимнимум,и то если я буду писать новые статьи ежедневно.Плюс в том,что она никогда не выдаст "битой" ссылки.<br />Когда я рисовал кнопки,мне немного стало стыдно за свою мнительность."Мои программы","Мои сочинения","Мои друзья"...Продолжать это кнопкой "Мне повезёт!" я не захотел,почему и изменил текст.В конце концов,это вы читаете мой блог,а не я его пишу.<br /><br /><li>Улучшенная безопасность</li><br /><br />Как было написано в одном из предыдущих постов,я нашел несколько эксплойтов на security.uz на тему PerlBlog.Просмотрев тщательно исходный код,я понял,что это - не просто уязвимости,а целые бреши в безопасности.Самой крупной было полное отсутствие фильтрации комментариев на запрещенные теги.Любой пользователь мог написать в теле комментария,например,"&lt;script&gt;".Я пресек эту возможность на корню.Также запрещены угловые скобки и кавычки в имени комментатора.Хотите - пользуйтесь <code>&lt; &gt; &quot;</code>.<br />Также были исправлены две другие уязвимости и добавлены некоторые превентивные проверки.<br /><br /><li>"Любой браузер"</li><br /><br />Кнопка anybrowser.org мне не нравилась.Стильная,да,но все же она не вписывалась в дизайн.К тому же,она была написана по-английски.Русские варианты мне там вообще не нравились.Поэтому я сделал свою кнопку.<br />Конечно,она <i>тоже</i> не вписывается в цветовую схему сайта,но хотя бы своя,родная!Хотя,по правде,я просто забыл следить за цветовой схемой и оставил предыдущую.Лого Netscape я стирал вручную,по точкам.Пиксель-арт рулит!<br /><br />P.S. Сайт по-прежнему виден в любом браузере,так как контент и код совершенно не изменен.Блог может выдавать некоторые ошибки в позициях таблиц,но все равно выглядит почти одинаково везде.<br /><br /><li>Новая структура</li><br /><br />Пользуясь случаем,я немного видоизменил структуру сайта.Сделал его более целенаправленным.Раньше здесь было довольно много разделов "убить место",просто для того,чтобы было не так пусто.Сейчас же надобность в них отпала.<br /><br /><li>Новый дизайн</li><br /><br />Предыдущий дизайн был сверстан "левой задней ногой",то есть- на бегу и на коленке (в буквальном значении этого выражения).Сейчас я продумал всё.И,хотя мне до сих пор многое не нравится,так уже намного лучше.В моих планах сделать несколько тестовых дизайн-макетов.Я пока еще не выбрал,как я буду их менять - переключать подключаемые внешние файлы с помощью Perl либо менять стили CSS через Javascript.К стыду своему,я плохо знаю CSS,поэтому выбор труден (CSS стили можно менять и через браузер,а Perl-решение потребует множества внешних файлов).Пока думаю.<br /><br /><li>Куча возможностей</li><br /><br />Например,я могу не только проверять комментарии на наличие тегов,но и заменять в них :-) на рисованные рожицы (правда,прежде всего мне надо их нарисовать).Могу меня дизайн страниц.Могу добавить кучу всяких новых фич,например,форум или голосование...но точно не буду,это здесь незачем.Могу нарисовать себе GUI-программу для постинга эксклюзивно в мой блог (это намного проще,чем можно себе представить - от пары секунд до дня работы).Могу добавить еще админов и постеров,чтобы блог был не только моим (чёрт знает зачем...но переработать надо будет по минимуму).Могу...добавить не только статьи,но и аудио,видео и фото с возможностями комментирования (опять же ничего изменять не придется вообще,только закачать на сайт и дать ссылку\вставить в пост).Как видите,возможности огромны.<br /></ul><br />P.S.Когда я это запостил,я обнаружил хороший баг PerlBlog:ограниченность размера сообщения.Есть над чем работать.</name>
<email></email>
<website></website>
<image></image>
<date>04/01/2008-20:39</date>
<body>
</body>
</msg>
<msg>
<name>Grom PE</name>
<email></email>
<website></website>
<date>06/11/2008-20:12</date>
<body>
CSS квеста конфликтует с блогом, надо бы поправить.<br /><br />А еще неплохо было бы имя запоминать в куках и подставлять каждый раз.<br /><br />> заменять в них :-) на рисованные рожицы<br />О нет, только не это! Графические смайлы - идиотизм мира сего. Текстовых хватит.
</body>
</msg>

16
blogdata/messages/7.txt Normal file
View File

@ -0,0 +1,16 @@
<threadinfo>
<num>7</num>
<headerfile>200806</headerfile>
<subject>Новое воплощение</subject>
</threadinfo>
<msg>
<name>Итак,этот сайт пережил новое воплощение!<br />Новый дизайн,новый движок,новый хост (не без этого).<br />Здесь еще не всё доделано (хотя еще не нашлось того,кто бы добрался до недостроенной части),но то,что есть - оно работает,и меня устраивает,как оно работает.И это КРУТО!!!<br />Сейчас же буду раскручивать :-)<br />P.S. Записи в блог будут появляться не очень часто,потому что часть записок я буду "раскидывать" по сайту. </name>
<email></email>
<website></website>
<image></image>
<date>06/11/2008-16:39</date>
<body>
</body>
</msg>

17
blogdata/messages/8.txt Normal file
View File

@ -0,0 +1,17 @@
<threadinfo>
<num>8</num>
<headerfile>200806</headerfile>
<subject>Первые странности</subject>
</threadinfo>
<msg>
<name>Странно,но сегодня я обнаружил,что в блоге недостаёт многих моих сообщений.Куда они пропали,я не знаю.Сайт лежит в сети только 1 день,и даже не индексируется (и не будет) поисковыми системами.Странно в высшей степени.
P.S. Продолжается исправление багов и патч сайта по мере продвижения читателей.Пока что полностью "прошёл" весь сайт только один человек.</name>
<email></email>
<website></website>
<image></image>
<date>06/12/2008-06:01</date>
<body>
</body>
</msg>

3
blogdata/months.txt Normal file
View File

@ -0,0 +1,3 @@
200806
200804
200803

1
blogdata/num.txt Normal file
View File

@ -0,0 +1 @@
7

16
blogdata/openwin.js Normal file
View File

@ -0,0 +1,16 @@
function launchWin(page,name,height,width,trim,resize,scroll) {
var leftvalue = ((375) - (width / 2));
var topvalue = ((screen.availHeight / 2) - (height / 2));
if (trim) {
OpenWin = this.open(page, name, "top=" + topvalue + ", left=" + leftvalue + ",toolbar=yes,menubar=yes,location=yes,scrollbars=" + scroll + ",resizable=" + resize + ",height=" + height + ",width=" + width);
} else {
OpenWin = this.open(page, name, "top=" + topvalue + ", left=" + leftvalue + ",toolbar=no,menubar=no,location=no,scrollbars=" + scroll + ",resizable=" + resize + ",height=" + height + ",width=" + width);
}
OpenWin.focus();
}
// suppress any js errors
function stoperror(){
return true
}
window.onerror=stoperror

372
blogdata/quicktags.js Normal file
View File

@ -0,0 +1,372 @@
// new edit toolbar used with permission
// by Alex King
// http://www.alexking.org/
var edButtons = new Array();
var edLinks = new Array();
var edOpenTags = new Array();
function edButton(id, display, tagStart, tagEnd, access, open) {
this.id = id; // used to name the toolbar button
this.display = display; // label on button
this.tagStart = tagStart; // open tag
this.tagEnd = tagEnd; // close tag
this.access = access; // access key
this.open = open; // set to -1 if tag does not need to be closed
}
function zeroise(number, threshold) {
// FIXME: or we could use an implementation of printf in js here
var str = number.toString();
if (number < 0) { str = str.substr(1, str.length) }
while (str.length < threshold) { str = "0" + str }
if (number < 0) { str = '-' + str }
return str;
}
var now = new Date();
var datetime = now.getFullYear() + '-' +
zeroise(now.getMonth() + 1, 2) + '-' +
zeroise(now.getDate(), 2) + 'T' +
zeroise(now.getHours(), 2) + ':' +
zeroise(now.getMinutes(), 2) + ':' +
zeroise(now.getSeconds() ,2) +
// FIXME: we could try handling timezones like +05:30 and the like
zeroise((now.getTimezoneOffset()/60), 2) + ':' + '00';
edButtons[edButtons.length] =
new edButton('ed_strong'
,'str'
,'<strong>'
,'</strong>'
,'b'
);
edButtons[edButtons.length] =
new edButton('ed_em'
,'em'
,'<em>'
,'</em>'
,'i'
);
edButtons[edButtons.length] =
new edButton('ed_link'
,'link'
,''
,'</a>'
,'a'
); // special case
edButtons[edButtons.length] =
new edButton('ed_block'
,'b-quote'
,'<blockquote>'
,'</blockquote>'
,'q'
);
edButtons[edButtons.length] =
new edButton('ed_del'
,'del'
,'<del datetime="' + datetime + '">'
,'</del>'
,'d'
);
edButtons[edButtons.length] =
new edButton('ed_ins'
,'ins'
,'<ins datetime="' + datetime + '">'
,'</ins>'
,'s'
);
edButtons[edButtons.length] =
new edButton('ed_img'
,'img'
,''
,''
,'m'
,-1
); // special case
edButtons[edButtons.length] =
new edButton('ed_ul'
,'ul'
,'<ul>\n'
,'</ul>\n\n'
,'u'
);
edButtons[edButtons.length] =
new edButton('ed_ol'
,'ol'
,'<ol>\n'
,'</ol>\n\n'
,'o'
);
edButtons[edButtons.length] =
new edButton('ed_li'
,'li'
,'\t<li>'
,'</li>\n'
,'l'
);
edButtons[edButtons.length] =
new edButton('ed_pre'
,'code'
,'<code>'
,'</code>'
,'c'
);
function edLink() {
this.display = '';
this.URL = '';
this.newWin = 0;
}
edLinks[edLinks.length] = new edLink('WordPress'
,'http://wordpress.org/'
);
edLinks[edLinks.length] = new edLink('alexking.org'
,'http://www.alexking.org/'
);
function edShowButton(button, i) {
if (button.id == 'ed_img') {
document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertImage(edCanvas);" value="' + button.display + '" />');
}
else if (button.id == 'ed_link') {
document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertLink(edCanvas, ' + i + ');" value="' + button.display + '" />');
}
else {
document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertTag(edCanvas, ' + i + ');" value="' + button.display + '" />');
}
}
function edShowLinks() {
var tempStr = '<select onchange="edQuickLink(this.options[this.selectedIndex].value, this);"><option value="-1" selected>(Quick Links)</option>';
for (i = 0; i < edLinks.length; i++) {
tempStr += '<option value="' + i + '">' + edLinks[i].display + '</option>';
}
tempStr += '</select>';
document.write(tempStr);
}
function edAddTag(button) {
if (edButtons[button].tagEnd != '') {
edOpenTags[edOpenTags.length] = button;
document.getElementById(edButtons[button].id).value = '/' + document.getElementById(edButtons[button].id).value;
}
}
function edRemoveTag(button) {
for (i = 0; i < edOpenTags.length; i++) {
if (edOpenTags[i] == button) {
edOpenTags.splice(i, 1);
document.getElementById(edButtons[button].id).value = document.getElementById(edButtons[button].id).value.replace('/', '');
}
}
}
function edCheckOpenTags(button) {
var tag = 0;
for (i = 0; i < edOpenTags.length; i++) {
if (edOpenTags[i] == button) {
tag++;
}
}
if (tag > 0) {
return true; // tag found
}
else {
return false; // tag not found
}
}
function edCloseAllTags() {
var count = edOpenTags.length;
for (o = 0; o < count; o++) {
edInsertTag(edCanvas, edOpenTags[edOpenTags.length - 1]);
}
}
function edQuickLink(i, thisSelect) {
if (i > -1) {
var newWin = '';
if (edLinks[i].newWin == 1) {
newWin = ' target="_blank"';
}
var tempStr = '<a href="' + edLinks[i].URL + '"' + newWin + '>'
+ edLinks[i].display
+ '</a>';
thisSelect.selectedIndex = 0;
edInsertContent(edCanvas, tempStr);
}
else {
thisSelect.selectedIndex = 0;
}
}
function edSpell(myField) {
var word = '';
if (document.selection) {
myField.focus();
var sel = document.selection.createRange();
if (sel.text.length > 0) {
word = sel.text;
}
}
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
if (startPos != endPos) {
word = myField.value.substring(startPos, endPos);
}
}
if (word == '') {
word = prompt('Enter a word to look up:', '');
}
if (word != '') {
window.open('http://dictionary.reference.com/search?q=' + escape(word));
}
}
function edToolbar() {
document.write('<div id="ed_toolbar">');
for (i = 0; i < edButtons.length; i++) {
edShowButton(edButtons[i], i);
}
document.write('<input type="button" id="ed_spell" class="ed_button" onclick="edSpell(edCanvas);" title="Dictionary lookup" value="Dict." />');
document.write('<input type="button" id="ed_close" class="ed_button" onclick="edCloseAllTags();" title="Close all open tags" value="Close Tags" />');
// edShowLinks(); // disabled by default
document.write('</div>');
}
// insertion code
function edInsertTag(myField, i) {
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
if (sel.text.length > 0) {
sel.text = edButtons[i].tagStart + sel.text + edButtons[i].tagEnd;
}
else {
if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
sel.text = edButtons[i].tagStart;
edAddTag(i);
}
else {
sel.text = edButtons[i].tagEnd;
edRemoveTag(i);
}
}
myField.focus();
}
//MOZILLA/NETSCAPE support
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
var cursorPos = endPos;
var scrollTop = myField.scrollTop;
if (startPos != endPos) {
myField.value = myField.value.substring(0, startPos)
+ edButtons[i].tagStart
+ myField.value.substring(startPos, endPos)
+ edButtons[i].tagEnd
+ myField.value.substring(endPos, myField.value.length);
cursorPos += edButtons[i].tagStart.length + edButtons[i].tagEnd.length;
}
else {
if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
myField.value = myField.value.substring(0, startPos)
+ edButtons[i].tagStart
+ myField.value.substring(endPos, myField.value.length);
edAddTag(i);
cursorPos = startPos + edButtons[i].tagStart.length;
}
else {
myField.value = myField.value.substring(0, startPos)
+ edButtons[i].tagEnd
+ myField.value.substring(endPos, myField.value.length);
edRemoveTag(i);
cursorPos = startPos + edButtons[i].tagEnd.length;
}
}
myField.focus();
myField.selectionStart = cursorPos;
myField.selectionEnd = cursorPos;
myField.scrollTop = scrollTop;
}
else {
if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
myField.value += edButtons[i].tagStart;
edAddTag(i);
}
else {
myField.value += edButtons[i].tagEnd;
edRemoveTag(i);
}
myField.focus();
}
}
function edInsertContent(myField, myValue) {
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = myValue;
myField.focus();
}
//MOZILLA/NETSCAPE support
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos)
+ myValue
+ myField.value.substring(endPos, myField.value.length);
myField.focus();
myField.selectionStart = startPos + myValue.length;
myField.selectionEnd = startPos + myValue.length;
} else {
myField.value += myValue;
myField.focus();
}
}
function edInsertLink(myField, i, defaultValue) {
if (!defaultValue) {
defaultValue = 'http://';
}
if (!edCheckOpenTags(i)) {
var URL = prompt('Enter the URL' ,defaultValue);
if (URL) {
edButtons[i].tagStart = '<a href="' + URL + '">';
edInsertTag(myField, i);
}
}
else {
edInsertTag(myField, i);
}
}
function edInsertImage(myField) {
var myValue = prompt('Enter the URL of the image', 'http://');
if (myValue) {
myValue = '<img src="'
+ myValue
+ '" alt="' + prompt('Enter a description of the image', '')
+ '" />';
edInsertContent(myField, myValue);
}
}

54
cave.pl Normal file
View File

@ -0,0 +1,54 @@
#!/usr/bin/perl
use locale;
require 'common.pl';
use CGI qw/:standard/;
#use CGI::Carp 'fatalsToBrowser';
my $debug_out="debug/debug_cave.txt";
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$in{$name} = $value;
}
my @cookieArray=split ("; ",$ENV{'HTTP_COOKIE'});
my $cookieName;my $cookieValue;
foreach (@cookieArray){
($cookieName,$cookieValue)=split("=",$_);
$cookieHash{$cookieName}=$cookieValue;
}
if ($ENV{'QUERY_STRING'} ne '') {
@qstr = split (/=/,$ENV{'QUERY_STRING'});
$command = $qstr[0];
$value = $qstr[1];
$value =~ s/[\x00-\x20<>\|;\(\)\$^\+!\^\[\]\?\"\'\`]//g;
if ($command eq "error"){$error=1;&displayDefault;}
else {&displayDefault;}
}
else{&displayDefault;}
sub displayDefault(){
print "Content-type: text/html\n\n";
print <<"EOF";
<html>\n
<head><script language="javascript">
window.onload=function() {document.getElementById("in").focus();};
</script>\n<title>Ïåùåðà</title>\n
EOF
if ($cookieHash{'light'}){print '<link type="text/css" rel="stylesheet" href="white.css">';}
else {print '<link type="text/css" rel="stylesheet" href="black.css">';}
print <<"EOF";
</head><body>
Êàê òîëüêî âû òÿíåòå íà ñåáÿ êíèãó,øêàô îòúåçæàåò â ñòîðîíó,îòêðûâàÿ çà ñîáîé ëåñòíèöó,âåäóùóþ âíèç.
Âû ñïóñêàåòåñü ïî ëåñòíèöå â ïåùåðó.Ýòà êîìíàòà áóêâàëüíî âûäîëáëåíà â ñêàëå.Ïåðåä âàìè ñòîèò ïèñüìåííûé ñòîë,íà
í¸ì ëåæèò çàïèñêà.Âûñîêî íà äàëüíåé ñòåíå ïðîðóáëåíî îêíî.Îíî äîñòàòî÷íî øèðîêî,÷òîáû îñâåùàòü êîìíàòó.
Íà "ïîäîêîííèêå" ñèäèò âîðîí.
EOF
if ($error){print "<p id=\"err\">Êîìàíäà íå ðàñïîçíàíà.</p>";$error=0;}
print "<FORM NAME='input' ACTION='parse.pl' METHOD='POST'>\n";
print "<input type='hidden' name='location' id='location' value='cave'>";
print "&gt; <input type=text id='in' name='input' size=54 maxlength=65>\n";
print "</body>\n</html>";
}

39
changelog.html Normal file
View File

@ -0,0 +1,39 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Changelog</title>
</head>
<body>
<h1 align="center">Дневник изменений</h1>
<p> <b>1.0</b> Первый (начальный) релиз</p>
<p><b> 1.1-1.2</b> Исправление багов,добавление команд</p>
<p><b> 1.3</b> Преобразование регистра</p>
<p><b> 1.4</b> Исправление багов,добавление команд</p>
<p><b> 1.5</b> Выделение парсера в отдельный модуль,организация команд (до этого релиза
каждая локация имела собственный набор команд,что давало интересные отзывы),
добавление новых(пение,трогание,осматривание и прочее),ужесточение проверки команд.
В ходе тестирования было найдено множество сложных багов в проверке команд (все
правильные команды,содержащие более одного слова, не распознавались,что делало
прохождение невозможным),релиз откатан до версии 1.4 до исправления.</p>
<p><b> 1.50.01</b> Изменена нумерация версий.Теперь она ведётся в
формате хх.хх.хх,где вторая хх означает добавление новых функций,третья
- исправление старых багов,первая означает изменение самого
наполнения(выход апгрейда).</p>
<p><b> 1.50.02</b> Структурировал код,заменил шапку в некоторых страницах.</p>
<p><b> 1.50.03</b> Исправлена команда "петь".Отформатированы песни.</p>
<p> <b>1.50.04</b> При попытке исправить сломавшийся парсер обнаружено,что парсер работает исправно.Cнова сделан релиз,надеюсь вам понравится. </p>
<!--<p><b>1.50.05</b> Не понравилось.По просьбам читателей вновь сделан rollback.Оно всё-таки не работает.Странно,поутру вроде каначило...Буду ответственнее делать тестинг...да,и в следующий раз - не в 5 утра и не после релиза.О,и хотя бы дважды.</p> - ложная тревога-->
<p><b>1.50.05</b> Ошибка обнаружена и исправлена.Парсинг действительно
был сломан,но это проявлялось редко и только на отдельных страницах.И
дело было не в самом парсере,кстати.</p>
<p><b>1.50.06</b> Исправлены ошибки в работе некоторых команд (в частности,то же пение),приводившие к тому,что возникал "БОЛЬШОЙ ГЛЮК!".</p>
<p><b>1.50.07</b> Исправлено распознавание одной из секретных команд во второй локации.</p>
<p><b>1.50.08</b> Исправлен хороший
глюк,мешавший распознаванию любых команд,содержащих пробел.Если интересно,то все регулярные выражения /глагол \w+/ заменены на
/глагол\s/</p>
<p><b>1.50.09</b> Исправлена пара возможных багов,подчищен код.</p>
<p><b>1.50.10</b> Теперь changelog открыт для просмотра.</p>
<p><b>1.50.11</b> Увеличена длина текстового поля в Гостиной.</p>
<p><b>1.50.12</b> Немного изменены хранящиеся cookies.Надеюсь,хоть сейчас они будут реально сохраняться.</p>
</body>
</html>

44
common.pl Normal file
View File

@ -0,0 +1,44 @@
my $charset="windows-1251";
$version="1.50.12";
$debug=1;
sub showwarning(){
print "Content-type: text/html\n\n";
print "<html><meta http-equiv=\"Content-Type\" content='text/html; charset=$charset'>";
print "<script language=\"javascript\">";
print "window.onload=function() {document.getElementById(\"in\").focus();};";
print "</script>";
if ($cookieHash{'light'}){print '<link type="text/css" rel="stylesheet" href="white.css">';}
else {print '<link type="text/css" rel="stylesheet" href="black.css">';}
print "<body>";
print @_;
print "<div id=\"hint\"><noscript>Ïîñòàâüòå êóðñîð â ïîëå âíèçó è </noscript>íàæìèòå Enter.</div><br>";
print "<FORM NAME='input' ACTION='$location.pl' METHOD='GET'>\n";
print "&gt; <input type=text id=\"in\" size=64 maxlength=32>\n</form>";
print "<br><a href='$to'>Âåðíóòüñÿ îáðàòíî</a>";
print "</body></html>";
}
sub printHeader{#common header - CSS style and so on
my($title) = shift;
my($white) = shift;
print "Content-type: text/html\n\n";
print "<html><meta http-equiv=\"Content-Type\" content='text/html; charset=$charset'><head>";
if ($white){print '<link type="text/css" rel="stylesheet" href="white.css">';}
else{
if ($cookieHash{'light'}){print '<link type="text/css" rel="stylesheet" href="white.css">';}
else {print '<link type="text/css" rel="stylesheet" href="black.css">';}
}
print"\n<title>$title</title>\n</head>\n<body>\n";
}
sub printFooter{#common footer - enclosures
print <<"END";
<h3 align="center"><a href="gostinaya.pl">Âûéòè èç áëîãà</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="?random">Ñëó÷àéíûé ïîñò</a></h3>
<p><em>
<a href="mailto:oreolek\@gmail.com">Àëåêñàíäð ßêîâëåâ,2008 ãîä </a></em><br />Jabber: oreolek\@jabber.ru<br />ICQ: 207-138-403</p>
</body>
</html>
END
}

253
config.pl Normal file
View File

@ -0,0 +1,253 @@
#!/usr/bin/perl
### Best with Perl 5.6 or better
# Path to Perl - you may need to check your server admin just in case
# it is different.
##########################################################################
# Forum2 Development Overview
# DForum 1.01 (11/02/1999)
# http://www.dansteinman.com/dforum
# Copyright (C) 1998 Dan Steinman
#
# This version by Ted Hawkins, Forum2.6, January 2003
# http://scriptles.bluwall.com
# Including
# 1) Footer script by Michael Mathews, August 2002
# http://perlcircus.com
#
# 2) Latest reply to a subject posting
# by Jeff Thomas, December 2002
# http://www.jhthomas.net
# Jeff redid the Original Dforum1 this way at www.roigi.com
# and it has been written into Forum2 as of Version 2.5
#
# 3) PerlBlog v1.08b by Rio Akasaka, May 2003-May 2005
# Altered Forum2.6 into a customizable and flexible
# weblog.
#
# http://www.chronicled.org/perlblog
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License (license.txt) for more details.
#
##########################################################################
# filename: weblog-config.pl
# Set-Up Variables
# The document-root environment
$root = "$ENV{'DOCUMENT_ROOT'}";
# This is the default
# $forumdir = "$root/your-path-goes-here"
# The below should work on most servers - check with your Sys Admin to be sure.
$forumdir = "blogdata";
$contentdir = "content";#the path to the txt-content of pages
#################################### EASY CUSTOMIZE ############################
# Customizing your weblog.
# You can change the defaults to reflect your site's design and style.
# If you put quotation marks within the quotation marks, be sure to a \ sign before each.
#################################### Administration ############################
$username = "oreolek"; # Weblog username
$password = "verylongpasswordindeed"; # Weblog password
$adminusername = "administrator"; # Weblog-admin.pl username
$adminpassword = "this_password_has_underscores"; # Weblog-admin.pl password
$code = "write_post"; # Weblog journal page
$ssource="./blogdata"; # Source to your images and JavaScript (omit final slash)
$show="5"; # Number of posts to show
$recent="yes"; # Show recent posts or not
$recentnum="10"; # Number of recent posts to show
$lang="ru"; # Language of weblog
$charset="windows-1251"; # Character set (utf-8 is standard)
$inputwc="email"; # Show website or email on comment box input
#################################### Titles and names ############################
$blogtitle = "Ñàéò Àëåêñàíäðà ßêîâëåâà aka Oreolek"; # Weblog title
$posted = "Îòïðàâëåíî â "; # Post title at end of each entry
$description = "Âåáëîã íàïèñàí íà Perl/CGI"; # Blog description (used for search engines)
$keywords = "PerlBlog, v.1.09"; # Blog keywords (used for search engines)
$subtitle = "Based on the PerlBlog v.1.09"; # Blog subtitle
$author = "Oreolek"; # Blog author (used for search engines)
#################################### Images ############################
$bgimg="../background.gif"; # Blog background image (optional)
$headerimg =""; # Header image (optional, include http)
$footerimg=""; # Footer image (optional, include http)
#################################### Main details ############################
$maincolor ="#ffffff"; # Main weblog entry background color
$bgcolor="#144A64"; # Main weblog background color
$width ="782"; #Blog Width
$jwidth="480px"; # Blog Entry (left column) width
#################################### Header ############################
$height="15px"; #Header Section Height
$paddingtp ="20px"; # Header padding top (how far the title is from the top)
$bgtopcolor ="#FFFFFF"; # Header background color
$paddinglft ="35px"; # Header padding left (how far the title is from the left, keep congruous to paddingr)
#################################### Title ############################
$headertitlefont="Georgia"; # Title (in header area) font
$titlesize="130%"; # Title (in header area) font size
$headertitlecolor="#FFFFFF"; # Title (in header area) font color
$headertitlewg="bold"; # Title (in header area) font weight
#################################### Subtitle ############################
$sheight="10px"; #Subtitle Section Height
$subtitlepaddingtop="2px"; # Subtitle distance from title
$subttfont="Trebuchet MS"; # Subtitle font
$subtitlesize="80%"; # Subtitle font size: the greater the value, the bigger
$subttcolor="#dddddd"; # Subtitle font color
$subttdeco="none"; # Subtitle font decoration: underline or none
$subtitlewg="none"; # Subtitle font weight: bold or none
$subtthfont="Arial"; # Subtitle hover (mouseover) font
$subtthcolor="#dddddd"; # Subtitle hover (mouseover) font color
$subtitlehsize="80%"; # Subtitle hover (mouseover) font size
$subtthdeco="none"; # Subtitle hover (mouseover) font decoration: underline or none
$subtitlehpwg="none"; # Subtitle hover font weight: bold or none
######################### Links, below the subtitle (main, archive, about) ###############
$hheight="150px"; #Header link Section Height
$headerpaddingtop="30px"; # Header link distance from subtitle
$subttfontl="Trebuchet MS"; # Header link font
$subtitlesizel="80%"; # Header link font size: the greater the value, the bigger
$subttcolorl="#dddddd"; # Header link font color
$subttdecol="none"; # Header link font decoration: underline or none
$subtitlewgl="none"; # Header link font weight: bold or none
$subtthfontl="Arial"; # Header link hover (mouseover) font
$subtthcolorl="#dddddd"; # Header link hover (mouseover) font color
$subtitlehsizel="80%"; # Header link hover (mouseover) font size
$subtthdecol="underline"; # Header link hover (mouseover) font decoration: underline or none
$subtitlehpwgl="none"; # Header link hover font weight: bold or none
$brackets="#dddddd"; # Header links brackets color
######################### Journal/Post details ###############
$titlefont="Georgia"; # Journal post title font
$titlecolor="#4F4E46"; # Journal post title font color
$tentrysize="130%"; # Journal post title font size
$bodyfont="Verdana"; # Journal post entry font
$bodycolor="#4F4E46"; # Journal post entry font color
$bodyesize="11px"; # Journal post entry font size
######################### Journal Tag details (what comes after the post) ###############
$tagfont="Verdana"; # Entry tag font
$tagfontsize="11px"; # Entry tag font size
$tagcolor="#4b4b4b"; # Entry tag font color
$tagweight="none"; # Entry tag font weight (bold or none)
######################### Sidebar ###############
$swidth="176px"; # Sidebar Column (right column) width
$direction="left"; # Sidebar left or right?
$paddingr="0px"; # If sidebar is on the left, make value to 0px
$paddingl="35px"; # If sidebar is on the left, make value to 35px
$sectionfont="Trebuchet MS"; # Sidebar Column font
$sectionsize="100%"; # Sidebar Column font size
$sectionclr="#666666"; # Sidebar Column color
$sidebarcolor="#ffffff"; # Sidebar Column background color
$sectiontfont="Trebuchet MS"; # Sidebar titles font
$sectionfsize="11px"; # Sidebar titles font size
$sidefcolor="#4F4E46"; # Sidebar titles font color
$sidefweight="bold"; # Sidebar titles font weight (bold or none)
$sectionlfont="Trebuchet MS"; # Sidebar link font
$sectionls="11px"; # Sidebar link font size
$sectionlc="#aaaaaa"; # Sidebar link font color
$sidefweight="bold"; # Sidebar link font weight (bold or none)
$sectiondecol="none"; # Sidebar link text-decoration (underline or none)
$sectionlfonth="Trebuchet MS"; # Sidebar link hover font
$sectionlsh="11px"; # Sidebar link hover font size
$sectionlch="#88a4bf"; # Sidebar link hover font color
$sidefweighth="bold"; # Sidebar link hover font weight (bold or none)
$sectiondecolh="none"; # Sidebar link hover text-decoration (underline or none)
######################### General link details ###############
$linkcolor="#aaaaaa"; # Link color
$linkdeco="none"; # Link decoration: underline or none
$linkweight="none"; # Link weight: bold or none
$fontsz="70%"; # Link size
$hover="#88a4bf"; # Link hover (mouseover) color
$txtdecohover="none"; # Link hover (mouseover) decoration: underline or none
$fntweight="none"; # Link hover (mouseover) font-weight: bold or none
######################### Image details ###############
$imgborder="#ddd"; # Image border
$imgback="#eee"; # Image background color
$imgpadding="4px"; # Image padding
######################### Input/Comment box form details ###############
$inputborder="#4b4b4b"; # Input form border color
$inputfont="Georgia"; # Input form font
$inputfsize="11px"; # Input form font size
$inputcolor="#333333"; # Input form font color
$inputbg="#ffffff"; # Input form background color
$submitbg="#ffffff"; # Submit button background color
$submitborder="#333333"; # Submit button border color
$submitfontcolor="#4b4b4b"; # Submit button font color
$submitfontsize="12px"; # Submit button font size
$submitfont="Arial"; # Submit button font
######################### Footer ###############
$footerheight="40px"; # Height of footer
$footercolor="#aaaaaa"; # Footer background color
$footertxt="#ffffff"; # Footer text color
$footersize="11px"; # Footer text size
$footerfont="Verdana"; # Footer font family
$footerlinks="#ffffff"; # Footer link color
$footerdecoration="underline"; # Footer link decoration
$footerhover="#000000"; # Footer hover link color
$footerhdecoration="none"; # Footer hover link decoration
######################### Popup comment box ###############
$popup="no"; # Popup comments or not (yes or no)
$cheight="500"; # Popup comment box height
$cwidth="400"; # Popup comments box width
$cpost="yes"; # Popup comments see entry or not (yes or no)
$popccolor="#ffffff"; # Popup comments background color
$pocolor="#4a4a4a"; # Popup comments text color
########################### FURTHER COUSTOMIZATION ###############
# Customizing the pages further can be done, using about.txt for your about page, and footer.txt for your footer.
# The file sidebar.txt can be altered for your blog sidebar content.
##########################################################################
1;

102
debug/debug_cave.txt Normal file
View File

@ -0,0 +1,102 @@
приложить конечность к стене - error
пнуть стену
посмотреть на записку
прочитаит записку
посмотреть на ворона
погладить ворона
посмотреть в окно
посмотреть на скалу
посмотреть на
посмотреть на подоконник
взять ворона
пнуть ворона
жжж ворона
понюхать ворона
вернуться
кинуть ногу в ворона
кинуть конечность в ворона
взять конечность
достать конечность - error
потрогать ворона
дать ворону конечность
пойти назад - error
взять записку
взять стол
взять шар
зажечь спичку
кинуть спичку - error
подумать - error
кричать
кричать на ворона
убить ворона
ударить ворона
ударить ворона конечностью
каркнуть
каркнуть на ворона
поковыряться в носу - error
сесть - error
подойти к ворону
использовать конечность
конечность - error
выйти
забраться на подоконник - error
залезть на подоконник - error
посмотреть на шар
умереть - error
прочитать записку
подойти к ворону
осмотреть стол
выдвинуть ящик - error
открыть ящик
достать конечность - error
заглянуть в котомку - error
использовать конечность
прочитать записку
вернуться назад
поговорить с вороном
вылезти в окно - error
взезть на подоконник - error
скачать - error
посмотреть на потолок
найти тайный проход - error
найти тайный проход 2 - error
котомка - error
котомка - error
посмотреть в котомку
вернуться назад
достатать синюю конечность - error
достать конечность - error
зажечь спичку
вернуться
обшарить писменный стол - error
каркнуть
ципа цыпа - error
мяу - error
мяукнуть - error
гавкнуть - error
сашка дурак - error
попка дурак - error
ворон дурак
посмотреть на пол
убиться головой об стену
прочитать записку
посмотреть записку
почитать записку
посмотреть на шкаф
посмотреть в окно
посмотреть на ворона
уйти - error
выйти
прилепить конечность к стене - error
посмотреть на конечность
потрогать ворона
погладить ворона
залезть под стол - error
потрогать записку - error
убиться головой об стену - error
приложить ногу к стене ? - error
приложить ногу к стене - error
нога и стена - error
поставить конечность на стену
каркнуть

498
debug/debug_gostinaya.txt Normal file
View File

@ -0,0 +1,498 @@
продолжить - error
продолжить - error
продпродолжитьолжить - error
взять шар
взять шар
на лево - error
взять дискеты
взять дискеты
зажечь спичку
продолжить - error
продолжить - error
смотреть
фото - error
включить свет
взять книгу
смотреть фотографии
включить свет
взять конечность
взять шар
взять спичку
взять дискету
открыть шкаф
взять книгу
взять конечность
взять шарик
взять спичку
взять дискеты
взять записки
котомка
посмотреть шкаф
открыть шкаф
посмотреть шкаф
посмотреть записки
открыть шкаф
посмотреть в шкаф
посмотреть книги
протереть книги - error
взять книги
взять всё
взять конечность
взять шар
взять спичку
взять дискету
скачать
посмотреть на дискеты
посмотреть на полку
взять фотографии
взять гвозди
выйти - error
включить свет
посмотреть в котомку
инвентарь
пойти в пещеру - error
взять книгу
выйти - error
использовать ум
подумать - error
каркнуть - error
выйти из гостиной - error
заснуть - error
зажечь спичку
взять конечность
взять конечность
взять котомкеу
посмотреть на шар
соединить - error
взять книгу
взять конечность
взять щарик
включить - error
включить свет
смотреть фотографии
осмотреть конечность
осмотреть черный шар
читать записки - error
осмотреть записки
включить свет
взять записки
зажечь спичку
взять шар
взять конечность
взять спичку
звять дискеты - error
взять дискету
открыть шкаф
взять книгу
что дальше? - error
продолжить - error
посмотреть
свет - error
выключатель - error
нажать на выключатель - error
включить свет
посмотреть фотографии
взять шар
взять спичку
взять конечность
взять дискеты
взять дискеты
взять дискеты
прочитать записки - error
взять записки
подойти к столу - error
взять книги
окрыть шкаф - error
разбить шаром стело - error
разбить шаром стекло - error
котомка
вытащить из котомки шар
посмотреть на стол
стол - error
посмотреть на стол
поджеч записки - error
выключатель - error
включить выключатель - error
подойти к выключателю - error
повернуть выключатель - error
зажечь спичку
сорвать фотограффию автор - error
сорвать фотографии - error
посмотреть на фотографии
зажечь свет - error
пнуть шкаф
сильнее пнуть шкаф
сломать шкаф - error
поджечь шкаф
осмотреть шар
поджеч шар спичкой - error
осмотреть шкаф
разбить стекло шаром - error
разбить стекло - error
найти на шкафе замок - error
открыть шкаф шаром
взять книгу
взять нигу из шкафа
взять книгу
котомка
найти тайный проход - error
взять книгу
нажать на выключатель - error
включить выключатель - error
включить включатель - error
оторвать фотографию автор - error
взять книгу
продолжить - error
ааа бля аа убейся апстену - error
полка
' - error
gjkrf - error
полка
gjkrf - error
полка
бл - error
полка
полка
открыть шкаф
взять конечность
взять шар
взять спичку
посмотреть на выключатель
протереть выключатель - error
потрогать выключатель
включить выключатель - error
включить лампочку - error
включить свет
взять дискету
почитать записки - error
прочитать записки - error
посмотреть записки
взять книгу
выйти - error
залезть под стол - error
посмотреть на выключатель
закрыть шкаф
посмотреть на шар
посмотреть в окошечко
кинуть конечность - error
потрогать конечность
потрогать шар
потрогать дискету
потрогать себя
понюхать себя
понюхать конечность
потрогать спичку
спуститься в пещеру - error
взять книгу
посмотреть на конечность
потрогать шкаф
потрогать книги
потереть шар - error
протереть шар - error
заснуть - error
закричать
заплакать - error
подумать о шкафе - error
позвать автора - error
посмотреть на автора
автора! - error
попрыгать - error
сойти с ума - error
офигеть - error
спрятаться - error
спрятаться под стол - error
посмотреть под стол
посмотреть не на стол
усмотреть где-то тут стол
положить конечность на ст - error
закричать "да что ж это такое, ничего не распознается как надо, что ж делать-то, а?!"
упасть под стол - error
удариться об стол - error
сесть за стол - error
сесть на стол - error
встать на стол - error
лечь на стол - error
прибить третью полку
издать звук - error
почесаться - error
почесать себя - error
потрогать стол
потрогать книгу
потрогать фотографии
поднять стол - error
съесть спичку - error
взять себя
взять себя в руки
взять котомку
лечь на нижнюю полку
прибыть в полку
полку
скачать себя
выйти - error
вернуться - error
осмотретьс
использовать себя
выразиться точнее - error
распознать команду - error
собрать записки в кучу - error
посмотреть куда-то
посмотреть в никуда
посмотреть на гостиную
взять шкаф
взять стол
опрокинуть стол - error
положить конечность на полку
засунуть конечность в шар - error
убежать - error
- error
<> - error
:) - error
ждать
включить себя - error
погладить конечность - error
вывернуть котомку наизнан
вывернуть котомку наизнанку
найтись в котомке
котомк!
зайти в шкаф - error
забраться в шкаф - error
обидеться - error
понять что к чему - error
подпрыгнуть от неожиданности - error
взять волю
взять друзей
осторожно взять книгу
прилепить конечность к се - error
прилепить конечность к себе - error
прилепить конечность к стене - error
прилепить конечность к стене - error
ставить ногу стену - error
прилепить конечность на с - error
прилепить конечность на стену - error
полка
заебись - error
саша - error
аоександр - error
яковлев - error
ййййййййййййййййййййййййй - error
ццццццццццццццццццццццццц - error
5555555555555555555555555 - error
%%%%%%%%%%%%%%%%%%%%%%%%% - error
подойти к столу - error
посмотреть на фотографии
посмотреть на стол
открыть шкаф
котомка
взять все
взять шар
взять ногу
взять спичку
взять дискету
использовать шар вместо р
шар шаф - error
открыть шкаф шаром
взять книгу
включить свет
включить свет
включить свет
крикнуть - error
почесать голову - error
каркнуть - error
каркнуть - error
чесать голову - error
подумать - error
взять конечность - error
потрогать себя - error
потрогать себя - error
посмотреть нп конечность - error
посмотреть на конечность - error
включить свет
потрогать себя - error
потрогать себя - error
потрогать себя - error
потрогать себя - error
понюхать руки - error
понюхать руки - error
понюхать всё - error
понюхать ноги - error
понюхать ногу - error
понюхать конечность - error
привет - error
да - error
понюхать - error
понюхать ногу - error
привет - error
да - error
подумать
понюхать ноги - error
осмотреть котомку - error
работать - error
чесать голову - error
почесать руки - error
почесать голову - error
взять книгу - error
петь
включить свет
взять шар - error
взять конечность - error
взять книгу - error
посмотреть на фотографию - error
осмотреть фотографию - error
осмотреть фотографии - error
взять спичку - error
осмотреть конечность - error
взять конечность - error
взять книгу - error
посмотреть на шкаф - error
потрогать себя - error
петь
взять шар - error
открыть шкаф - error
петь - error
взять шар - error
включить свет
взять шар - error
взять дискету - error
петь
петь
петь
петь
каркнуть - error
включить свет
выключить свет
включить свет
открыть шкаф - error
взять спичку - error
убиться апстену - error
ы - error
прочитать записки - error
включить свет
взять шар - error
включить свет
осмотреть конечность - error
взять конечность - error
открыть шкаф - error
шкаф - error
осмотреть стол - error
посмотреть фотографии - error
осмотреть фотографии - error
фотографии - error
взять спичку - error
- error
информация - error
подойти к фотографиям - error
смотреть фотографии - error
осмотр фотографий - error
осмотр фотографий - error
повернуть налево - error
взять книгу - error
книга - error
шкаф - error
изучить фотографии - error
фотография - error
просмотр фотографий - error
зажечь свет - error
осветить - error
осветить помещение - error
зажечь спичку
осмотреть шар - error
осмотреть конечность - error
зажечь спичку
ощупать конечность - error
вглядеться в шар - error
поджечь конечность
разбить шар - error
посмотреть диски - error
прочитать записки - error
разбить шар - error
заглянуть в отверстие - error
спичку в отверстие - error
швырнуть шар - error
съесть конечность - error
поджарить конечность - error
сжечь гостинную - error
зажечь записки - error
зажечь спичку
поиграть с шаром - error
включить свет
взять конечность - error
взять шар - error
открыть шкаф - error
положить в котомку шар - error
взять дискету - error
включить свет
взять шао - error
взять шар - error
прыгнуть - error
подумать
потрогать - error
лево - error
включить - error
включить свет
взять книгу из шкафа - error
подойти - error
- error
взять шар - error
зажечь спичку
взять книгу - error
идти налево - error
идти направо - error
взять конечность - error
подойти к шкафу - error
зажечь спичку
подойти к стене - error
подойти к столу - error
взять дискету - error
выключить - error
взять шаро - error
взять шар - error
взять шар - error
включить свет
открыть - error
открыть шкаф - error
открыть шкаф - error
кричать
каркнуть - error
открыть шкаф - error
открыть шкаф - error
посмотреть книги - error
открыть шкаф - error
прочитать записки - error
включить свет
открыть шкаф - error
подойти к шкафу - error
включить свет
взять конечность - error
продолжить - error
ок - error
выпить чай - error
взять - error
посмотреть - error
взять конечность - error
взять шар - error
взять шар и спичку - error
прочитать записки - error
читать - error
записки - error
сесть - error
умереть - error
тупить - error
испугаться - error
делать ноги - error
аллохомора - error
включить свет
понюхать себя
включить свет
посмотреть записку
посмотреть дискеты
взять спичку
взять конечность
взять шар
нажать на выключатель - error
посмотреть фотографии
посмотреть стол
осмотреть стол
осмотреть фотографии
дернуть выключатель - error
посмотреть фотографии

109
debug/debug_index.txt Normal file
View File

@ -0,0 +1,109 @@
Лук - error
Бык - error
открыть мозг - error
рассмотреть внутренности - error
продолжить
продолжить
выпить чай - error
продолжить
продолжить
продолжить
ПРОДОЛЖИТЬ - error
ПРОДОЛЖИТЬ - error
ПРОДОЛЖИТЬ - error
Продолжить
осмотреть - error
начать - error
посмотреть игры - error
продолжить
продолжить
продолжить
продолжить
привет - error
55 - error
продолжить
продолжить
продолжить
продлжить - error
продолжить
продолжить
войти - error
с\ - error
убиться головой об стену - error
перейти на главную страницу - error
осмотреться - error
осмотреть предметы - error
котомка - error
продолжить
продолжить
продолжить
земля вертится - error
жизнь идёт - error
жить - error
вперёд на баррикады - error
посмотреть сайт - error
читать текст - error
открыть текст - error
изучать сайт - error
читать - error
смотреть на потолок - error
обсудить фильм - error
продолжить
ghjljk;bnm - error
продолжить
посмотреть на потолок - error
посмотреть на потолок - error
посмотреть - error
посмотреть вверх - error
смотреть на потолок - error
продолжить
продолжить
продолжить
использовать силу - error
продолжить
использовать силу - error
продолжить
продолжить
осмотреться - error
посмотреть кругом - error
продолжить
продолжить
продолжить
продолжить
продолжить
продолжить
продолжить
продолжить
продолжить
продолжить
продолжить
продолжить
продолжить
почесать руки - error
потрогать себя - error
1 а - error
у - error
у у - error
у ууу - error
{jxe rjnvre - error
Покажи команды - error
продолжить
продолжить
продолжить
продолжить
ok - error
продолжить
продолжить
осмотреть себя - error
осмотреть себя - error
потрогать себя - error
осмотреть себя - error
кто я?
потрогать себя - error
потрогать себя - error
потрогать себя - error
потрогать себя
осмотреть котомку
продолжить
продолжить

69
gostinaya.pl Normal file
View File

@ -0,0 +1,69 @@
#!/usr/bin/perl
require 'common.pl';
use CGI qw/:standard/;
use locale;
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$in{$name} = $value;
}
@cookieArray=split ("; ",$ENV{'HTTP_COOKIE'});
my $cookieName;my $cookieValue;
%cookieHash;
foreach (@cookieArray){
($cookieName,$cookieValue)=split("=",$_);
$cookieHash{$cookieName}=$cookieValue;
}
if ($ENV{'QUERY_STRING'} ne '') {
@qstr = split (/=/,$ENV{'QUERY_STRING'});
$command = $qstr[0];
$value = $qstr[1];
$value =~ s/[\x00-\x20<>\|;\(\)\$^\+!\^\[\]\?\"\'\`]//g;
if ($command eq "error"){$error=1;&displayDefault;}
else {&displayDefault;}
}
else{
if ($in{'input'}) {&parsecommand;}
else {&displayDefault;}
}
sub displayDefault(){
print "Content-type: text/html\n\n";
print <<"EOF";
<html>\n
<head><script language="javascript">
window.onload=function() {document.getElementById("in").focus();};
</script>\n<title>Ãîñòèíàÿ Àëåêñàíäðà ßêîâëåâà</title>\n
EOF
if ($cookieHash{'light'}){print '<link type="text/css" rel="stylesheet" href="white.css">';}
else {print '<link type="text/css" rel="stylesheet" href="black.css">';}
print "</head><body>\nÂû íàõîäèòåñü â ãîñòèíîé.Çäåñü î÷åíü ";
if ($cookieHash{'light'}){print "ñâåòëî.";}
else {print "òåìíî.";}
print <<"EOF";
<p>Ñëåâà îò âàñ ñòîèò áîëüøîé êðàñíûé øêàô ñ êíèãàìè.<br>
Ñòåíà ïî ëåâóþ ñòîðîíó îò øêàôà óêðàøåíà ôîòîãðàôèÿìè àâòîðà ñòðàíèöû è åãî äðóçåé.<br>
Ïî ïðàâóþ ñòîðîíó îò øêàôà ñòîèò ïèñüìåííûé ñòîë,íà êîòîðîì ðàçáðîñàíû çàïèñêè.
Ðÿäîì ñî ñòîëîì ïðèáèòû äâå ïîëêè.Íà âåðõíåé ïîñòàâëåíî â ðÿä íåñêîëüêî äèñêåò.Íà ñòåíå âèäåí âûêëþ÷àòåëü.</p>
EOF
&lower_shelf();
if ($error){print "<p id=\"err\">Êîìàíäà íå ðàñïîçíàíà.</p>";$error=0;}
print "<FORM NAME='input' ACTION='parse.pl' METHOD='POST'>\n";
print "<input type='hidden' name='location' id='location' value='gostinaya'>\n";
print '&gt; <input type=text id="in" name="input" size=64 maxlength=32>';
print "</body>\n</html>";
}
sub lower_shelf{#îïèñàíèå íèæíåé ïîëêè
if ($cookieHash{'leg'} && $cookieHash{'ball'} && $cookieHash{'match'}){print "Íà íèæíåé íè÷åãî íå ëåæèò.";}
elsif ($cookieHash{'leg'} && $cookieHash{'ball'}){print "Íà íèæíåé ëåæèò îäèíîêàÿ ñïè÷êà.";}
elsif ($cookieHash{'match'} && $cookieHash{'ball'}){print "Íà íèæíåé ëåæèò îäèíîêàÿ ÷üÿ-òî ñèíÿÿ êîíå÷íîñòü.";}
elsif ($cookieHash{'leg'} && $cookieHash{'match'}){print "Íà íèæíåé ëåæèò îäèíîêèé ÷¸ðíûé øàðèê.";}
elsif ($cookieHash{'leg'}){print "Íà íèæíåé ëåæàò ÷¸ðíûé áëåñòÿùèé øàðèê è ñïè÷êà.";}
elsif ($cookieHash{'ball'}){print "Íà íèæíåé ëåæàò êàêàÿ-òî ñèíÿÿ êîíå÷íîñòü è ñïè÷êà.";}
elsif ($cookieHash{'match'}){print "Íà íèæíåé ëåæàò êàêàÿ-òî ñèíÿÿ êîíå÷íîñòü è ÷¸ðíûé áëåñòÿùèé øàðèê ñ îêîøå÷êîì.";}
else {print"Íà íèæíåé ëåæèò êàêàÿ-òî êîíå÷íîñòü,êðóãëûé ÷¸ðíûé øàð ñ îòâåðñòèåì è ñïè÷êà.";}
}

98
index.pl Normal file
View File

@ -0,0 +1,98 @@
#!/usr/bin/perl
require 'common.pl';
use CGI qw/:standard/;
use locale;
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$in{$name} = $value;
}
if ($ENV{'QUERY_STRING'} ne '') {
@qstr = split (/=/,$ENV{'QUERY_STRING'});
$command = $qstr[0];
$value = $qstr[1];
$value =~ s/[\x00-\x20<>\|;\(\)\$^\+!\^\[\]\?\"\'\`]//g;
if ($command eq "help") {&displayHelp;}
elsif ($command eq "error"){$error=1;&displayDefault;}
else {&displayDefault;}
}
else{&displayDefault;}
my @cookieArray=split ("; ",$ENV{'HTTP_COOKIE'});
my $cookieName;my $cookieValue;my %cookieHash;
foreach (@cookieArray){
($cookieName,$cookieValue)=split("=",$_);
$cookieHash{$cookieName}=$cookieValue;
}
sub displayHelp(){
print "Content-type: text/html\n\n";
print <<"EOF";
<html>\n<head><title>Инструкция и помощь</title>\n
<link type="text/css" rel="stylesheet" href="white.css">
</head><body>\n
Мой сайт сделан в виде текстового приключения.
<p>Вы набираете команду в поле команд.Команда чаще всего состоит из глагола и существительного,например:<br>
взять ящик<br>
выпить чай<br>
выброситься в окно<br>
перекинуть дерево через плечо и вмазать им по самые помидоры<br>
делать дело<br>
использовать свой ум<br>
посмотреть на записку<br>
поговорить о жизни со шкафом<br>
пить пиво<br>
включить вилку в розетку<br>
Эти команды - лишь примеры,и они не будут работать.Но я надеюсь,что вы поняли идею.</p>
<p>Когда вы входите в комнату,вы читаете её описание.Оно неполно,и содержит лишь основные черты.Чтобы уточнить описание предмета,достаточно его осмотреть.Если он вам понравился,вы даже можете попробовать его взять с собой.</p>
<p>Одной из отличительных черт текстовых приключений от графических является нелинейность.Вы не можете войти в комнату и потыкать на каждый предмет в ней.Принцип научного тыка не работает.Команды "использовать","применить","добавить",которые являются детищами именно графических приключений,не работают.Если вы хотите что-нибудь сделать - описывайте это действие чётко и лаконично.Если вы будете использовать более пяти слов,то сценарий,вас,скорее всего,просто не поймёт.Конечно,стоит учитывать еще и вероятность ложных срабатываний.</p>
<p>Несколько слов о стратегии.</p>
<p>Не пытайтесь вводить нецензурные слова и "ненормативную лексику".Та же команда "вмазать по самые помидоры" - это,конечно,образно,но чаще всего неправильно.Здесь используется русский язык,и русский коренной.Конечно,есть и скрытые команды,но я могу вас уверить - нецензурных среди нет.<br>
<p>Второй отличительной чертой текстовых приключений является полная неработоспособность метода научного тыка.<br>Вы не можете просто тыкаться во все предметы,пока что-то не произойдет.По сути,это - прямое следствие первой отличительной черты.Чтобы что-то сделать,вы должны <b>чётко представлять</b> себе,что вы хотите от программы.Если вы хотите "открыть замок с помощью книги",это нечётко,причём независимо от контекста.Можно её понять как "открыть книгу,приложить ее к замку и повернуть".Можно её понять как "подубасить книгой по замку,авось откроется".Можно её понять как "выучить заклинание из книги и открыть им замок",даже как "выдрать кучу страниц из книги и набить ими замок,пока он не откроется от переполнения".Команда "прочитать книгу и открыть замок" слишком сложна,потому что содержит в себе 2 действия.А вот команды "прочитать книгу" и "открыть замок" уже могут сделать что-нибудь дельное.Но опять же,не всегда.</p>
<p>С другой стороны,из контекста многое ясно.Не надо уточнять,когда вы хотите посмотреть на стол,что это - стол,стоящий у шкафа,который стоит у стены...и так далее,если это - единственный стол в комнате.Если честно,то для краткости вообще не надо особых уточнений относительно предметов.Каждый предмет в каждой комнате уникален,поэтому уточнение "открыть левую дверцу шкафа" излишне,если можно просто "открыть шкаф".Уточнения могут и не влиять на обработку команд,но набирать длинное предложение вместо двух или трёх слов - это морока.</p>
<p>Я напоминаю,что мне можно написать по адресу oreolek&gt;at&lt;gmail.com.Единственные вопросы,на которые я точно не отвечу - это подсказки по прохождению.</p>
<p align="right"><i>Александр Яковлев a.k.a. Oreolek.</i></p>
<br>Это поле понимает только одну команду - "продолжить".Из контекста ясно,зачем она:
<FORM NAME='input' ACTION='parse.pl' METHOD='POST'>\n
<input type='hidden' name='location' id='location' value='index'>\n
&gt; <input type=text id="in" name="input" size=64 maxlength=32>\n</form>
</body></html>
EOF
}
sub displayDefault(){
print "Content-type: text/html\n\n";
print <<"EOF";
<html>\n<head>
<script language="javascript">
window.onload=function() {document.getElementById("in").focus();};
</script>\n<title>Приветствие от автора</title>\n
<link type="text/css" rel="stylesheet" href="white.css">
</head><body>\n
Здравствуйте!<br>
Добро пожаловать на мой сайт.Вы находитесь на главной странице.
<br>Введите вашу команду в поле внизу.Вы можете делать огромное количество вещей,например,осматривать предметы,скачивать файлы
или брать понравившееся с собой,в свою "котомку".Котомка пригодится вам в решении задач,которые вы можете здесь встретить.<br>
Если вы хотите пользоваться функцией сохранения,то убедитесь,что в вашем браузере включена поддержка cookies.<br>
Также я хочу известить вас о том,что на сайте работает автосохранение.Все предметы,которые побывали в вашей котомке,
сохранятся в ней при следующем посещении сайта.<br>
Мне очень важно ваше мнение.Мой адрес электронной почты <em>oreolek &gt;at&lt; gmail.com.</em> Я стараюсь проверять свой электронный ящик как можно чаще,и пытаюсь ответить на каждое письмо.В любом случае,вы можете быть уверены:я прочту каждое письмо,которое пройдёт мой спам-фильтр.
<br>Чтобы продолжить,введите в поле внизу команду <b>"продолжить"</b>.
Удачи!<br>
<i>Oreolek.</i><br>
EOF
if ($error){print "<p id=\"err\">Команда не распознана.</p>";$error=0;}
print "Введите команду: ";
print "<FORM NAME='input' ACTION='parse.pl' METHOD='POST'>\n";
print "<input type='hidden' name='location' id='location' value='index'>\n";
print '&gt; <input type=text id="in" name="input" size=64 maxlength=32></form>';
print <<"EOF";
<div id="hint"><noscript>Нажмите Tab,</noscript>введите вашу команду и нажмите Enter.<br/>
В недоумении? Прочтите <a href="?help">инструкцию</a>.<br>
<a href="changelog.html"><div align="right">Версия $version</div></a>
</div>
EOF
print "</body>\n</html>";
}

BIN
my_games/LZN.tgz Normal file

Binary file not shown.

BIN
my_games/Monday.tgz Normal file

Binary file not shown.

Binary file not shown.

53
outside.pl Normal file
View File

@ -0,0 +1,53 @@
#!/usr/bin/perl
use locale;
require 'common.pl';
use CGI qw/:standard/;
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
my $debug_out="debug/debug_outside.txt";
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$in{$name} = $value;
}
my @cookieArray=split ("; ",$ENV{'HTTP_COOKIE'});
my $cookieName;my $cookieValue;
foreach (@cookieArray){
($cookieName,$cookieValue)=split("=",$_);
$cookieHash{$cookieName}=$cookieValue;
}
if ($ENV{'QUERY_STRING'} ne '') {
@qstr = split (/=/,$ENV{'QUERY_STRING'});
$command = $qstr[0];
$value = $qstr[1];
$value =~ s/[\x00-\x20<>\|;\(\)\$^\+!\^\[\]\?\"\'\`]//g;
if ($command eq "error"){$error=1;&displayDefault;}
else {&displayDefault;}
}
else{&displayDefault;}
sub displayDefault(){
print "Content-type: text/html\n\n";
print <<"EOF";
<html>\n
<head><script language="javascript">
window.onload=function() {document.getElementById("in").focus();};
</script>\n<title>Çà îêíîì</title>\n
EOF
if ($cookieHash{'light'}){print '<link type="text/css" rel="stylesheet" href="white.css">';}
else {print '<link type="text/css" rel="stylesheet" href="black.css">';}
print <<"EOF";
</head><body>
Âû ñòàâèòå ñèíþþ êîíå÷íîñòü íà ñòåíó.Îíà ïðèðàñòàåò ê êàìíþ,è âû ëåãêî âñòà¸òå íà íå¸.Çàöåïèâøèñü çà êðàé ñòåíû,âû çàáèðàåòåñü íàâåðõ.<br>
Íà ýòîì ìåñòå ÿ âûíóæäåí ïðèîñòàíîâèòü ìîé ðàññêàç. áóäóùåì îí ïðîäîëæèòñÿ.<br>
Ñ óâàæåíèåì,<be>
<em>Oreolek</em>
EOF
if ($error){print "<p id=\"err\">Êîìàíäà íå ðàñïîçíàíà.</p>";$error=0;}
print "<FORM NAME='input' ACTION='outside.pl' METHOD='POST'>\n";
print "<input type='hidden' name='location' id='location' value='outside'>\n";
print "&gt; <input type=text id=\"in\" name=\"input\" size=54 maxlength=65>\n";
print "</body>\n</html>";
}

BIN
porry.h3m.gz Normal file

Binary file not shown.

View File

@ -0,0 +1,38 @@
<b>Cara Mia</b>
Baccara<br>
<hr>
<p>
Take him in, whos warm and gentle<br>
Confidential, sentimental<br>
Thats the guy wholl open up your diamond eyes
</p><p>
He will be there when youre cryin<br>
Bravely tryin, self denyin<br>
He can wipe the tears from your sweet diamond eyes
</p><p>
Cara Mia mine, the stars are gonna shine forever<br>
Cara Mia mine, the moon is lookin down on you<br>
Lend your heart, beg steal or borrow<br>
Lend your heart again tomorrow<br>
Cara Mia why should diamond eyes be blue<br>
<i>(repeat)</i>
</p><p>
Lady fair, your sighs infection<br>
And hes wishin for nights of passion<br>
Look around and see the world through diamond eyes<br>
</p><p>
Loves the game, its in your favour<br>
Its got the flavour, for modern behaviour<br>
Take the cards and deal the hand with diamond eyes
</p><p>
Cara Mia mine, the stars are gonna shine forever<br>
Cara Mia mine, the moon is lookin down on you
</p><p>
Cara Mia mine, the stars are gonna shine forever<br>
Cara Mia mine, the moon is lookin down on you
</p><p>
Lend your heart, beg steal or borrow<br>
Lend your heart again tomorrow<br>
Cara Mia why should diamond eyes be blue
<i>(repeat)</i>
</p>

View File

@ -0,0 +1,42 @@
<b>Chris de Burgh</b><br>
Lady In Red
<hr>
<p>
I've never seen you looking so lovely as you did tonight<br>
I've never seen you shine so bright<br>
I've never seen so many men ask you if you wanted to dance<br>
They're looking for a little romance<br>
Given half a chance<br>
And I've never seen that dress you're wearing<br>
Or that highlights in your hair<br>
That catch your eyes<br>
I have been blind
</p><p>
The lady in red is dancing with me<br>
Cheek to cheek<br>
There's nobody here<br>
It's just you and me<br>
It's where I wanna be<br>
But I hardly know this beauty by my side<br>
I'll never forget the way you look tonight
</p><p>
I've never seen you looking so gorgeous as you did tonight<br>
I've never seen you shine so bright you were amazing<br>
I've never seen so many people want to be there by your side<br>
And when you turned to me and smiled it took my breath away<br>
And I have never had such a feeling such a feeling<br>
Of complete and utter love, as I do tonight
</p><p>
The lady in red is dancing with me<br>
Cheek to cheek<br>
There's nobody here<br>
It's just you and me<br>
It's where I wanna be<br>
But I hardly know this beauty by my side<br>
I'll never forget the way you look tonight
</p><p>
I never will forget the way you look tonight<br>
The lady in red<br>
My lady in red<br>
I love you
</p>

View File

@ -0,0 +1,59 @@
<b>Joe Dassin</b><br>
Le Champs-Elysees<br>
<br>
<i>Àâòîðû:Wilsh, Deighan<br>
Adaptateur: P. Delanoe<br>
Arrangements: Johnny Arthey<br>
(p) 1969 ed. Music 18<br>
Enregistrement: mars 1969<br>
Îðèãèíàë: "Waterloo road" par Smacka Fitzgibbons </i><br>
<hr>
<p>
Je m'baladais sur l'avenue<br>
Le coeur ouvert a l'inconnu<br>
J'avais envie de dire bonjour<br>
A n'importe qui<br>
N'importe qui ce fut toi<br>
Je t'ai dit n'importe quoi<br>
Il suffisait de te parler<br>
Pour t'apprivoiser
</p><p>
Aux Champs-Elysees<br>
Aux Champs-Elysees<br>
Au soleil, sous la pluie<br>
A midi ou a minuit<br>
Il y a tout ce que vous voulez<br>
Aux Champs-Elysees
</p><p>
Tu m'as dit "J'ai rendez-vous<br>
Dans un sous-sol avec des fous<br>
Qui vivent la guitare a la main<br>
Du soir au matin"<br>
Alors je t'ai accompagnee<br>
On a chante, on a danse<br>
Et l'on n'a meme pas pense<br>
A s'embrasser
</p><p>
Aux Champs-Elysees<br>
Aux Champs-Elysees<br>
Au soleil, sous la pluie<br>
A midi ou a minuit<br>
Il y a tout ce que vous voulez<br>
Aux Champs-Elysees
</p><p>
Hier soir deux inconnus<br>
Et ce matin sur l'avenue<br>
Deux amoureux tout etourdis<br>
Par la longue nuit<br>
Et de l'Etoile a la Concorde<br>
Un orchestre a mille cordes<br>
Tous les oiseaux du point du jour<br>
Chantent l'amour
</p><p>
Aux Champs-Elysees<br>
Aux Champs-Elysees<br>
Au soleil, sous la pluie<br>
A midi ou a minuit<br>
Il y a tout ce que vous voulez<br>
Aux Champs-Elysees
</p>

View File

@ -0,0 +1,76 @@
<b>Linkin Park</b><br>
In The End <br>
<hr>
<p>
(It starts with) <br>
One thing / I dont know why<br>
It doesnt even matter how hard you try<br>
Keep that in mind / I designed this rhyme<br>
To explain in due time<br>
All I know<br>
time is a valuable thing<br>
Watch it fly by as the pendulum swings<br>
Watch it count down to the end of the day<br>
The clock ticks life away<br>
Its so unreal<br>
Didnt look out below<br>
Watch the time go right out the window<br>
Trying to hold on / but didnt even know<br>
Wasted it all just to<br>
Watch you go<br>
I kept everything inside and even though I tried / it all fell apart<br>
What it meant to me / will eventually / be a memory / of a time when
</p><p>
I tried so hard<br>
And got so far<br>
But in the end<br>
It doesn't even matter<br>
I had to fall<br>
To lose it all<br>
But in the end<br>
It doesn't even matter
</p><p>
One thing / I dont know why<br>
It doesnt even matter how hard you try<br>
Keep that in mind / I designed this rhyme<br>
To remind myself how<br>
I tried so hard<br>
In spite of the way you were mocking me<br>
Acting like I was part of your property<br>
Remembering all the times you fought with me<br>
Im surprised it got so (far) <br>
Things arent the way they were before<br>
You wouldnt even recognize me anymore<br>
Not that you knew me back then<br>
But it all comes back to me<br>
In the end<br>
You kept everything inside and even though I tried / it all fell apart<br>
What it meant to me / will eventually / be a memory / of a time when I
</p><p>
I tried so hard<br>
And got so far<br>
But in the end<br>
It doesnt even matter<br>
I had to fall<br>
To lose it all<br>
But in the end<br>
It doesnt even matter
</p><p>
Ive put my trust in you<br>
Pushed as far as I can go<br>
And for all this<br>
Theres only one thing you should know<br>
Ive put my trust in you<br>
Pushed as far as I can go<br>
And for all this<br>
Theres only one thing you should know
</p><p>
I tried so hard<br>
And got so far<br>
But in the end<br>
It doesnt even matter<br>
I had to fall<br>
To lose it all<br>
But in the end<br>
It doesnt even matter
</p>

View File

@ -0,0 +1,53 @@
<b>Metallica</b><br>
The black album<br>
Nothing Else Matters<br>
<hr>
<p>
So close no matter how far<br>
couldn't be much more from the heart<br>
forever trusting who we are<br>
and nothing else matters
</p><p>
never opened myself this way<br>
life is ours, we live it our way<br>
all these words I don't just say<br>
and nothing else matters
</p><p>
trust I seek and I find in you<br>
every day for us something new<br>
open mind for a different view<br>
and nothing else matters
</p><p>
never cared for what they do<br>
never cared for what they know<br>
but I know
</p><p>
so close no matter how far<br>
couldn't be much more from the heart<br>
forever trusting who we are<br>
and nothing else matters
</p><p>
never cared for what they do<br>
never cared for what they know<br>
but I know
</p><p>
never opened myself this way<br>
life is ours, we live it our way<br>
all these words I don't just say
</p><p>
trust I seek and I find in you<br>
every day for us something new<br>
open mind for a different view<br>
and nothing else matters
</p><p>
never cared for what they say<br>
never cared for games they play<br>
never cared for what they do<br>
never cared for what they know<br>
and I know
</p><p>
so close no matter how far<br>
couldn't be much more from the heart<br>
forever trusting who we are<br>
no nothing else matters
</p>

View File

@ -0,0 +1,50 @@
<b>Paul Engemann</b><br>
Scarface (Push it to the limit)<br>
<hr>
<p>
Push it to the limit<br>
Walk along the razor's edge<br>
but don't look down, just keep your head<br>
and you'll be finished
</p><p>
Open up the limit<br>
past the point of no return<br>
You've reached the top but still you gotta learn<br>
how to keep it
</p><p>
Hit the wheel and double the stakes<br>
throttle wide open like a bat out of hell<br>
and you crash the gates<br>
<i>(crash the gates)</i>
</p><p>
Going for the back of beyond<br>
Nothing gonna stop you<br>
there's nothing that strong<br>
So close now you're nearly at the brink<br>
so, push it
</p><p>
<i>(Ooo yeah)</i>
</p><p>
Welcome to the limit<br>
<i>(The limit)</i>
Take it maybe one step more<br>
The power game's still playing so<br>
you better win it
</p><p>
Push it to the limit<br>
<i>(The limit)</i>
With no one left to stand in your way<br>
you might get careless, but you'll never be safe<br>
while you still feel it
</p><p>
Welcome to the limit<br>
<i>(The limit)</i>
Standing on the razor's edge<br>
don't look down just keep your head<br>
and you'll be finished
</p><p>
Welcome to the limit<br>
<i>(The limit)</i>
Push it to the limit<br>
<i>(The limit)</i>
</p>

View File

@ -0,0 +1,20 @@
<b>Пикник</b><br>
"Иероглиф"<br>
<hr>
<p>
Мое имя - cтершийся Иероглиф<br>
Мои одежды залатаны ветром,<br>
Что несу я в зажатых ладонях<br>
Меня не спросят,и я не отвечу.
</p><p>
И как перед битвой,<br>
Решительной битвой,<br>
Стою у каждого перекрестка<br>
Hа море асфальта я вижу свой берег,<br>
Свою голубую россыпь.
</p><p>
Hа все вопросы pассмеюсь я тихо<br>
Hа все вопросы не будет ответа,<br>
Ведь имя мое - Иероглиф<br>
Мои одежды залатаны ветром.
</p>

View File

@ -0,0 +1,23 @@
<b>Пикник</b><br>
"Великан"<br>
<hr><p>
Если б мне такие руки<br>
Руки как у великана,<br>
Я б сложил их на своих коленях<br>
Сам сидел бы тихо, тише вздоха, тише камня.
</p><p>
Если б мне такие крылья<br>
Чтоб несли меня по свету,<br>
Ни минуты не колеблясь<br>
Я бы вырвал их и бросил ветру, бросил ветру.
</p><p>
Если б мне глаза такие<br>
Чтоб все видели, преград не зная,<br>
Я б закрыл их плотно-плотно<br>
Сам сидел бы тихо, головой качая, головой качая.
</p><p>
Если б залилась ты смехом,<br>
С ветром косами играя,<br>
Я летел бы вслед за эхом,<br>
Дивный голос догоняя, догоняя.
</p>

View File

@ -0,0 +1,28 @@
<b>Секрет</b><br>
Дай мне<br>
<br>
<i>музыка и слова М.Леонидова, Н.Фоменко и А.Заблудовского </i><br>
<hr>
<p>
Распахните ваши окна<br>
Ветру свободы,<br>
Этот день мы будем помнить<br>
Долгие годы.<br>
Дайте друг другу руки,<br>
Пусть разбудят этот мир оркестра звуки!
</p><p>
<i>Пр:</i> <br>
Дай мне тепло твоих ладоней!<br>
Верь - мы вражду и смерть прогоним!<br>
Встанем спиною к спине,<br>
И нам будет легче вдвойне!
</p><p>
И, назло снегам и грому, ливням и бурям,<br>
Пусть звенит над нашим домом<br>
Солнце июля.<br>
Здесь всем найдется место,<br>
Пусть летит над сонным миром<br>
Звук оркестра!
</p><p>
<i>Пр: (2 раза)</i>
</p>

View File

@ -0,0 +1,52 @@
<b>Секрет</b><br>
Именины у Кристины <br>
<br>
<i>музыка М.Леонидова, слова Д.Рубина </i>
<hr>
<p>
Раз в год именины у Кристины, и вот<br>
Раз в год всех друзей Кристина зовет.<br>
Раз в год как положено<br>
Все расположено,<br>
Все разложено, все стынет и ждет.<br>
Пол с утра натерт до блеска Кристиной,<br>
Стол раздвинут и накрыт в гостиной,<br>
Стулья расставлены,<br>
Свечи заправлены<br>
В праздничный пирог.
</p><p>
<i>Пр:</i>
Именины, именины у Кристины -<br>
Полон дом гостей.<br>
Именины: розы, книги, апельсины<br>
Дарят нынче ей.<br>
Эй, Кристина, я нынче желаю тебе долгих лет!<br>
Эй, Кристина, я нынче желаю тебе жить без бед!<br>
Эй, Кристина!
</p><p>
Раз в год дом устанет от счастливых хлопот,<br>
Раз в год до полуночи дом кругом пойдет,<br>
Вот-вот праздник примется,<br>
Ждет именинница:<br>
Час назначенный сейчас пробьет.<br>
Скорей! Все готово давно у Кристины.<br>
Эй! Ждут начала именины:<br>
Стулья расставлены,<br>
Свечи заправлены<br>
В праздничный пирог.
</p><p>
<i>Пр:</i>
</p><p>
Раз в год праздник кончится, когда рассветет,<br>
Раз в год провожать друзей Кристина пойдет,<br>
Вот-вот все закончится,<br>
Ей плакать хочется,<br>
Свечи гасятся, и сьеден торт.<br>
Дом, где справлялись именины Кристины,<br>
Сном покрыт, и комнаты пустынны.<br>
Небо затянется, <br>
Только останется<br>
Вспоминать весь год...
</p><p>
<i>Пр:</i>
</p>

View File

@ -0,0 +1,39 @@
<b>Cекрет</b><br>
Твои шаги
<hr>
<p>1. Когда за окном глаза закроет день,<br>
И на небе ночном проснется звезд сирень,<br>
А там, там за углом фонарь качает тень,<br>
Я вновь одинок, а ветер листья крутит.<br>
Часы на стене мне снова вечер мерят,<br>
В пустой темноте лишь только я и время,<br>
Но кажется мне - твои шаги за дверью<br>
Вечер разбудят.
</p><p>
Пр: Под луной голубой<br>
Мы, обнявшись с тобой,<br>
Над водой стоим.<br>
Звезды в вечной дали<br>
Дарят песни свои<br>
Только нам двоим.<br>
Город спит, но для нас<br>
Заиграют сейчас<br>
Фонари свой полуночный вальс,<br>
Отдадимся беспечному ветру в обьятья -<br>
Эта ночь будет только для нас.
</p><p>
2. Но вечер безмолвен,<br>
И шагов не слышно.<br>
Лишь белые волны<br>
Облаков над крышей,<br>
Плывут на восток,<br>
Где скоро утро будет,<br>
Я одинок,<br>
А ветер листья крутит.<br>
Часы на стене мне снова вечер мерят,<br>
В пустой темноте лишь только я и время,<br>
Но кажется мне - твои шаги за дверью<br>
Вечер разбудят.<br>
</p><p>
<i>Пр: </i>
</p>

429
weblog-admin.pl Normal file
View File

@ -0,0 +1,429 @@
#!/usr/bin/perl
require 'config.pl';
$header = "$forumdir/header.txt";
##########################################################################
################ NO EDITING NEEDED BELOW HERE ###################
##########################################################################
#
##########################################################################
# parse form values
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$in{$name} = $value;
}
##########################################################################
# miscellaneous values
$command = $in{'command'};
@months = ("January","February","March","April","May","June","July","August","September","October","November","December");
##########################################################################
# determine what sub-routine to run based on the $command form value
if ($command eq '') {&login;}
elsif ($command eq 'displayList') {&displayList;}
elsif ($command eq 'displayThreads') {&displayThreads;}
elsif ($command eq 'deleteThreads') {&deleteThreads;}
elsif ($command eq 'displayEditThread') {&displayEditThread;}
elsif ($command eq 'editThread') {&editThread;}
##########################################################################
# prints the login page
sub login {
&printHeader("$forumclass");
print <<"EOF";
<tr><td><table cellpadding="10" cellspacing="1" border="0" width="410" class="border"><tr><td colspan="0" bgcolor="white"><br><table width="410" border="0" cellspacing="1" cellpadding="0" bordercolor="white"><table width="410" align="center" border="0" cellspacing="0" cellpadding="0"><h2>Weblog Administrator - Please Login</h2> </span><BR><BR>
<FORM ACTION="weblog-admin.pl" METHOD="POST">
<INPUT TYPE="Hidden" NAME="command" VALUE="displayList">
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=1>
<TR><TD CLASS="txt">Username:</TD>
<TD><INPUT TYPE="Text" CLASS="txt" NAME="username" SIZE="25"></TD></TR>
<TR><TD CLASS="txt">Password:</TD>
<TD><INPUT TYPE="Password" CLASS="txt" NAME="password" SIZE="25"></TD></TR>
<TR><TD CLASS="headers"><BR><BR></TD>
<td><INPUT TYPE="Submit" CLASS="submit" VALUE="Login"></td></TR>
</TABLE>
</FORM><BR>Return to your weblog by clicking <A HREF="weblog.pl">here</A><br>----------------------------------------------------------------------------------<BR><small>Powered by PerlBlog</small><br><br></tr></table></td></tr></td></tr></table></div>
EOF
&printSooter;
}
##########################################################################
# checks username and password, called from every sub-routine
sub checkAccess {
if ($in{'username'} ne $adminusername || $in{'password'} ne $adminpassword) {
print "Content-type: text/html\n\n";
print "Access Denied - Click Back to Retry Your Login and Password.";
exit(0);
}
}
##########################################################################
# prints a list of months that have been archived
sub displayList {
&checkAccess;
&printHeader("");
print "<FORM ACTION=\"weblog-admin.pl\" METHOD=\"POST\">\n";
open(MONTHS,"$forumdir/months.txt");
@headerfiles = <MONTHS>;
close(MONTHS);
print <<"EOF";
<tr><td><table cellpadding="10" cellspacing="1" border="0" width="410" class="border"><tr><td colspan="0" bgcolor="white"><BR><table width="410" border="0" cellspacing="1" cellpadding="0" bordercolor="white"><table width="410" align="center" border="0" cellspacing="0" cellpadding="0"><h2>Choose Month to Edit</h2> </span><p>&nbsp;</p>
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=1>
<TR BGCOLOR="#FFFFFF"><TD CLASS="headers">Month</TD><TD CLASS="headers">Year</TD></TR>
EOF
foreach $headerfile (@headerfiles) {
if ($headerfile ne '') {
$year = substr ($headerfile,0,4);
$month = substr ($headerfile,4,5);
$month = sprintf("%5.0f", $month);
$monthname = $months[$month-1];
$headerfile = substr ($headerfile,0,6);
print "<TR BGCOLOR=\"#FFFFFF\"><TD><INPUT TYPE=\"Radio\" NAME=\"headerfile\" VALUE=\"$headerfile\">$monthname&nbsp;&nbsp;</TD><TD>$year</TD></TR>\n";
}
}
print <<"EOF";
<INPUT TYPE="Hidden" NAME="username" VALUE="$in{username}">
<INPUT TYPE="Hidden" NAME="password" VALUE="$in{password}">
<INPUT TYPE="Hidden" NAME="command" VALUE="displayThreads">
<TR BGCOLOR="#FFFFFF"><TD><BR><BR><INPUT TYPE="Submit" class="submit" VALUE="Edit Month"></TD></TR>
</TABLE>
</FORM><br><BR><small>Powered by PerlBlog</small><br><br></tr></table></td></tr></td></tr></table></div>
EOF
&printSooter;
}
##########################################################################
# print the headers for a particular month
sub displayThreads {
&checkAccess;
$headerfile = $in{'headerfile'};
$year = substr ($headerfile,0,4);
$month = substr ($headerfile,4,5);
$month = sprintf("%5.0f", $month);
$monthname = $months[$month-1];
open(DATA,"$forumdir/$headerfile.txt");
@headerlines = <DATA>;
close(DATA);
$length = @headerlines;
&printHeader("");
print <<"EOF";
<SCRIPT LANGUAGE="JavaScript">
<!--
function submitForm(which) {
df = document.forum
if (which == 'delete') {
var str = ""
for (var i=0; i<$length; i++) {
if (eval('df.delete'+i+'.checked == true')) {
str += eval('df.delete'+i+'.value')+","
}
}
if (str!="") {
df.todelete.value = str.substring(0,str.length-1)
df.command.value = "deleteThreads"
df.submit()
}
else {
df.todelete.value = str.substring(0,str.length-1)
df.command.value = "deleteThreads"
df.submit()
}
}
else if (which == 'edit') {
var editselected = false
for (var i=0; i<df.toedit.length; i++) {
if (df.toedit[i].checked == true) {
editselected = true
break
}
}
if (editselected == false) {
df.command.value = "displayEditThread"
df.submit()
}
else {
df.command.value = "displayEditThread"
df.submit()
}
}
}
//-->
</SCRIPT>
<tr><td><table cellpadding="10" cellspacing="1" border="0" width="410" class="border"><tr><td colspan="0" bgcolor="white"><BR><table width="410" border="0" cellspacing="1" cellpadding="0" bordercolor="white"><table width="410" align="center" border="0" cellspacing="0" cellpadding="0"><h2>Editing/Deleting Entries | <A HREF="weblog.pl"><B>$monthname $year</b></a></h2><BR><BR>
<TABLE BORDER=0 width="650" CELLSPACING=1 CELLPADDING=1>
<TR BGCOLOR="#FFFFFF"><TD class="border">&nbsp;Delete</TD><TD class="border">&nbsp;Edit</TD><TD class="border">&nbsp;Subject</TD><TD class="border">&nbsp;Entry</TD><TD CLASS="headers">Responses</TD>
<FORM NAME="forum" ACTION="weblog-admin.pl" METHOD="POST">
EOF
for ($i=0;$i<@headerlines;$i++) {
if ($headerlines[$i] ne '') {
@info = split (/_/, $headerlines[$i]);
$num = $info[0];
$subject = $info[1];
$name = $info[2];
$date = $info[3];
$responses = $info[6];
print <<"EOF";
<TR BGCOLOR="#FFFFFF"><TD ALIGN="CENTER"><INPUT TYPE="Checkbox" NAME="delete$i" VALUE="$num"></TD>
<TD ALIGN="CENTER"><INPUT TYPE="Radio" NAME="toedit" VALUE="$num"></TD>
<TD>&nbsp;$subject&nbsp;</TD><TD>&nbsp;$name&nbsp;</TD><TD ALIGN="CENTER">$responses</TD></TR>
EOF
}
}
print <<"EOF";
<TR BGCOLOR="#FFFFFF">
<TD><BR><BR><INPUT TYPE="BUTTON" class="submit" VALUE="Delete" onClick="submitForm('delete')"></TD>
<TD><BR><BR><INPUT TYPE="BUTTON" class="submit" VALUE="Edit" onClick="submitForm('edit')"></TD>
</TR>
</TABLE>
<INPUT TYPE="HIDDEN" NAME="todelete">
<INPUT TYPE="HIDDEN" NAME="headerfile" VALUE="$headerfile">
<INPUT TYPE="HIDDEN" NAME="username" VALUE="$in{username}">
<INPUT TYPE="HIDDEN" NAME="password" VALUE="$in{password}">
<INPUT TYPE="HIDDEN" NAME="command" VALUE="">
</FORM><br><BR><small>Powered by PerlBlog</small><br><br></tr></table></td></tr></td></tr></table></div>
EOF
&printSooter;
}
##########################################################################
# prints the edit thread page, where you edit the source file to a message
sub displayEditThread {
&checkAccess;
$headerfile = $in{'headerfile'};
$toedit = $in{'toedit'};
$toedit =~ s/[\x00-\x20<>\|;\(\)\$^\+!\^\[\]\?\"\'\`]//g;
&printHeader("");
print <<"EOF";
<tr><td><table cellpadding="10" cellspacing="1" border="0" width="750" class="border"><tr><td colspan="0" bgcolor="white"><BR><table width="600" border="0" cellspacing="1" cellpadding="0" bordercolor="white"><table width="600" align="center" border="0" cellspacing="0" cellpadding="0"><h2>Editing/Deleting Entries | <A HREF="weblog.pl">Thread $toedit</A></h2><br><font size="1">Edit within the first &lt;name&gt; parameters for the actual blog entry<br>Comments follow blog entry</font></span><center><BR><BR></B>
<FORM NAME="forum" ACTION="weblog-admin.pl" METHOD="POST">
<TEXTAREA NAME="body" class="txt" ROWS=20>
EOF
open(DATA,"$forumdir/messages/$toedit.txt");
@msglines = <DATA>;
close(DATA);
foreach $msgline (@msglines) {
print $msgline;
}
print "</TEXTAREA>\n";
print <<"EOF";
<BR>
<INPUT TYPE="HIDDEN" NAME="toedit" VALUE="$toedit">
<INPUT TYPE="HIDDEN" NAME="headerfile" VALUE="$headerfile">
<INPUT TYPE="HIDDEN" NAME="username" VALUE="$in{username}">
<INPUT TYPE="HIDDEN" NAME="password" VALUE="$in{password}">
<INPUT TYPE="HIDDEN" NAME="command" VALUE="editThread"><BR><BR>
<INPUT TYPE="Submit" class="submit" VALUE="Ñîõðàíèòü">
</FORM><br><BR><small>Powered by PerlBlog</small><br><br></tr></table></td></tr></td></tr></table></div>
EOF
&printSooter;
}
##########################################################################
# sub-routine of &displayPreview that wraps a block of text to a given line length
# Deleted to see if it affect runing on Linux. Works okay on NTP on PC with Apache
# Not needed for admin
##########################################################################
# saves the message that was being edited
sub editThread {
&checkAccess;
&printHeader("");
$headerfile = $in{'headerfile'};
$toedit = $in{'toedit'};
$body = $in{'body'}; ### redid, dumped unneeded textwrap subroutine
@msglines = split(/\n/,$body);
open(DATA,">$forumdir/messages/$toedit.txt");
foreach $msgline (@msglines) {
if ($msgline !~ /<\/msg>/) {chop($msgline);}
print DATA "$msgline\n";
}
close(DATA);
for ($i=0; $i<@msglines; $i++) {
if ($msglines[$i] =~ /<subject>(.*)<\/subject>/) {
$subject = $1;
}
if ($msglines[$i] =~ /<name>(.*)<\/name>/) {
$name = $1;
}
if ($msglines[$i] =~ /<date>(.*)<\/date>/) {
$date = $1;
last;
}
}
$replies = -1;
for ($i=0; $i<@msglines; $i++) {
if ($msglines[$i] =~ /<msg>/) {
$replies += 1;
$replytime
}
}
open(HEADER,"$forumdir/$headerfile.txt");
@headers = <HEADER>;
close(HEADER);
open(HEADER,">$forumdir/$headerfile.txt");
foreach $headerline (@headers) {
@headerdata = split(/_/, $headerline);
$threadnum = $headerdata[0];
if ($threadnum == $toedit) {
@headerdata = split(/_/, $headerline);
print HEADER "$toedit\_$subject\_$name\_$image\_$postm\_$date\_0\_&nbsp;\n";
}
else {print HEADER "$headerline";}
}
close(HEADER);
open(ALL,"$forumdir/all.txt");
@headers = <ALL>;
close(ALL);
open(ALL,">$forumdir/all.txt");
foreach $headerline (@headers) {
@headerdata = split(/_/, $headerline);
$threadnum = $headerdata[0];
if ($threadnum == $toedit) {
@headerdata = split(/_/, $headerline);
print ALL "$toedit\_$subject\_$name\_$image\_$postm\_$date\_0\_&nbsp;\n";
}
else {print ALL "$headerline";}
}
close(ALL);
print <<"EOF";
<tr><td><table cellpadding="10" cellspacing="1" border="0" width="410" class="border"><tr><td colspan="0" bgcolor="white"><BR><table width="410" border="0" cellspacing="1" cellpadding="0" bordercolor="white"><table width="410" align="center" border="0" cellspacing="0" cellpadding="0"><h2>Editing Entries | <A HREF="weblog.pl">Successful</A></h2><BR><BR>
<P>Message number $toedit has been saved<BR><BR>
<TABLE BORDER="0" CELLSPACING="1" CELLPADDING="1"><TR>
<FORM NAME="forum" ACTION="weblog-admin.pl" METHOD="POST">
<INPUT TYPE="HIDDEN" NAME="username" VALUE="$in{username}">
<INPUT TYPE="HIDDEN" NAME="password" VALUE="$in{password}">
<INPUT TYPE="HIDDEN" NAME="command" VALUE="displayList">
<INPUT TYPE="Submit" class="submit" VALUE="Choose Different Month">
</FORM><br>
<FORM NAME="forum" ACTION="weblog-admin.pl" METHOD="POST">
<INPUT TYPE="HIDDEN" NAME="username" VALUE="$in{username}">
<INPUT TYPE="HIDDEN" NAME="password" VALUE="$in{password}">
<INPUT TYPE="HIDDEN" NAME="headerfile" VALUE="$headerfile">
<INPUT TYPE="HIDDEN" NAME="command" VALUE="displayThreads">
<INPUT TYPE="Submit" class="submit" VALUE="Edit This Month Again">
</FORM>
<FORM><br>
<INPUT TYPE="BUTTON" class="submit" VALUE="View Weblog" onClick="document.location.href='weblog.pl'">
</FORM><br><BR><small>Powered by PerlBlog</small><br><br></tr></table></td></tr></td></tr></table></div>
EOF
&printSooter;
}
##########################################################################
# deletes the messages that were selected in the &displayThreads page
sub deleteThreads {
&checkAccess;
&printHeader("");
$headerfile = $in{'headerfile'};
$todelete = $in{'todelete'};
@threads = split (/,/, $todelete);
open(HEADER,"$forumdir/$headerfile.txt");
@headerlines = <HEADER>;
close(HEADER);
open(HEADER,">$forumdir/$headerfile.txt");
for ($i=0; $i<@headerlines; $i++) {
$remove = "false";
for ($j=0; $j<@threads; $j++) {
if ($headerlines[$i] =~ /$threads[$j]_/) {
$remove = "true";
}
}
if ($remove eq "false") {print HEADER "$headerlines[$i]";}
}
close(HEADER);
open(ALL,"$forumdir/all.txt");
@headerlines = <ALL>;
close(ALL);
open(ALL,">$forumdir/all.txt");
for ($i=0; $i<@headerlines; $i++) {
$remove = "false";
for ($j=0; $j<@threads; $j++) {
if ($headerlines[$i] =~ /$threads[$j]_/) {
$remove = "true";
}
}
if ($remove eq "false") {print ALL "$headerlines[$i]";}
}
close(ALL);
foreach $thread (@threads) {
unlink ("$forumdir/messages/$thread.txt");
}
print <<"EOF";
<tr><td><table cellpadding="10" cellspacing="1" border="0" width="410" class="border"><tr><td colspan="0" bgcolor="white"><BR><table width="410" border="0" cellspacing="1" cellpadding="0" bordercolor="white"><table width="410" align="center" border="0" cellspacing="0" cellpadding="0"><h2>Deleting Entries | <A HREF="weblog.pl">Successful</A></h2><BR><BR><P>The following threads were removed:<BR>
EOF
foreach $thread (@threads) {
print "$thread,";
}
print <<"EOF";
<BR><BR>
<TABLE BORDER="0" CELLSPACING="1" CELLPADDING="1"><TR>
<FORM NAME="forum" ACTION="weblog-admin.pl" METHOD="POST">
<INPUT TYPE="HIDDEN" NAME="username" VALUE="$in{username}">
<INPUT TYPE="HIDDEN" NAME="password" VALUE="$in{password}">
<INPUT TYPE="HIDDEN" NAME="command" VALUE="displayList">
<INPUT TYPE="Submit" class="submit" VALUE="Choose Different Month">
</FORM><br>
<FORM NAME="forum" ACTION="weblog-admin.pl" METHOD="POST">
<INPUT TYPE="HIDDEN" NAME="username" VALUE="$in{username}">
<INPUT TYPE="HIDDEN" NAME="password" VALUE="$in{password}">
<INPUT TYPE="HIDDEN" NAME="headerfile" VALUE="$headerfile">
<INPUT TYPE="HIDDEN" NAME="command" VALUE="displayThreads">
<INPUT TYPE="Submit" class="submit" VALUE="Edit This Month Again">
</FORM><br>
<FORM>
<INPUT TYPE="BUTTON" class="submit" VALUE="View weblog" onClick="document.location.href='weblog.pl'">
</FORM><br><BR><small>Powered by PerlBlog</small><br><br></tr></table></td></tr></td></tr></table></div>
EOF
&printSooter;
}
##########################################################################
# common HTML header for all pages
sub printHeader {
my($title) = @_;
print "Content-type: text/html\n\n";
print "<html><meta http-equiv=\"Content-Type\" content='text/html; charset=$charset'><head>";
if ($cookieHash{'light'}){print '<link type="text/css" rel="stylesheet" href="white.css">';}
else {print '<link type="text/css" rel="stylesheet" href="black.css">';}
print <<"EOF";
<title>$blogtitle</title>
<meta name="description" content="$description" />
<meta name="keywords" content="$keywords" />
<meta name="author" content="$author" />
</head>
<body>
EOF
print "<span class=ftitle>$title</span>\n";
print "<P>\n";
}
##########################################################################
# common HTML footer for all pages
sub printFooter {
open FOOTER, "$forumdir/footer.txt"
or die "Can't open footer file because $!\n";
print while (<FOOTER>);
close FOOTER;
}
print "\n<br></body></html>\n\n";

38
weblog/last_5.pl Normal file
View File

@ -0,0 +1,38 @@
#!/usr/bin/perl
use CGI":standard";
require 'common.pl';
#parse cookies
my @cookieArray=split ("; ",$ENV{'HTTP_COOKIE'});
my $cookieName;my $cookieValue;my %cookieHash;
foreach (@cookieArray){
($cookieName,$cookieValue)=split("=",$_);
$cookieHash{$cookieName}=$cookieValue;
}
#parse GET input
if ($ENV{'QUERY_STRING'} ne '') {
@qstr = split (/=/,$ENV{'QUERY_STRING'});
$command = $qstr[0];
$value = $qstr[1];
$value =~ s/[\x00-\x20<>\|;\(\)\$^\+!\^\[\]\?\"\'\`]//g;
if ($command eq "random") {&randomPost;}
elsif ($command eq "write"){print redirect ('write.pl');}
else {&default;}
}
else {&default;}
#####SUBS
sub default{
&displaypost("temp.txt");
# &printHeader("Áëîã Àëåêñàíäðà ßêîâëåâà a.k.a. Oreolek");
# print "Ïîêà ïóñòî.\n<br>\n";
# &printFooter;
}
sub displaypost(){
$filename=shift;
open (MESSAGE,"$filename");
while (<MESSAGE>){
}
&printHeader("$title");
&printFooter;
}

47
weblog/post_message.pl Normal file
View File

@ -0,0 +1,47 @@
#!/usr/bin/perl
require 'common.pl';
#parse POST input
my $temp;my $pair;my %in;
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
my @pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$in{$name} = $value;
}
if ($in{'body'} eq ""){
&printHeader("Îøèáêà");
print "<h2 align=\"center\">òåëî ñîîáùåíèÿ íå ïåðåäàíî.</h2>";
&printFooter;
die;
}
my $min;my $hour;my $mon;my $year;#reading date
(undef,$min,$hour,$mday,$mon,$year,undef,undef,undef) = localtime(time);
$year = 1900 + $year;$mon++;
if ($mon <10){$mon = "0$mon";}
if ($mday <10) {$mday = "0$mday";}
if ($hour<10) {$hour = "0$hour";}
if ($min<10) {$min = "0$min";}
my $title;if ($in{'title'} gt " "){$title=$in{'title'};}#parsing title
else {$title="$mday.$mon.$year, $hour:$min";}
open (TEMP,">weblog/temp.txt");#íåãîæå ñòîëüêî êá â ïàìÿòè õðàíèòü
print TEMP "$in{'body'}";
close(TEMP);
my $message = "messages/$year/$mon/$mday$hour$min.txt";
open (MESSAGE,">$message");
print MESSAGE "\<title\>$title\<\/title\>\n\<body\>\n";
open (TEMP,"temp.txt");
while (<TEMP>){
$temp=$_;
$temp =~ s/</[/g;
$temp =~ s/>/]/g;#BBCode
print MESSAGE "$temp<br>\n";#ñòðîêà çàêàí÷èâàåòñÿ \n,ýòî ìû ìåíÿåì íà <br>
}
close (TEMP);
print MESSAGE "\n</body>\n";
close (MESSAGE);
&printHeader("Îòïðàâêà óñïåøíà",1);
print "<h2 align=\"center\">Îòïðàâêà óñïåøíà.</h2>";
&printFooter();

2
weblog/temp.txt Normal file
View File

@ -0,0 +1,2 @@
Привет тебе,о неизвестны!
Пышу тебе <b>Я</b>!!!

56
weblog/write.pl Normal file
View File

@ -0,0 +1,56 @@
#!/usr/bin/perl
require 'common.pl';
#parse POST input
my $temp;my $pair;my %in;
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
my @pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$in{$name} = $value;
}
if ($in{'username'}) {&writemessage;}#POST isn't empty,new message pending
else {&checkaccess;}
sub writemessage{
if ($in{'username'} eq "the master of universe" && $in{'password'} eq "the greatest man in the world"){
&printHeader("Íàïèñàòü íîâîå ñîîáùåíèå",1);
print <<"END";
<h2 align="center">Íàïèñàòü íîâîå ñîîáùåíèå</h2>
<FORM NAME="form" ACTION="post_message.pl" METHOD="POST">
Çàãîëîâîê ñîîáùåíèÿ (åñëè ïóñò,îí áóäåò çàìåíåí íà òåêóùóþ äàòó):
<p><input type="text" name="title" size="50" maxlength="225"></p>
Òåêñò ñîîáùåíèÿ:
<p><textarea cols="100" rows="15" name="body"></textarea></p>
<br><INPUT TYPE="Submit" class='submit' VALUE="Îòïðàâèòü â áëîã">
</form>
END
&printFooter;
}
else{
&printHeader("Íåâåðíûå ëîãèí è ïàðîëü",1);
print <<"END";
<h3 align="center">Íåâåðíûå ëîãèí èëè ïàðîëü</h3>
Òîò ëîãèí è ïàðîëü,÷òî âû ââåëè,îêàçàëèñü íåâåðíû.Âû íå ñìîæåòå íàïèñàòü ñîîáùåíèå â ýòîò äíåâíèê.Ñîæàëååì.
END
&printFooter;
}
}
sub checkaccess{
&printHeader("Ïðîâåðêà ïîëüçîâàòåëÿ",1);
print <<"END";
<h3 align="center">Íàïèñàòü íîâîå ñîîáùåíèå</h3>
<FORM NAME="forum" ACTION="?" METHOD="POST">
<table border=0><tr><td>Èìÿ ïîëüçîâàòåëÿ:</td>
<td><input type="text" name="username" size="35" maxlength="225"></td></tr>
<tr><td>Ïàðîëü:</td>
<td><input type="password" name="password" size="35" maxlength="225"></td></tr>
</table>
<input type="submit" value="Ïðîâåðèòü">
</form>
END
&printFooter();
}