Режим демо в игрушках

Обновлено: 17.05.2024

Сегодняшний текст будет для представителей движения "Эгалитарное Мужское Движение" и других им сочувствующих.

Я стала в пол-глаза поглядывать материалы, которые публикуют мужчины о мужчинах и для мужчин после фем феста, который прошел в городе Сыктывкар 07.12.2019 года.

Я об этом много рассказывала, посмотрите ниже по каналу, ежели не лень.

Я сторонник того, что объять необъятное можно по частям. И противник суженности взглядов. Я частично согласна с феминистками и частично поддерживаю и "камрадов" из ЭМД.

Дорогие ЭМД (REALIST, привет, если вы здесь), вот смотрю я ваши блоги, смотрю. Много полезного выношу из ваших идей. Но одно мне не понятно. Смотрите.

Очень много разговоров о так называемых "РСП" (женщина после развода с ребенком). И как с ними отношения без обязательств строить, и как не потратить ни копейки на наглую "эрэспэху". А то вдруг "прицеп" свой захочет на вас навесить!

Есть такой термин, как "демо режим" . Им пользуются, как мужчины, так и женщины.

Вкратце, чтобы меня поняли те, кто не в теме. Тут один автор хорошо объяснил на примере компьютерных игр.

Демо-версии игр являются бесплатными и выпускают их производители для того, чтобы люди поиграли в них пятнадцать-двадцать минут, а потом их купили.

. игровой демо режим это игровой отрезок игры, который начинается не с самого начала игры. Демо-версия начинается с какой-то кульминации, то есть с точки высшего напряжения, развития и экшена. Источник: канал Факты обо всем .

То есть наша "РПС", которая хочет с вами в отношения, запускает "демо режим" и начинает вас всячески ублажать, удовлетворять, вкусно кормить, за ушком чесать и так далее.

Так вот, подхожу по-тихоньку к сути вопроса. Сколько может тянуться по-вашему женский "демо режим"? Я на одном из ваших стримов слышала версию, что от 3-х месяцев до 1 года. А то и больше. Вы говорите и пишете о борщах, о домашнем уюте, о космическом "кексе".

У меня только один вопрос - где при этом вы? Вы сами и ваша женщина-"РСП". Вы описываете функции, но полностью обезличиваете человека. То есть она делает для вас какие-то приятные функции, а ее самой (да и вас тоже) как бы и нет.

Мне просто с трудом представляется. Вот два человека, которые нравятся друг другу, в отношениях. Ладно - первый месяц. Ну - второй. Все нормально, "демо режим" крутится, всем хорошо. Но за 6 МЕСЯЦЕВ - 1 ГОД взаимодействия с человеком вы не допускаете мысли о том, что вы можете уже привыкнуть, привязаться, влюбиться, в конце концов?

У вас получаются ОТНОШЕНИЯ. БЕЗ ОТНОШЕНИЙ.

Вот, представьте. Вы общаетесь. Вы ходите гулять. Никто к вам в кошелек с головой не ныряет. Ребенок у вашей "разведенки" нормальный-адекватный. Вас все устраивает. Проходит время (длительное) - полет нормальный. Ну, давайте согласимся с тем, что целый год притворяться не возможно . "Самолетик" обязательно отбомбится.

И неужели возьмете и бросите человека, который, возможно искренне полюбит вас? Вот и мне интересно.

Мальчики, парни, мужчины (я знаю, что возрастных категорий в ЭМД много), поймите меня правильно. И если не сложно, объясните мне в комментариях, как это все должно по-вашему работать?

8 апреля в облачный игровой сервис GFN.RU был добавлен режим "Demo", позволяющий запускать демоверсии игр из Steam, Epic Games или других магазинов при наличии одного только внутреннего аккаунта GFN.

Прежде для успешной игры нужно было иметь активный аккаунт цифрового магазина (Steam, Epic Games и др.) с купленной копией интересующей игры - и аккаунт самого облачного сервиса.

На данный момент ассортимент предоставленных продуктов ограничивается такими играми, как: Chorus, Seeker, BotiBoi, Ghostrunner, Diplomacy is Not an Option, Inscryption и Apollo 11 Lunar Landing.

Также в скором времени список будет пополнен следующими играми: Northgard, Spirit Of The Island, Offworld Trading Company, Tunic, Die After Sunset и ELDERBORN.

На данный момент раздел можно увидеть только при введении фильтра поиска "Demo".

Че за бред ты понаписал? Какие игры они позволяют запускать? Это бесплатные ДЕМО игр, а не сами игры. Эти демо давно доступны в самом стиме. GFN просто добавили их в сервис.

часть демок там давно уже, если добавляли доступ к игре - подтягивалась и демка

Сам режим "демо" подразумевает некую ограниченность, но на всякий случай вписал поправку, спасибо.

Так демо в гфн были доступны давно, они обычно их вместе и игрой добавляли, если для игры было доступно демо. В чем новость то?

И ты похоже вообще не понимаешь как это работает. Пример из недавнего: Разработчики выпускают Ghostrunner в стим, и добавляют Demo версию своей игры, чтобы покупатели могли ее попробовать перед покупкой. После договариваются с GFN о выпуске своей игры в сервисе, Nvidia добавляют игру и demo в своей сервис. Все.

Демо теперь доступны без базовой игры, без авторизации в стимаке.

Ты понимаешь что в этом и есть смысл демо?)

Понимаю и рад, что в GFN это поняли)

Я к тому, что демо ВСЕГДА были доступны без базовой игры. В это и смысл демо, чтобы ты попробовал игру до ее покупки. И GFN тут ни при чем, демо предоставляют разработчики игры.

Я брокколя, фсо. Сливай меня.

Так он имеет ввиду что в gfn добавили возможность запускать сразу демо версии без захода в Стим и егс

Телевизор с технологией Smart TV становится чем-то большим, чем просто аппарат для просмотра телеканалов.

“Умные” ТВ могут подключаться к интернету, показывать погоду, предоставлять доступ к десяткам стриминговых сервисов, запускать некоторые игры, поддерживать голосовое управление и многое другое. Более половины телевизоров, которые были проданы в 2020 году, были со Smart TV.

Так как данная технология добавляет множество возможностей и существенно расширяет функционал устройства, появляются различные функции, которые не очевидны на первый взгляд и могут быть попросту не замечены.

Работа в демо режиме

На новых телевизорах, — особенно на Самсунгах — по умолчанию бывает активирован режим демо-образца.

Он предназначен для магазинов электротехники, чтобы можно было выставлять аппараты на витрину. Демо-режим работает так, что каждые несколько часов удаляет все пользовательские данные, в том числе и выходит из аккаунта, а затем включается показ нескольких демонстрационных видео.

Это крайне неудобно при домашнем использовании, так как приходится каждый раз авторизовываться в своей учетной записи и заново выставлять предпочитаемые параметры.

Инструкция для выключения режима демо-образца:

  1. Открыть Настройки.
  2. Перейти в раздел “Общие”.
  3. Открыть вкладку “Диспетчер системы”.
  4. В пункте “Режим использования” переключиться на “Домашний”.

Названия пунктов может отличаться на разных ТВ, но расположение функции везде примерно одинаковое.

Автоматическая настройка яркости

Большинство телевизоров со Smart TV имеют функцию автоматической адаптации яркости. В зависимости от освещения в помещении, яркость меняется.

Если в комнате темно, то и яркость будет меньше, а если светло, то наоборот. Некоторым не нравится данная возможность. Чтобы ее отключить, нужно перейти в Настройки, открыть раздел “Общие” и убрать галочку напротив надписи “Экономный режим”.


Демо-версия – это возможность заранее оценить готовый продукт, чтобы в дальнейшем принять решение о его покупке или пользовании. Подобная схема распространения электронной продукции приобрела большую популярность и продолжает развиваться, что не может не радовать. Благодаря подобной возможности пользователи получили шанс заранее оценивать все преимущества продукта и затем принимать верные решения. Осталось только подробнее разобраться в этой теме, чтобы обладать всей необходимой информацией.

Что такое демо-версия?

Поначалу следует разобраться в расшифровке понятия «демо-версия». Это, оказывается, совсем несложно. Так как основным определением в данном случае выступает слово «демонстрационная». А первоначальное наименование служит лишь сокращенным названием, чтобы не проговаривать лишних букв. Достаточно запомнить это - и в дальнейшем вы будете сразу понимать всю суть предоставляемой информации. А далее мы рассмотрим вопрос о том, зачем разработчики вообще начали пользоваться подобной схемой.

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

Зачем предоставляется демо-версия?

Демо-версия – это специальное издание интерактивного продукта, которое позволяет пользователям получить первоначальные впечатления и принять решение о дальнейшей покупке. Многие крупные компании начали пользоваться такой схемой из-за ее эффективности. Ведь возможность заранее ознакомиться со всеми преимуществами – это отличный шанс дать оценку и проверить, оправдал ли продукт все ожидания. Обычно демонстрационная версия имеет определенные ограничения в функционале, но в последнее время все чаще появляются варианты с временными рамками. Пользователям предоставляется несколько часов или дней, в период которых можно пользоваться продуктом бесплатно. И что самое интересное, подобное положение дел полностью оправдывает себя и имеет успех. Поэтому не будем терять времени и начнем рассматривать примеры.

встречается в сфере электронных продуктов

Сфера азартных игр

Демо-версия игровых автоматов является довольно специфической, но при этом благоразумной. Азартные игры всегда вызывали массу сомнений, и теперь разработчики активно делятся возможностью поиграть в свое удовольствие и при этом не вкладывать реальные деньги. Вам просто будет предоставляться счет на 10 000 очков, которым вы вольны распоряжаться. Этого вполне достаточно, чтобы внимательно изучить функционал демо-версии игрового автомата, проверить доступность ставок, изучить бонусы и многое другое. И теперь подобная схема используется практически всеми доступными азартными площадками с игровыми слотами. В последнее время разработчики начали также предоставлять демонстрационную версию на настольные и карточные игры.

Особая востребованность демо

Игровые проекты

Наиболее крупной сферой в данном сегменте являются игры. Разработчики поначалу неохотно делились демонстрационными версиями, но потом все же начали это делать, когда узнали о высоком спросе. Наиболее ярким примером в данном случае является игра Resident Evil 2, которая предоставила идеальные условия для первоначального ознакомления.

Основными условиями этой демонстрационной версии являются следующие пункты:

  • большой эпизод игрового приключения доступен в полном объеме;
  • на его изучение выделяется 30 минут;
  • нет сохранений, и у игрока есть одна жизнь, если он ее потеряет, то придется начинать все с самого начала.

Как видите, в этой игре идеально сочетается возможность изучить проект с сохранением высокой доли интереса к нему. А если взглянуть на отчет проведенной демонстрации, то наблюдается большой всплеск заинтересованности и предрелизных продаж. Поэтому можно смело сказать о том, что в дальнейшем разработчики будут активно пользоваться такой моделью распространения.

игра Resident evil 2

Программные разработки

Теперь следует обратить внимание на демо-версии программ, которые аналогично обладают высоким спросом. Особенностями этой модели выступают следующие пункты:

  • предоставление полной версии программы (обычно разработчики стараются не ограничивать пользователей, чтобы те могли полностью все опробовать);
  • главным регулятором выступает пробный период, который обычно составляет 7 или 30 дней;
  • при этом сам продукт не получает обновлений, доступна лишь техническая составляющая.

Данная модель распространения аналогично получила широкий спрос среди пользователей, которые активно пользуются данной возможностью. В этом случае демонстрационная версия навряд ли поменяется. Так как уже является идеальной для разработчиков.

Демо-версия – это отличный повод внимательно изучить продукт. Теперь вы с легкостью сможете манипулировать всей полученной информацией и пользоваться новыми знаниями. Будем надеяться, что в дальнейшем разработчики не изменят своего решения и будут продолжать предоставлять предрелизный доступ, так как подобная модель распространения является наиболее оправданной и честной по отношению к пользователям.


23 июля 2013 года был опубликован исходный код демо Second Reality (1993 год). Как и многим, мне не терпелось взглянуть на внутренности демо, которое так вдохновляло нас на протяжении всех этих лет.

Я ожидал увидеть монолитный хаос из ассемблера, но вместо него я, к удивлению своему, обнаружил сложную архитектуру, изящным образом объединяющую несколько языков. Никогда раньше не видел я подобного кода, идеально представляющего два неотъемлемых аспекта разработки демо:

Часть 1: введение

Прежде чем приступать к коду, дам ссылку на захват легендарного демо в HD-видео (Майкла Хата). Сегодня это единственный способ полноценно оценить демо без графических глитчей (даже DOSBox не может правильно его запускать).

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

Исходный код выложен на GitHub. Достаточно ввести одну команду git :

Поначалу содержимое сбивает с толку: 32 папки и загадочный U2.EXE , который не запускается в DosBox.


Демо имело рабочее название «Unreal 2» (первым «Unreal» стало предыдущее демо Future Crew, выпущенное для первой Assembly в 1992 году). И только в процессе разработки название сменили на «Second Reality». Это объясняет имя файла «U2.EXE», но не почему файл не работает…

Если запустить CLOC, то мы получим интересные метрики:

  • Кодовая база состоит «всего» из 50% ассемблера.
  • Кодовая база почти вдвое больше движка Doom.
  • В ней есть семнадцать makefile. Почему не всего один?

Запуск демо

В этом сложно разобраться, но выпущенное демо можно запустить в DosBox: надо переименовать U2.EXE и запустить его из нужного места.

Когда я узнал о внутренней работе кода, это стало выглядеть очень логично:


Архитектура

В 90-х демо в основном распространялись да гибких дисках. После распаковки нужно было установить два больших файла: SECOND.EXE и REALITY.FC :


Исходя из своего опыта разработки игр, я всегда ожидаю, что картина в целом должна выглядеть так:

  • SECOND.EXE : движок со всеми эффектами в исполняемом файле.
  • REALITY.FC : ассеты (музыка, звуковые эффекты, изображения) в проприетарном/зашифрованном формате а-ля WAD игры Doom.


  • REALITY.FC содержит две музыкальные композиции, воспроизводимые во время демо (для обфускации добавлены заполнение и маркер в начале).
  • SECOND.EXE содержит загрузчик и Demo Interrupt Server (DIS).
  • После конца SECOND.EXE добавлены 32 частей (PART) демо в виде исполняемых файлов DOS (зашифрованных).
  • Более удобная совместная работа в команде: каждый участник команды может отдельно работать над своей PART при условии, что создаст исполняемый файл с символом _start и останется в пределах ограничений памяти (450 КБ).
  • Зашифровка файлов EXE в конец SECOND.EXE и их загрузка во время выполнения усложняют реверс-инжиниринг.
  • Быстрый запуск: Loader и DIS имеют размер всего 20 КБ. DOS загружает их очень быстро.
  • Простое управление памятью: после завершения PART загрузчик заменяет её следующей PART и освобождает ВСЮ выделенную память.
  • Нет необходимости в менеджере/загрузчике ассетов: как мы увидим позже, каждая PART содержит в себе свои ассеты (в основном изображения), скомпилированные в коде: при загрузке EXE также загружаются все необходимые изображения, как в удобном пакете.
  • Для программирования PART можно использовать любой язык: в коде мы находим C, Assembly… и Pascal.

Рекомендуемое чтение

Три столпа для понимания исходного кода Second Reality — это VGA, ассемблер и архитектура PC (программирование PIC и PIT). Вот невероятно полезные ссылки:

  • Архитектура VGA: FreeVGA Project (особенно глава 17 о прерываниях и ISR).
  • Так как в исходном коде полно указателей «FAR» и «NEAR», будет полезно прочитать Basic Architecture Documentation компании Intel, и в особенности главу 4.3 о типах данных указателей.
  • Всеобъемлющие статьи Майкла Абраша из Graphic Programming Black Book: глава 3: (Zen Timer and PIT), глава 24: VGA tour, главы 47,48 и 49: (Mode X).

Часть 2: движок Second Reality

Как говорилось в части 1, основа Second Reality состоит из:

  • Загрузчика в виде исполняемого файла DOS.
  • Диспетчера памяти (простого пула стеков)
  • Сервера прерываний демо (Demo Interrupt Server, DIS).

Код движка

Код движка на 100% состоит из ASM, но он очень хорошо написан и довольно неплохо задокументирован:


Все этапы прочитать довольно просто:

  1. Установка сервера прерываний DIS как прерывания 0fch .
  2. Замена системных вызовов DOS по прерыванию 021h (подробнее об этом можно прочитать в части «Режимы Dev и Prod»).
  3. Загрузка музыки в звуковую карту через память EMS.
  4. Запуск музыки.
  5. Выполнение каждой части демо.
  6. Готово!

Диспетчер памяти

Было много легенд о том, что Second Reality использует сложный диспетчер памяти через MMU, в движке его следов не нашлось. Управление памятью на самом деле передано DOS: движок начинает работу с освобождения всей ОЗУ с последующим распределением её по запросу. Единственный хитрый трюк заключается в возможности выделения ОЗУ из конца кучи: оно выполняется при помощи возвращаемого значения malloc DOS, когда запрашивается слишком много ОЗУ.

Часть 3: DIS

Demo Interrupt Server (DIS) предоставляет широкий набор услуг каждой из PART: от обмена данными между разными PART до синхронизации с VGA.

Услуги DIS

Во время выполнения PART сервер DIS предоставляет ей услуги. Список функций можно найти в DIS/DIS.H .

Наиболее важные услуги:

  • Обмен данными между разными PART ( dis_msgarea ): DIS предоставляет три буфера по 64 байт, чтобы PART могла получать параметры из загрузчика предыдущей PART.
  • Эмуляция Copper ( dis_setcopper ): симулятор Amiga Copper, позволяющий выполнять операции, переключаемые состоянием VGA.
  • Режим Dev/Prod ( dis_indemo ): позволяет PART узнать, что она запущена в режиме DEV (а значит, должна выполнять инициализацию видео) или запущена из загрузчика в режиме PROD.
  • Подсчёт кадров VGA ( _dis_getmframe )
  • Ожидание обратного хода луча VGA ( dis_waitb ).

Код Demo Interrupt Server

Исходный код DIS тоже на 100% состоит из ASM… и довольно неплохо прокомментирован:

    (обработчик прерываний, установленный на int 0fch ). (сами процедуры DIS).
  • Так как Second Reality частично написана и на C, в коде есть интерфейс для C: DIS/DIS.H и DIS/DISC.ASM .

Как это работает

DIS устанавливается как обработчик прерываний для программного int 0fch . Здорово здесь то, что он может запускаться внутри SECOND.EXE , когда работает демо, или как резидентная программа (TSR) в режиме Dev. Такая гибкость позволяет по отдельности тестировать различные PART демо во время разработки:


Copper


«Copper» — это сопроцессор, который любили разработчики демо для Amiga. Он являлся частью Original Chip Set и позволял выполнять программируемый поток команд, синхронизированный с видеооборудованием. На PC не было такого сопроцессора, и Future Crew пришлось написать симулятор Copper, работающий внутри DIS.

Для симуляции Copper команда FC использовала чипсет 8254-PIT и 8259-PIC оборудования PC. Она создала систему, синхронизированную с частотой VGA, способную запускать процедуры в трёх местах вертикального обратного хода луча:

  • Место 0: после включения дисплея (примерно на строке развёртки 25)
  • Место 1: сразу после обратного хода луча развёртки (ПО ВОЗМОЖНОСТИ СТОИТ ЭТОГО ИЗБЕГАТЬ)
  • Место 2: в обратном ходе луча развёртки
  1. Таймер чипа 8254 настраивается на срабатывание IRQ0 с нужной частотой.
  2. Обработчик прерывания 8h (который вызывается 8259 PIC после получения IRQ0) здесь заменяется на процедуру intti8 .

Часть 4: режимы Dev и Prod

Читая исходный код Second Reality, больше всего поражаешься тому, сколько внимания команда уделила беспроблемному переключению из DEV в PROD.

Режим Development


В режиме Development каждый компонент демо являлся отдельным исполняемым файлом.

  • DIS загружался в резидентную TSR и доступ к нему осуществлялся через прерывание 0cfh .
  • Загрузчик вызывал прерывание DOS 21h для открытия, чтения, поиска и закрытия файлов.
  • Каждый кодер и художник мог работать над исполняемым файлом и тестировать его отдельно, не влияя на остальную часть команды.
  • Полное демо в любой момент можно было протестировать при помощи небольшого SECOND.EXE (без добавления всех EXE в конец). Исполняемый файл каждой PART загружался с помощью прерывания DOS 021h из отдельного файла.

Production (режим демо)


В режиме Production небольшой SECOND.EXE (содержащий загрузчик), DIS и части демо в виде отдельных EXE объединялись в один толстый SECOND.EXE .

  • Доступ к DIS по-прежнему выполнялся через прерывание 0fch .
  • API прерывания DOS 21h был пропатчен собственными процедурами Future Crew, которые открывают файлы из конца большого файла SECOND.EXE .

Часть 5: отдельные PART

Каждый из визуальных эффектов Second Reality является полнофункциональным исполняемым файлом DOS. Они называются PART и всего их 23. Такое архитектурное решение позволило обеспечить быстрое прототипирование, параллельную разработку (поскольку у FC, скорее всего, не было инструментов контроля версий) и свободный выбор языков (в исходниках встречаются ASM, C и даже Pascal).

Отдельные PART

Список всех PART/EXE можно найти в исходном коде движка: U2.ASM. Вот более удобное краткое описание всех 23 частей (с расположением исходного кода, хотя названия могут сильно сбивать с толку):

Похоже, у каждого разработчика была своя специализация, которые могли совместно использоваться в одной части. Особенно это заметно в первой сцене со скроллингом, кораблями и взрывами (Alkutekstit). Хотя это выглядит как один непрерывный эффект, на самом деле это три исполняемых файла, написанных тремя разными людьми:

Alkutekstit (Credits) sequence



ALKU by WILDFIRE U2A by PSI PAM by TRUG/WILDFIRE

Ассеты

Ассеты изображений ( .LBM ) сгенерированы с помощью Deluxe Paint — чрезвычайно популярного в 90-х редактора битовых карт. Интересно, что они преобразованы в массив байтов и скомпилированы внутри PART. В результате этого файл exe также загружает все ассеты. Кроме того, это усложняет реверс-инжиниринг.

Среди крутых наборов ассетов можно назвать знаменитый CITY и SHIP из последней 3D-сцены:



Внутреннее устройство PART

Так как все они скомпилированы в исполняемые файлы DOS, в PART можно было использовать любой язык:

  • ASM.
  • C.
  • PASCAL: Brass knuckles monster (MNTSCRL.EXE), Dotted Tunnel (TUNNELI.EXE) и Raytracing sword (RAYSCRL.EXE).
  • Некоторые PART зашли ещё дальше и используют C для генерации кода на ASM: GLENZ/DOLOOP.C (скачущий многогранник) и Water effect (3DSINFLD.EXE).

При работе с VGA каждая часть использовала собственный набор трюков и работала в своём разрешении. Во всех них использовались не Mode 13h и не ModeX, а скорее изменённый режим mode 13h с собственным разрешением. В файле SCRIPT часто упоминаются 320x200 и 320x400.

К сожалению, при анализе PART чтение исходного кода становится сложной задачей: качество кода и комментариев сильно падает. Возможно, так произошло из-за спешки или из-за того, что над каждой PART работал свой разработчик (то есть «реальной» необходимости в комментариях или понятности кода не было), но в результате получилось нечто совершенно запутанное:

3D-движок Second Reality



Я всё равно решил подробно изучить 3D-движок, который использовался в двух частях: U2A.EXE и U2E.EXE .

Исходный код представляет собой C с оптимизированными ассемблером процедурами (особенно заливка и затенение по Гуро):

    (основной код). (библиотека visu.lib ). (оптимизированный ассемблер видео (очистка, копирование экрана и т.п.)). (отрисовка объектов и усечение). (матрицы и быстрые вычисления sin/cos).


Архитектура этих компонентов довольно примечательна: библиотека VISU выполняет все сложные задачи, например, загрузку ассетов: 3DS-объектов, материалов и потоков (движений камеры и кораблей).

Движок сортирует объекты, которые нужно отрисовывать, и рендерит их при помощи алгоритма художника. Это приводит к большому объёму перерисовки, но поскольку защёлки VGA позволяют одновременно записывать 4 пикселя, всё не так уж плохо.

Интересный факт: движок выполняет преобразования «олдскульным» способом: вместо использования общих однородных матриц 4x4 он использует матрицы поворота 3*3 и вектор перемещения.

Вот краткое изложение в псевдокоде:

Порты на современные системы

После выхода этой статьи многие разработчики начали портировать Second Reality на современные системы. Клаудио Мацуока приступил к созданию sr-port — порта на C для Linux и OpenGL ES 2.0, который пока выглядит довольно впечатляюще. Ник Ковач проделал большую работу над PART PLZ, портировав её на C (теперь она является частью исходного кода sr-port), а также на javascript:

Читайте также: