Implements an image recognition captcha.

"; break; case 'admin/modules#description': case 'admin/modules/textimage': case 'admin/textimage': $output = t('Implements an image recognition captcha.'); break; } return $output; } function textimage_captchachallenge(&$form) { $form['captcha_response'] = array ( '#type' => 'textfield', '#title' => t('Captcha Validation'), '#default_value' => '', '#required' => TRUE, '#validate' => array('_captcha_validate' => array()), '#description' => t('Please type in the letters/numbers that are shown in the image above.'), '#prefix' => 'Captcha Image: you will need to recognize the text in it.', ); return $form; } function textimage_captchavalidate(&$captcha_word, &$correct) { $captcha_word = drupal_strtolower($captcha_word); if (($_SESSION['captcha'] != '') && $captcha_word == $_SESSION['captcha']) { $correct = true; } else { $correct = false; form_set_error('captcha_response', t('The image verification code you entered is incorrect.')); } } /** * Implementation of hook_menu(). */ function textimage_menu($may_cache) { $items = array(); $suffix = ''; if (arg(2)!=null) $suffix='/'.arg(2); $items[] = array( 'path' => '_textimage/image'.$suffix, 'title' => t('textimage'), 'callback' => '_textimage_image', 'access' => user_access('access textimages'), 'type' => MENU_CALLBACK ); return $items; } function textimage_perm() { return array('access textimages'); } function textimage_settings() { $fonts_path = variable_get("textimage_fonts_path", ""); $images_path = variable_get("textimage_images_path", ""); //check for GD if (!function_exists(imagecreate)) drupal_set_message(t('Image library not available. Textimage needs the GD library extension to be installed. Please install GD.')); //check for TTF support elseif (!function_exists(imagettftext)) drupal_set_message(t('Your image library does not seem to have TrueType font support. Textimage will work, but will use the default inbuilt font.'),'status'); //check for valid font path elseif ($fonts_path!="" && !is_dir($fonts_path)) drupal_set_message(t('The current font path is invalid. The default font will be used.')); //check for valid image path if ($images_path!="" && !is_dir($images_path)) drupal_set_message(t('The current images path is invalid. No images will be used.')); //Fonts settings $form['fonts'] = array( '#type' => 'fieldset', '#title' => t('Fonts settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['fonts']['textimage_use_only_upper'] = array( '#type' => 'checkbox', '#title' => t('Use only Uppercase'), '#default_value' => variable_get('textimage_use_only_upper',0) ); $form['fonts']['textimage_fonts_path'] = array( '#type' => 'textfield', '#title' => t('TrueType Fonts Path'), '#default_value' => $fonts_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the Truetype (.ttf) fonts are stored. If you do not provide any fonts, the module will use the default font for text. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['fonts']['textimage_font_size'] = array( '#type' => 'textfield', '#title' => t('Font Size'), '#default_value' => variable_get('textimage_font_size',24), '#size' => 5, '#maxlength' => 2, '#description' => t('Font size of Captcha text (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_font_size")), ); $form['fonts']['textimage_char_spacing_max'] = array( '#type' => 'textfield', '#title' => t('Character Spacing'), '#default_value' => variable_get('textimage_char_spacing_max',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the kerning between letters in Captcha. Higher numbers indicate more spacing.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_spacing_max")), ); $form['fonts']['textimage_char_jiggle_amount'] = array( '#type' => 'textfield', '#title' => t('Character Jiggle'), '#default_value' => variable_get('textimage_char_jiggle_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of up and down movement in the Captcha letters. Higher numbers indicate more jiggling.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_jiggle_amount")), ); $form['fonts']['textimage_char_rotate_amount'] = array( '#type' => 'textfield', '#title' => t('Character Rotation'), '#default_value' => variable_get('textimage_char_rotate_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of rotation in the Captcha letters (in degrees, only works with non-default fonts).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_rotate_amount")), ); $form['fonts']['textimage_char_size_amount'] = array( '#type' => 'textfield', '#title' => t('Character Size Adjustment'), '#default_value' => variable_get('textimage_char_size_amount',2), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of variation in size between the different letters in the Captcha (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_size_amount")), ); //Image settings $form['images'] = array( '#type' => 'fieldset', '#title' => t('Image settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['images']['textimage_images_path'] = array( '#type' => 'textfield', '#title' => t('Background Images Path'), '#default_value' => $images_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the background images are stored. If you do not provide a directory, solid colors will be used. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['images']['textimage_image_noise'] = array( '#type' => 'textfield', '#title' => t('Image Noise (pixels)'), '#default_value' => variable_get('textimage_image_noise',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random pixels) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_noise")), ); $form['images']['textimage_image_lines'] = array( '#type' => 'textfield', '#title' => t('Image Noise (lines)'), '#default_value' => variable_get('textimage_image_lines',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random lines) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_lines")), ); $form['images']['textimage_image_margin'] = array( '#type' => 'textfield', '#title' => t('Image Margin'), '#default_value' => variable_get('textimage_image_margin',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Set a distance between the Captcha letters and the edges of the image.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_margin")), ); $form['info'] = array( '#type' => 'fieldset', '#title' => t('Image and font information'), '#collapsible' => TRUE, '#collapsed' => FALSE ); if (isset($fonts_path)) { $imagefontinfo .= t('Number of fonts found: ').count(_textimage_font_list()); } if (isset($images_path)) { $imagefontinfo .= '
'.t('Number of background images found: ').count(_textimage_image_list()); } $gdinfo = gd_info(); $imagefontinfo .= '
'.t('GD Version: ').$gdinfo["GD Version"]; $imagefontinfo .= '
'.t(' FreeType Support: '); $imagefontinfo .= ($gdinfo["FreeType Support"]==true) ? 'True' : 'False'; $imagefontinfo .= '
'; $form['info']['captcha_info'] = array ( '#type' => 'item', '#value' => $imagefontinfo, ); return $form; } function textimage_settings_form_validate ($form_id,$form) { //check for valid font path if ($form['textimage_fonts_path'] !="" && !is_dir($form['textimage_fonts_path'])) form_set_error('textimage_fonts_path', t('The entered font path is invalid')); //check for valid image path if ($form['textimage_images_path'] !="" && !is_dir($form['textimage_images_path'])) form_set_error('textimage_images_path', t('The entered image path is invalid')); } function _textimage_number_validate ($field,$fieldName) { if (!is_numeric($field['#value'])) { form_set_error($fieldName,t("The value for")." ".t($field['#title'])." ".t("must be a number")); } } /** * Prints an image containing a textimage code. */ function _textimage_image() { //if we don't have GD2 functions, we can't generate the image if (!function_exists('imagecreatetruecolor')) return; // Set headers header('Expires: Mon, 01 Jan 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); header('Content-type: image/png'); $string = _textimage_code(); // Get truetype font list $fonts = _textimage_font_list(); // Get the background images list $images = _textimage_image_list(); // Randomization amounts: $charSpacingMax = variable_get('textimage_char_spacing_max',10); // Letter spacing max (pixels) $charSpacingMin = max($charSpacingMax*.5,0); // Letter spacing minimum (pixels) $charJiggleAmount = variable_get('textimage_char_jiggle_amount',5); // Up and down randomization (pixels) $charRotateAmount = variable_get('textimage_char_rotate_amount',5); // Character rotation amount (degrees) $charSizeAmount = variable_get('textimage_char_size_amount',2); // Character size amount (pixels) $imageRotateAmount = variable_get('captcha_image_rotate_amount',12); // Image rotation amount (degrees) // Static amounts: $charInitialSize = variable_get('textimage_font_size',24); // Initial Font $imageNoise = variable_get('textimage_image_noise',4); // Amount of noise added to image $imageLines = variable_get('textimage_image_lines',4); // Amount of noise added to image $imageMargin = variable_get('textimage_image_margin',10); // Margin around image (pixels) // write text using a truetype font if (function_exists(imagettftext) && count($fonts) > 0) { // Initialize variables for the loop $characterDetails = array(); // contains the final info about each character // Build a list of character settings for the captcha string for ($i=0;$i $charSize, "angle" => $charAngle, "x" => $x, "y" => $y, "color" => $foreground, "font" => $font, "char" => $char ); // Increment the image size $imageWidth = $x + $charWidth; $imageHeight = max($imageHeight,$y+$charJiggleAmount); } // Create the image based off the string length and margin if (count($images) > 0) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Specify colors to be used in the image $foreground = imagecolorallocate($im, rand(0, 80), rand(0, 80), rand(0, 80)); foreach($characterDetails as $char) { // draw character imagettftext($im,$char['size'],$char['angle'],$char['x']+$imageMargin,$char['y']+$imageMargin,$foreground,$char['font'],$char['char']); } } else { // write text using a built-in font $x = 0; $y = 0; $imageWidth = 60 + drupal_strlen($string)*$charSpacingMax*.35; $imageHeight = 30 + $charJiggleAmount; // Create the image if (count($images) > 0 && function_exists(imagecolorallocatealpha)) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth, $imageHeight); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth, $imageHeight); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Add the text for ($i=0;$i 0) { // Prepare a larger image with a background image $im2 = _textimage_create_transparent_image($imageWidth, $imageHeight); } else { // Prepare a larger image with a solid color $im2 = imagecreatetruecolor($imageWidth, $imageHeight); imagefill($im2, 0, 0, $background); } $result = imagecopyresampled ($im2, $im, $imageMargin, $imageMargin, 0, 0, $imageWidth, $imageHeight, imagesx($im), imagesy($im)); $im = $im2; } // strikethrough imageline($im, rand(0, 120), rand(0, 120), rand(0, 120), rand(0, 120), $foreground); // Add Noise for ($x=0; $x<$imageWidth; $x++) { for ($row=0; $row<$imageNoise;$row++) { $y = rand(0,$imageHeight); imagesetpixel($im, $x, $y, $noisecolor); } } // Add Lines and Ellipses for ($x=0; $x<$imageLines;$x++) { imageline($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); imageellipse($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); } // Fill image with a random background image if available if (count($images) > 0) { $image = $images[rand(0,count($images)-1)]; _textimage_apply_background_image($im,$image); } //output to browser imagepng($im); imagedestroy($im); } /** * Returns a random string for use in a captcha */ function _textimage_code() { $consts='bcdgjxvmnprst'; $vowels='aeiou'; for ($x=0; $x < 6; $x++) { mt_srand ((double) microtime() * 1000000); $const[$x] = drupal_substr($consts,mt_rand(0,drupal_strlen($consts)-1),1); $vow[$x] = drupal_substr($vowels,mt_rand(0,drupal_strlen($vowels)-1),1); } $string = $const[0] . $vow[0] .$const[2] . $const[1] . $vow[1] . $const[3] . $vow[3] . $const[4]; $string = drupal_substr($string,0,rand(4,6)); //everytime we create a new code, we write it to session $_SESSION['captcha'] = drupal_strtolower($string); if(variable_get('textimage_use_only_upper',0)) $string = drupal_strtoupper($string); return $string; } /** * Returns an array of files with TTF extensions in the specified directory. */ function _textimage_font_list() { $fontdir = variable_get("textimage_fonts_path", ""); $filelist = array(); if (is_dir($fontdir) && $handle = opendir($fontdir)) { while ($file = readdir($handle)) { if (preg_match("/\.ttf$/i",$file) == 1) $filelist[] = $fontdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Returns an array of files with jpg, png, and gif extensions in the specified directory. */ function _textimage_image_list() { $imagesdir = variable_get("textimage_images_path", ""); $filelist = array(); if (is_dir($imagesdir) && $handle = opendir($imagesdir)) { while ($file = readdir($handle)) { if (preg_match("/\.gif|\.png|\.jpg$/i",$file) == 1) $filelist[] = $imagesdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Overlays an image to the supplied image resource */ function _textimage_apply_background_image (&$imageResource,$imageFile) { $backgroundResource = image_gd_open($imageFile,substr($imageFile,-3)); // Copy the text onto the background $backX = imagesx($backgroundResource); $backY = imagesy($backgroundResource); $textX = imagesx($imageResource); $textY = imagesy($imageResource); $randomBackX = rand(0,$backX-$textX); $randomBackY = rand(0,$backY-$textY); // Place the text onto a random location of the background image imagecopyresampled($backgroundResource,$imageResource,$randomBackX,$randomBackY,0,0,$textX,$textY,$textX,$textY); // Crop the background image to the original image size imagecopyresampled($imageResource,$backgroundResource,0,0,$randomBackX,$randomBackY,$textX,$textY,$textX,$textY); } /** * Creates transparent image resources for images with graphic backgrounds */ function _textimage_create_transparent_image($x, $y) { $i = imagecreatetruecolor($x, $y); $b = imagecreatefromstring(base64_decode(_text_image_blankpng())); imagealphablending($i, false); imagesavealpha($i, true); imagecopyresized($i, $b ,0 ,0 ,0 ,0 ,$x, $y, imagesx($b), imagesy($b)); return $i; } function _text_image_blankpng() { $c = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m"; $c .= "dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADqSURBVHjaYvz//z/DYAYAAcTEMMgBQAANegcCBNCg"; $c .= "dyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAAN"; $c .= "egcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQ"; $c .= "oHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAA"; $c .= "DXoHAgTQoHcgQAANegcCBNCgdyBAgAEAMpcDTTQWJVEAAAAASUVORK5CYII="; return $c; } ?> Телятница | Odesskiy Listok


user warning: Table './odessapage/cms_sessions' is marked as crashed and last (automatic?) repair failed query: SELECT COUNT(sid) AS count FROM cms_sessions WHERE timestamp >= 1603136980 AND uid = 0 in /home/hepa/public_html/new/includes/ on line 121.

(Только для друзей. Написано в минуты ностальгии)

Два министерства – Культуры и Здравоохранения – предупреждают: очень интеллигентным и слабонервным читать не рекомендуется.

Случилось так, что мне пришлось лечь в больницу для прохождения курса лечения, который возможен только в стационаре.
Здание больницы на окраине города, двухэтажное, старой постройки, никогда не ремонтировалось. Полы в коридорах прогнившие. Окна не закрывались плотно, просветы затыкали подушками. Высокие потолки недосягаемы для побелки. Стены в палатах выщербленные и грязные.
В мою палату умудрились затолкать восемь железных коек с провисшими до пола сетками. Между ними можно было протиснуться только боком. Тумбочек вообще не было. Продукты женщины хранили на подоконниках и под подушками. О качестве и цвете постельного белья, матрасах и одеялах просто страшно вспоминать. Особое удовольствие больные получали от посещения туалета. Вечно мокрый цементный пол и унитаз, который уже нельзя было отмыть.
Все больные были ходячие. Представьте себе восемь женщин разных возрастов, характеров, воспитания и т. д…
Мне очень повезло. Моя койка находилась у двери, и мне не надо было протискиваться между другими. Я могла выходить в коридор без особого труда.
Три раза в день нас кормили в столовой. Я, у которой дома холодильник ломился от вкуснятины, с большим аппетитом ела все, что давали: гороховый суп, пшенную кашу с кусочком рыбы или мяса и компот. Раздатчица велела мне приходить к концу кормежки, я ей понравилась: никогда не жаловалась, говорила «спасибо» и «очень вкусно». За мою вежливость и добрый нрав она прятала под кашу второй кусочек мяса и давала мне свежий хлеб, а не вчерашний.
Всех больных в моей палате объединяла одна беда – диабет. От тяжелой формы до легкой. Целыми днями все говорили только о болячках. Я обычно участия в разговорах не принимала. Я запаслась журналами, но читать было невозможно – темно. Лампочка под потолком светила тускло, причем, из трех горела только одна. Ночью, в полной темноте из всех углов выползали шустрые тараканы и ползали по стенам и по постели, забираясь в рваные пододеяльники. В сибирском лесу меня поедом ели и кусали комары. Во время войны толстые платяные вши пили мою кровушку. Были у меня встречи с блохами собачьими и кошачьими. Я переболела чесоткой, которая переносится клещами, так что тараканами рыжими с усами меня не запугаешь. Я человек неприхотливый. Могу есть все и спать крепким сном в любых условиях.
Так я провела в этом свинарнике первый день и первую ночь. Утром следующего дня освободилась соседская койка, и медсестра привела в палату новую больную. Была она очень высокого роста и очень худая. Больничный халат не доходил ей до колен, а рукава едва закрывали локти. Руки этой женщины меня поразили. Грубая, почти коричневая кожа, сквозь которую просвечивали вены с узлами, почти не сгибающиеся пальцы с мозолями. Одни эти руки говорили о тяжелой доле этой женщины. Ее корявое, какое-то увечное лицо с глазами без ресниц, жиденькие волосенки и весь ее облик вызвали в моей душе неописуемую жалость.
Сестра указала ей койку и ушла. Естественно, все больные уставились на нее с насмешливым любопытством. Что очень нехорошо. Это больница, а не театр.
Оглядев старух, наша новая соседка произнесла пропитым охрипшим голосом:
- Здорово, б…и.
Она зловеще улыбнулась.
Все онемели. Некоторые старушки перестали вязать варежки.
- Я телятница из совхоза «Передовой». Так что, с…и, будем знакомы. Зовут меня Маруся.
Она сделала паузу и продолжила:
- Чегой-то вы все примолкли? Аль не слыхали про телят?! Небось, мясо жрете!
Говорила она громко. Русский язык с украинским акцентом так приятно звучит! Мы встретились глазами, и я дружески улыбнулась. Мне лично она понравилась, хоть я не относилась к указанным категориям, как, впрочем, и все остальные.
Поднялся невообразимый шум. Одна дура назвала ее скотиной. Я же видела в ней несчастного человека, обиженного жизнью и судьбой. Я примирительно сказала:
- Маруся, голубушка, займи свою койку и успокойся.
Я помогла ей устроиться. С этой минуты мы стали друзьями. Когда я сказала, что я врач, она бросила:
- Не бреши, с…а.
Родилась она от родителей-алкоголиков. Кроме матерщины ничего не слышала с раннего детства. Муж пил по-черному и бил ее. Пока не сдох. Весь ее рассказ перемежался матом, просто так, чередуясь с другими словами.
Потом ее голос неожиданно изменился: она рассказывала о телятах:
- Понимаешь, Лидия, я их люблю, как своих детей, которых бог не дал мне. А они, б…я, любят меня, растуды их…
Говоря о коровах, телятах и свиньях, она преображалась, голос ее становился почти нежным. Я слушала молча, не делая замечаний, но не могла удержаться от улыбки.
В маленькой комнате все были вынуждены слушать ее откровения. Кто-то выскочил, чтобы позвать доктора. Маруся прокомментировала… Комментарий прозвучал виртуозно! Я ничего подобного не слыхивала. Она сумела мастерски закрыть все отверстия человеческого тела, не забыв уши и даже ноздри. Обалдевшие больные закрывали руками уши, пытались выйти в коридор, но в нашей палате это было не просто.
С открытым ртом и круглыми глазами я внимала этому скотскому фольклору.
Когда в палату вошла лечащий врач Инесса Ефимовна, Маруся с двухэтажного мата перешла на семиэтажный. Я умирала со смеху, лицо мое было мокро от слез. С Инессой мы были знакомы давно, как-то даже работали в одной поликлинике. Она корчила из себя профессора, хотя не имела даже степени. Будучи маленького роста, она туго перетягивала пояском место предполагаемой талии, отчего две огромные груди, словно арбузы, были поверх пояса, а ниже – огромный живот.
Став на пороге, она закричала:
- Прекрати безобразие!
Чем только подлила масла в огонь. С лицом цвета свеклы она выскочила из палаты.
Такой спектакль, увы, нельзя передать дословно, но и забыть нельзя. Меня восхищала ловкость, с которой Маруся без запинки материлась, ни разу не повторившись. Многому я научилась у Маруси и помню до сих пор. Другое дело, что я не пускаюсь в подобные перепалки. Но, в случае чрезвычайных обстоятельств, могу ошеломить любого боцмана, который не имел дело с телятами.
Позволю себе маленькое отклонение от главной темы. Желающие могут прерваться и выбросить эти листки в мусорную корзину. Я предупреждала!!!
Я не филолог. Но не могу не восхищаться многообразием слов, имеющих общий корень… В одной из лабораторий Академии Наук в Алма-Ате случилась такая история. Какой-то аспирант, прочитав в журнале статью академика, написал на полях «Х…я!» И началось расследование. Подняли абонентские карточки за последний год‚ проверяя почерки, и таки нашли виновного. Как водилось в наши советские времена, подпевалы настаивали на публичном извинении аспиранта перед академиком. На большом открытом партсобрании было сказано много слов, восторженных отзывов о вкладе в науку академика Кошкенбаева Батыра. 3атем аспиранту Орлову предоставили возможность извиниться.
- Я благодарен всем собравшимся, - сказал он. - Если раньше мое мнение знали лишь немногие, то теперь пусть знают все: все, написанное академиком Кошкенбаевым в этой статье, является х…й чистой воды.
Он покинул зал…
Взять, к примеру, одно короткое слово из трех букв. Оно очень популярно и в различных вариантах появляется не только на заборах, писанное детьми, но и в произведениях великих мастеров. Я расскажу вам достоверный случай, когда это маленькое слово, произнесенное в нужный момент и в нужном месте, помогло советской команде конькобежцев получить золотые медали.
А дело было так. Наша команда с тренером и прихлебателями от спорта прилетела в Токио. И по закону подлости накануне прошел дождь, превратив ледяное поле из зеркального в кашицеобразную поверхность с лужами. Однако билеты задолго до дня соревнования проданы. И, как говорится, «матч состоится при любой погоде». Болельщики волнуются. Комментаторы всех прилетевших команд заняли места в репортерских будках. Тренеры разводят руками, конькобежцы ждут решения.
Тренер шведской команды, претендующей на «золото», подходит к краю поля, большим пальцем тыкает в размякший лед и произносит:
- Шведы бежать не будут!
После него то же проделывают тренеры немецкой, норвежской, английской и других команд, повторяя ту же фразу:
-Та-та-та бежать не будут!
Подходит очередь дать свое заключение русскому тренеру. Он спокойно, без суеты, подходит к полю, тыкает большим пальцем в лед и говорит одно слово:
- Н…я!
Русские конькобежцы увозят золотые олимпийские медали, т. к. не было соперников. Болельщики орут на всех языках, кто их разберет?! Комментаторы разносят весть по всему миру, а тот, кто с русского переводит на японский, вещает, что русский тренер сказал короткое слово, которое он не нашел в словаре и не может передать его точного значения японским зрителям, но он его запомнил и повторял много-много раз, восхищаясь его звучанием…
Как знают многие любители поэзии, наши советские поэты – Рождественский, Евтушенко, Маяковский и др. – пускали по рукам свои поэмы, наполненные матом…
Можно приводить примеры до бесконечности, но в этом коротком отступлении от главной темы о Марусе-телятнице это невозможно.
Вернемся в больничную палату.
Пришло время ложиться спать. Ноги Маруси торчали снаружи кровати. Пройти было невозможно, не задев их. Кто-то сказал:
- Подожми свои копыта.
И получил в ответ руладу, в которой были все известные и неизвестные слова.
Спать я не могла. Маруся достала колоду замусоленных карт, и мы стали играть в «дурака». Я приведу маленький образчик этой незабываемой партии, достойной олимпийской медали. Она дает шестерку. Я бью тузом.
- Н…я себе, - говорит она, - шестерку – тузом? Ты что, о…а?
И в таком жанре на полном серьезе продолжалась игра. В конце концов, решили спать. Я только уснула, как услышала крик Маруси и стон какой-то больной. По диагонали палаты, у окна, старая женщина начала храпеть. Музыкальное ухо Маруси этого не могло перенести. Она подняла свой тяжелый ботинок с пола и мастерским броском через всю палату угодила в голову храпевшей, одновременно высказав ей свое мнение. Все проснулись. Маруся ругалась легко и просто, упоминая всех святых «через семь гробов», быков, коров и прочий скот. Одновременно она предупредила всех, что не потерпят, если кто-нибудь во сне пукнет. Этот запах она не переносит с детства, не так воспитана. Она употребляла разные модификации этого действа, естественно, пересыпая свою речь матом. Вот это да!
Ночь была волшебной. Я дохохоталась до такой степени, что мне сделали какой-то успокоительный укол. Я прониклась к Марусе большой любовью. Вся палата возненавидела Марусю, возненавидела и меня. Ну, плевать. Когда на меня стали давить, чувствуя, что я могу ее образумить, я ответила:
- Против юмора нет лекарств.
Она пригрозила убить любого, кто обидит меня. Взяла с меня слово, что я приеду к ней в деревню, и она покажет мне своих телят, у каждого из которых было свое имя. Я обещала. Увы, я не выполнила своего обещания, не по моей вине.
Также она хотела показать мне соседку Лушку, к которой на ночь заглядывал директор совхоза Гриша. Лушка была молодая и красивая баба. Она доила коров. В деревне встают с рассветом. Жили они через улицу, утром обе выходили на крыльцо, и Лушка причитала:
- Ох, мои рученьки! До чего же болят.
И поглаживала их от пальцев до локтя, как бы делая массаж.
- Уж больно, видать, х…й у Гришки тяжелый, поменьше его дергай, да и руки, мать твою, не будут болеть.
Так, обменявшись любезностями, они уходили на работу…
Диабет у Маруси был тяжелый, никакими лекарствами не удавалось понизить сахар в ее крови. Она этого не понимала и ела все, что запрещено: конфеты, шоколад, торты. Всех врачей считала жуликами.
- Эх, Лида. Была бы ты моей сусидкой, вот бы жили – не тужили. Горилку б пили да в карты играли.
Конечно, очень лестное предложение, и я гордилась, что от ее любви к телятам мне тоже достался кусочек…
Никогда в своей жизни Маруся не видела унитаза. Были в деревне деревянные будки, в полу которых вырезалась дырка. Вот и все. Вся наука. Пошла Маруся в туалет и увидела странное сооружение. Залезла на него ногами и пыталась присесть на корточки. При ее росте она как раз уперлась в стену и опорожнилась.
Через минут десять влетает уборщица и диким голосом кричит:
- Это ты, стерва, усю стенку об…ла?! Мать-перемать, жердь проклятая!
И тут, впервые, Маруся растерялась:
- Да рази ж можна на стули ср…ы? Як?
На этой изящной и очень выразительной фразе я закончу свой рассказ.
Прошу прощения за деревенский фольклор. Но я предупреждала!!!
P.S. Даю уроки. Цена умеренная. Способным – скидка 50%.

Хорошо, только недостаточно

Приведен далеко неполный ассортимент русского народного мата. А было бы интереснее для ознакомления незнакомых с этими шедеврами.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <p> <br> <tr> <td> <table>
  • Lines and paragraphs break automatically.
  • Images can be added to this post.
More information about formatting options