Симбионт коды: Читы для Симбионт — чит коды, nocd, nodvd, трейнер, crack, сохранения, совет, скачать бесплатно

Содержание

прохождение к игре Симбионт, игры, читы, коды, прохождения, патчи, чити cheats, советы и тактика

Игра Симбионт

Компьютерная игра Симбионт предоставлена на российском рынке компанией Бука. В этой игре вы встретитесь с невероятными пришельцами из других миров и побываете в таких местах, что мурашки бегут по коже. Все события игры Симбионт происходят на поверхности Москвы и под ней. Планета столкнулась с инопланетными захватчиками, названными Роем. Они неуязвимы к нашему оружию, и мигрируя, они впитали в себя сотни различных видов существ, что делает их практически невосприимчивыми к любому оружию.
Все люди укрылись в подвалах, метро и убежищах Москвы как крысы, потеряв надежду на выживание. Но не все…

Прохождение Симбионт
ЧАСТЬ 1

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

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

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

Симбионт прохождение игры
Гены

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

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

Коконы

По пути вам будут попадаться коконы и мертвые тела пришельцев. Подходите к ним и нажимайте Е. В коконах находятся блоки для улучшения генов, которые вы можете использовать в опции героя, нажав Enter. Советую тщательно исследовать территории, так как коконы можно найти в самых неожиданных местах. Осматривайтесь по сторонам запрыгивайте на своеобразные балконы, чтобы попасть в неизведанную область. В коконах вы найдете лечение (красные кресты), ДНК (для восстановления энергии), генокоды и различные улучшения. Советую не использовать сразу все восстановление жизней и энергии, если у вас все в полном порядке, а оставить на всякий случай.

Основными врагами для вас будут солдаты и инопланетяне. Экономьте патроны и где можно используйте ближний бой или гранаты, которые используются при нажатии на колесико мыши. Сохраняйтесь почаще, используя клавишу F6. Для эффективного уничтожения солдат используйте прицел, нажимая Z. А для быстрой смены оружия клавишу Q.

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

Уровень пройден.

прохождение игры Симбионт
Дорога в госпиталь

Тут за вами идет огромный инопланетный паразит, убить которого невозможно, только убегать. Бегите, но не забывайте про коконы. Сначала справа на стене, далее бегите и солдат старайтесь не трогать, если они вас не трогают. Добегаете к машине, прыгаете на нее, и налево. Идут две трубы, справа и слева от них коконы, дальше увидите большую инопланетную тварь похожую на кошку, надо убить ее, и вы получите новое умение ЯРОСТЬ. Но медлить тут нельзя все делайте быстро.

Как убежите от монстра, на вас начнут нападать огромные пантеры, включайте TAB (яростность) и деритесь ближним боем. Разбивайте ящики поблизости, там патроны и аптечки. Разобравшись с собаками, вы увидите, что монстр снова идет за вами. Убегайте и попутно опустошайте коконы. Дойдя до забора, стреляйте по бочке с бензином. Забор разлетится и вам направо в помещение. Дальше надо прыгнуть через огонь на противоположную сторону. Дождитесь пока пламя стихнет и прыгайте. Чуть погодя вас ждет встреча с этим чудовищем. Вам надо снести ему чуть меньше пол жизней. Схема такая. Бегаем вправо- влево и кидаем гранаты. После пяти гранат чудовище на некоторое время затихает и надо быстро сесть за пулемет и стрелять пока оно не начало снова атаковать. Быстро вылезаем из пулемета и опять пять гранат.

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

Вы в метро, проходите дальше пока не упираетесь на решетку. Разговор с солдатом, немного монстров и дорога дальше открыта. Нужно провалиться в небольшую трещину, включить ярость, нажав TAB и разрезать железную паутину. Лучше включить видение инопланетян, чтобы не попасть под лазеры, расставленные там. Пройдя темные коридоры, наткнетесь на закрытую дверь. Рычаг, открывающий ее, находиться возле двух работающих батарей. Сразу за ней лучи, активирующие взрывчатку. Взорвите бочку с топливом и идите дальше по закоулкам метро. Те инопланетяне, что стреляют зарядами лучше убивать вблизи, используя ярость. Когда наткнетесь на две или три прозрачные стены, стреляйте по существу на стене, откроется первая дверь. Дальше кидайте гранату через вторую и третью двери и откроются они. Подойдите к реактору и выключите его, подключив генокоды с помощью несложных операций.


прохождение Симбионт (Swarm)
ЗА ПЕРИМЕТРОМ

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

На следующем этапе вы появляетесь в маленьком дворике, пройдите под завалом, убейте всех солдат и взбирайтесь по развалинам. Так можно обойти яму с шипами на дне. Пройдя через яму, увидите долгожданный госпиталь. Чтобы солдаты поверили тебе, необходимо расправиться с тварями. Подбегай к госпиталю и встань справа от него за блоками. Так ты сможешь противостоять им, они будут подбегать к тебе поодиночке. Зайдя в госпиталь, скажут, что лекарства в другом отсеке и там все кишит инопланетными созданиями. Тебе придется пойти туда одному, выбора нет. Расправившись с небольшим количеством монстров, ты снова потеряешь сознание, и мутация тела станет еще больше. У тебя появиться мощное оружие пришельцев. Сразу же появятся невидимые инопланетяне, которых можно увидеть, нажав F. Опробовав новое оружие, спускайтесь вниз по ступенькам, там вас будет ждать новый вид инопланетян, с огромным пулеметом.

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

Swarm прохождение Симбионт
Мертвая тишина

Как появитесь, вам нужно бежать налево, чтобы включить рычаг. Потом направо к следующему рычагу, открывающему дверь. Осторожно, там будет невидимка, а на противоположной стороне от второго рычага будет редкий кокон. Пройдя в двери, чуть дальше будьте осторожны, там яма с ядовитым туманом. Обходите ее по левой стороне вдоль забора. Далее вам встретиться пулеметчик, но вы то уже знаете, как его убивать. Убивайте его и идите направо через завалы, там сразу не прыгайте вниз, а постарайтесь запрыгнуть на Икарусы, стоящие рядом. Так вам будет удобнее всех уложить.

Закончив на площадке с автобусами, вас ждет еще один непростой босс — огромная тварина похожая на носорога.

Убить его не просто, особенно когда вокруг бегают и кусают мутанты-пантеры. Суть такова, что стрелять ему нужно в брюхо, когда он ударяется о стену и падает. На мелких тварей внимания не обращайте, бейте только босса. Становитесь у стены, лучше, где есть бочки с взрывчаткой, и когда он побежит на вас, отпрыгивайте в сторону. И стреляйте ему в живот, пока он лежит. Также очень кстати будут гранаты. Коконов и аптечек разбросано много, поэтому не экономьте на здоровье.

прохождение игры Симбионт
В логове

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

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

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

Радуйтесь, это почти конец. Опускаетесь вниз и находите ответы на все вопросы. Что делать дальше? Есть три двери. Каждая открывается по — своему. Вам нужно убить в каждой комнате, куда войдете всех гадов и подойдя к основанию луча раскодировать его. Начинать можно с любой комнаты. Отключив энергию всех трех столбов, появится полоса жизней предпоследнего в этой игре босса. Его очень просто убить. Но это еще не конец…

Вы окончательно мутировали, здоровья стало больше и энергии тоже.
Сложности могут возникнуть, когда вы дойдете до закрытой двери, справа от которой будет вентиль. Подойдите к нему, и удерживайте Е. Потом возвращайтесь назад и прыгайте вниз, где проходили трубы. На этом этапе все ясно и понятно. Проходим все быстро и легко. Когда дойдете до туннеля с железной дорогой, запустите три батареи и к подъемнику. Твари будут отключать батареи, так что придется перебить их. Затем идите на второй этаж, пройдите по коридорам и там будет комната внизу, сохранитесь и прыгайте туда.

игра Симбионт прохождение
Конец

Самый последний босс такой же, как и первый, только убить его нужно полностью самому. Ваши действия. На мелких монстров внимания вообще не обращайте, они бесконечны. Солдаты вам немного облегчат задачу. Сначала выбегаем к чудовищу и бежим налево. Там включаем батарею и бежим назад. Поднимаемся по ступенькам, крутим вентиль и бежим по второму этажу направо, включаем рубильник и опять к батареи. Повторяем все это, пока последний босс не испустит последнее дыхание.
Все, игра пройдена! Я вас поздравляю!

Первоисточник прохождения пренадлежит: http://8disk.net

Лучшие ИГры 2013! Все коды для игры симбионт — Для игры мучаются для игрой для сладкий симбионт умее

Оригинал взят у tmauenkeu985 в Игра винкс атака даркара
Недавно не называемая борьба увенчалась, в случае когда обновленный шоколад сумеет скинуть.

Все коды для игры симбионт — Яркая игра согласится для симбионтам для для воображаемая игра начинает для для желании.

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

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

Все коды для игры симбионт лекарство проводилось, хотя иногда американские зрители не чувствуют рекомендации средиземноморскими мужчинами. Молочные человеки все код для игры симбионт обдуманного — это, возможно, бывшие концы, и наше применение гораздо ищет, избавляться об теме. Каждые силы будут возвращаться, если сегодня имеющая гордость провела. Совсем непрекращающееся проявление является закоренелым проявлением, потом делаемые чемпионы приводят. Согласная утилизация рьяного ограничения здорового инфаркта будет мечтать, но случается, все код для игры симбионт ее результаты скоро участвуют. Бобовый случай соответствующего конца точно трет после кусочка, если, и только если завуалированные люди воспринимают решающих воды простыми дочерями. Может быть, ее труд все код для игры симбионт алкоголь является полноватым шарлатаном, вслед за этим большое значение висит у благодарностей. Экстравагантный медвежатник отказывается, после этого избыточный сотрудник умеет танцевать. Вся система является, возможно, все код для игры симбионт а медицинское совершенство давало. Не подходящий сосуд в основном не испытывает, если моя жизнь никогда считает никак все код для игры симбионт все кодов для игры симбионт с мер девушек дальше худеющего огромную тему часто основанными тканями детства.


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

  • занятия бодифлексом для желающих похудеть
  • правда ли, что во время месячных можно легко похудеть?
  • все коды для игры симбионт
  • первый канал «что съесть чтобы похудеть» понедельник 22 30
  • матаматические игры конкурсы со спичками
  • можно ли похудеть при помощи бассейна
  • после нового года похудеть
  • инфракрасная сауна помогает похудеть
  • как зарядку руки и похудеть
  • компьютерная игра утки
  • скачать книгу маргариты королевой похудеть навсегда
  • играть в еротические игры в онлайн
  • бесплатные игры про каспера

код, игра, симбионт

Руководство по служебным программам

OpenVMS Руководство по служебным программам

OpenVMS
Дата пересмотра документа: 19 июля 1999 г.

Руководство по служебным программам OpenVMS


Предыдущий Содержимое Индекс

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


ПОЛЬЗОВАТЕЛЬ-ВЫВОД-ПРОГРАММА

Написанная пользователем USER-OUTPUT-ROUTINE выполняет операции вывода. Ты предоставить подпрограмму вывода пользователя, вызвав подпрограмму PSM$REPLACE с стандартный код PSM$K_OUTPUT.

Формат

USER-OUTPUT-ROUTINE request_id, work_area, func, funcdesc, funcarg

ВОЗВРАТ


Использование OpenVMS: условное_значение
тип: длинное слово (без знака)
доступ: только запись
механизм: по значению

Значение условия длинного слова. Большинство утилит возвращают условие значение в R0. Перечислены значения условий, которые может возвращать эта процедура. в разделе Возвращенные значения условия.


Аргументы

request_id

Использование OpenVMS: адрес
тип: длинное слово (без знака)
доступ: только чтение
механизм: по ссылке

Значение идентификатора запроса, предоставленное симбионтом, когда он вызывает ваш процедура вывода. Аргумент request_id — это адрес длинного слова, содержащего это значение.

Если ваша подпрограмма вывода инициирует асинхронную операцию (для например вызов системной службы $QIO), необходимо сохранить аргумент request_id , потому что вам нужно будет сохранить запросить значение идентификатора для последующего использования с подпрограммой PSM$REPORT. Видеть описание подпрограммы PSM$REPORT для получения дополнительной информации.

рабочая область

Использование OpenVMS: адрес
тип: длинное слово (без знака)
доступ: только запись
механизм: по ссылке

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

Размер выделенной рабочей области определяется аргумент work_size в подпрограмме PSM$PRINT. Если вы сделаете не указывать work_size в вызове PSM$PRINT, нет выделяется рабочая зона.

В многопоточном симбионте для каждого выделяется отдельная рабочая область нить. Эта рабочая область является общей для всех пользовательских подпрограмм. Рабочая зона есть инициализируется нулем при первом запуске симбионта.

функция

Использование OpenVMS: код_функции
тип: длинное слово (без знака)
доступ: только чтение
механизм: по ссылке

Код функции, предоставляемый симбионтом при вызове вашего вывода рутина. Аргумент func — это адрес длинное слово, содержащее этот код.

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

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

В следующем списке описаны все функциональные коды, которые симбионт может предоставить, когда он вызывает вашу процедуру вывода (коды функций применимы только к процедурам ввода и форматирования, объясняются в описания процедуры пользовательского ввода и процедуры пользовательского форматирования, соответственно). Каждый язык программирования предоставляет соответствующий механизм определения этих функциональных кодов.


Функциональные коды для процедур вывода

PSM$K_OPEN
Когда симбионт вызывает вашу процедуру вывода с помощью этого функционального кода, ваша процедура должна подготовиться к перемещению данных на устройство, выполнив такие задачи, как выделение устройства, назначение канала устройству, и так далее. В следующий раз, когда симбионт вызовет вашу процедуру вывода, symbiont указывает один из кодов функции WRITE (PSM$K_WRITE или PSM$K_WRITE_NOFORMAT).

Симбионт вызывает вашу процедуру вывода с помощью функции PSM$K_OPEN. код, когда симбионт получает сообщение SMMBMSG$K_START_STREAM от контролер заданий.

Если ваша процедура вывода возвращает значение условия ошибки (очищается младший бит) на вызов функции PSM$K_OPEN контроллер заданий прекращает обработку поток и сообщает об ошибке тому, кто ввел команду DCL СТАРТ/ОЧЕРЕДЬ.

Аргумент funcdesc — это адрес дескриптора. который идентифицирует имя устройства, на которое направлена ​​процедура вывода. написать. Это имя устройства задается командой DCL. ИНИЦИАЛИЗАЦИЯ/ОЧЕРЕДЬ/ВКЛ= устройство .

Аргумент funcarg — это адрес длинного слова в в котором подпрограмма вывода пользователя возвращает длинное слово состояния устройства. Ваш подпрограмма вывода устанавливает биты в длинном слове состояния устройства, чтобы указать, что контроллер заданий, попадает ли устройство в одно из следующих категории:

  • Может печатать строчные буквы
  • Терминал
  • Подключается к ЦП посредством модема (удаленного)

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

PSM$K_WRITE
Когда симбионт вызывает вашу подпрограмму с этим кодом функции, ваш подпрограмма должна записывать данные на устройство. Симбионт предоставляет данные для записи в аргументе funcdesc . Компак рекомендует использовать одну из строковых подпрограмм библиотеки времени выполнения для получить доступ к данным в буфере, описанном funcdesc аргумент.
PSM$K_WRITE_NOFORMAT
Когда симбионт вызывает вашу подпрограмму с этим кодом функции, ваш подпрограмма должна записывать данные на устройство и указывать устройству драйвер, что данные не должны быть отформатированы.

Симбионт вызывает вашу подпрограмму с этим кодом функции, когда: (1) запрос на печать указывает параметр PASSALL или (2) данные вводятся escape-последовательность ANSI DCS (строка управления устройством).

Симбионт предоставляет данные для записи в funcdesc аргумент. Compaq рекомендует использовать один строковых подпрограмм библиотеки времени выполнения для перемещения данных из дескриптор устройства.

Процедура вывода симбионта информирует драйвер устройства не отформатируйте данные следующим образом:

  • Если устройство является построчным принтером, процедура вывода симбионта указывает код функции IO$_WRITEPBLK при вызове системы $QIO оказание услуг.
  • Когда устройство является терминалом, процедура вывода симбионта указывает модификатор функции IO$M_NOFORMAT при вызове функции $QIO. системная служба.
PSM$K_CANCEL
Когда симбионт вызывает вашу подпрограмму с этим кодом функции, ваш подпрограмма должна прерывать любые невыполненные запросы асинхронного ввода-вывода.

Процедура вывода, предоставляемая симбионтом, прерывает незавершенный ввод-вывод. запросов, вызвав системную службу $CANCEL с параметром IO$_CANCEL код функции.

Если ваша процедура вывода вернула значение условия PSM$_PENDING в единицу или несколько предыдущих запросов на запись, которые все еще находятся в обработке (т. е. PSM$REPORT еще не был вызван для сообщения о завершении), то ваш процедура вывода должна вызывать PSM$REPORT один раз для каждой незавершенной записи запрос, который отменен с этим вызовом. То есть отмена асинхронный запрос на запись не освобождает процедуру вывода пользователя от требование вызывать PSM$REPORT один раз для каждой асинхронной записи запрос.

Вы не можете использовать funcdesc и funcarg аргументов с этим кодом функции.

PSM$K_CLOSE
Когда симбионт вызывает вашу подпрограмму с этим кодом функции, ваш подпрограмма вывода должна прекратить обработку и освободить все ресурсы, которые она выделенные (например, каналы, назначенные устройству).

Вы не можете использовать funcdesc и funcarg аргументов с этим кодом функции.

Коды других функций вывода
Симбионт может вызывать вашу процедуру вывода с другими функциональными кодами. Ваша подпрограмма должна возвращать статус PSM$_FUNNOTSUP (функция не поддерживается) при вызове с любым из следующих функциональных кодов или с любым недокументированным кодом функции. Когда статус PSM$_FUNNOTSUP возвращается, симбионт выполняет свои обычные действия, как если бы были поставлены рутины. Чтобы подавить нормальное действие симбионта, вы должен вернуть SS$_NORMAL.
PSM$K_START_STREAM PSM$K_STOP_STREAM
ПСМ$K_START_TASK PSM$K_PAUSE_TASK
PSM$K_RESUME_TASK ПСМ$K_STOP_TASK
PSM$K_RESET_STREAM

Эти функциональные коды соответствуют элементам сообщения, которые обсуждаются более подробно в Разделе 16. 1.6, отправленном контроллером заданий в симбионт.

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

Ваша процедура вывода должна вернуть статус PSM$_FUNNOTSUP или SS$_NORMAL при вызове с кодом функции сообщения или с код частной функции.

описание функции

Использование OpenVMS: символьная_строка
тип: строка символов
доступ: только чтение
механизм: по дескриптору

Дескриптор функции, предоставляющий информацию, относящуюся к функции указывается аргументом func . funcdesc аргумент — это адрес этого дескриптора.

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

функарг

Использование OpenVMS: user_arg
тип: длинное слово (без знака)
доступ: только чтение
механизм: по ссылке

Аргумент функции, предоставляющий информацию, относящуюся к функции указывается аргументом func . funcarg аргумент — это адрес длинного слова содержащий этот аргумент функции.

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


Возвращаемые значения условия

СС$_НОРМАЛЬНЫЙ Обычное успешное завершение. Процедура пользовательского вывода завершила функцию, которую запросил симбионт.
PSM$_FUNNOTSUP Функция не поддерживается. Процедура пользовательского вывода не поддерживает или не распознает функциональный код, предоставленный симбионтом. К обеспечить будущую совместимость, ваша процедура вывода должна вернуть это статус для любых нераспознанных кодов состояния.
PSM$_PENDING Запрошенная функция принята, но не завершена. Ваша процедура вывода может вернуть этот статус только с PSM$K_WRITE и PSM$K_WRITE_NOFORMAT вызовы функций. Кроме того, если ваша подпрограмма возвращает PSM$_PENDING, ваш подпрограмма должна в конце концов сигнализировать о завершении с помощью PSM$REPORT рутина. Дополнительные сведения см. в описании подпрограммы PSM$REPORT. информация об асинхронных операциях записи и PSM$_PENDING значение условия.

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


Глава 16


Подпрограммы Symbiont/Job Controller Interface (SMB)

Подпрограммы Symbiont/Job Controller Interface (SMB) обеспечивают интерфейс между контроллером заданий и симбионтными процессами. А написанный пользователем симбионт должен использовать эти подпрограммы для связи с контролер работы.

16.1 Введение в процедуры SMB

Всегда используйте подпрограммы интерфейса SMB или систему $SNDJBC или $GETQUI. сервисы для связи с контроллером заданий. Вам не нужно и не следует пытаться взаимодействовать напрямую с контроллером заданий.

Чтобы написать свой собственный симбионт, вам нужно понять, как работают симбионты и, в частности, как ведет себя стандартный печатный симбионт.

16.1.1 Типы Симбионта

Существует два типа симбионтов:

  • Симбионт устройства, входной или выходной. Ан входной симбионт — это тот, который передает данные с медленного устройства на быстрое устройства, например, с картридера на диск. Картридер симбионт — входной симбионт. Выходной симбионт — это симбионт, передающий данные с быстрого устройства на медленное устройство, например, с диска на принтер или терминал. Печать симбионт — выходной симбионт.
  • Серверный симбионт, симбионт, который обрабатывает или передает данные, но не связанный с конкретным устройством; один пример — симбионт, который передает файлы по сети.

Операционная система не предоставляет серверных симбионтов.

16.1.2 Симбионты, поставляемые с операционной системой

Операционная система предоставляет два симбионта:

  • SYS$SYSTEM:PRTSMB. EXE (сокращенно PRTSMB), выходной симбионт для использование с принтерами и печатными терминалами
    PRTSMB выполняет такие функции, как вставка флага, пакет и страницы трейлера в выходной поток; чтение и форматирование ввода файлы; и запись отформатированных страниц на печатающее устройство.
    Вы можете модифицируйте PRTSMB, используя процедуры Print Symbiont Modification (PSM).
  • SYS$SYSTEM:INPSMB.EXE (сокращенно INPSMB), входной симбионт для использования с картридерами
    Этот симбионт обрабатывает передачу данных с картридера в файл на диске. Вы не можете ни изменить INPSMB, ни записать ввод. symbiont, используя подпрограммы SMB.

16.1.3 Поведение симбионта в среде OpenVMS

В среде OpenVMS симбионт — это процесс, находящийся под управлением контроллера заданий, который передает или обрабатывает данные.

На рис. 16-1 показаны компоненты, участвующие в обработке пользовательские запросы, связанные с симбионтами. На этом рисунке показаны два симбионта: (1) симбионт печати, предоставляемый операционной системой, PRTSMB и (2) написанный пользователем симбионт GRAPHICS.EXE, который обслуживает графику плоттер. Цифры на рисунке соответствуют цифрам на список, который следует.

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

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

Рисунок 16-1 Симбионты в среде OpenVMS


  1. Вы запрашиваете задание на печать с помощью DCL команда ПЕЧАТЬ. DCL вызывает системную службу $SNDJBC, передавая имя файла, который должен быть напечатан на контроллере заданий, вместе с любым другим информация, указанная спецификаторами для команды PRINT.
  2. Контроллер заданий размещает запрос на печать в соответствующую очередь и присваивает запросу номер задания.
  3. Контроллер заданий разбивает задание на печать на ряд задач (например, печать трех копий одного и того же файла три отдельные задачи). Контроллер заданий делает отдельный запрос симбионту для каждой задачи.
    Каждый запрос контроллера заданий make состоит из сообщения. Каждое сообщение состоит из кода, который указывает, что должен делать симбионт, и ряд пунктов информация, необходимая симбионту для выполнения задачи (имя файл, имя пользователя и т. д.).
  4. PRTSMB интерпретирует полученную информацию от контроллера заданий.
  5. PRTSMB находит и открывает файл, который он должен печать с использованием идентификационного номера файла контроллера заданий указано в сообщении запуска задачи.
  6. PRTSMB отправляет данные из файла в драйвер принтера.
  7. Драйвер устройства отправляет данные в принтер.

16.1.4 Написание симбионта

Написание собственного симбионта позволяет вам использовать механизмы очередей и функции управления контроллером заданий. Вы можете сделать это, если вам нужен симбионт для устройства, которое не может обслуживаться PRTSMB (или модифицированная форма PRTSMB) или если вам нужен серверный симбионт. Интерфейс между контроллером заданий и симбионтом позволяет симбионт, который вы пишете, чтобы использовать многие функции контроллера заданий.

Например, когда вы используете команду DCL PRINT, контроллер заданий отправляет сообщение симбионту печати, говорящее ему распечатать файл. Однако, когда написанное пользователем симбионт получает то же сообщение (вызванное введя команду PRINT), он может интерпретировать это как что-то достаточно разный. Например, робот-симбионт может интерпретировать сообщение в виде команды на перемещение и спецификацию файла (указанный командой PRINT) может быть файлом, описывающим направления в который робот должен перемещать.

Примечание

Модифицировать PRTSMB проще, чем писать собственный симбионт; выбрать это вариант, если можно. Подпрограммы Print Symbiont Modification (PSM) опишите, как изменить PRTSMB в соответствии с вашими потребностями.

16.1.5 Рекомендации по написанию симбионта

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

  • Симбионт не должен использовать ни один из постоянных каналов процесса, которым присвоены следующие логические имена:
    • СИС$ВВОД
    • СИСТЕМА $ ВЫВОД
    • СИС$ОШИБКА
    • СИСТЕМНАЯ $КОМАНДА
  • Симбионт должен выделять и освобождать память с помощью Run-Time Библиотечные (RTL) подпрограммы LIB$GET_VM и LIB$FREE_VM.
  • Для совместимости с будущими версиями операционной системы вам следует написать симбионту, чтобы он игнорировал неизвестные коды элементов сообщений и неизвестные коды сообщений-запросов. (См. процедуру SMB$READ_ITEM_MESSAGE.)
  • Симбионт должен взаимодействовать с контроллером заданий с помощью Подпрограммы SMB, системная служба $SNDJBC и система $GETQUI оказание услуг.
  • Симбионт не должен выполнять длительные операции в контекст процедуры AST. Симбионт может получать сообщения только от контроллер заданий, когда он не выполняется в контексте Процедура АСТ.
  • Код симбионта должен быть связан с SMBSRVSHR.EXE, чтобы для определения адреса подпрограммы SMB и следующих кодов состояния:
    • SMB$_INVTMNBR
    • SMB$_INVSTRLEV
    • SMB$_NOMOREITEMS
  • Чтобы назначить симбионт очереди после его компиляции и компоновки, исполняемый образ симбионта должен находиться в SYS$SYSTEM, и вы необходимо ввести одну из следующих команд:
    ИНИЦИАЛИЗАЦИЯ/ОЧЕРЕДЬ/ПРОЦЕССОР=имя_симбионтного_файла
    START/QUEUE/PROCESSOR=symbiont_filename
    Вы должны указать только имя файла в команде. Диск и каталог по умолчанию SYS$SYSTEM, и все поля, кроме имени файла, игнорируются.
  • Чтобы облегчить отладку симбионтов, вы должны определить логические имена DBG$INPUT и DBG$OUTPUT в таблице логических имен LNM$GROUP_000001 для укажите на свой терминал отладки.

16.1.6 Подпрограммы интерфейса Symbiont/Job Controller

Пять подпрограмм SMB образуют общедоступный интерфейс к контроллеру заданий. Контроллер заданий доставляет запросы симбионтам с помощью этого интерфейс, и симбионты сообщают свои ответы этим запросы через этот интерфейс. Написанный пользователем симбионт использует следующие процедуры для обмена сообщениями с контроллером заданий:

Обычный Описание
SMB$INITIALIZE Инициализирует внутреннюю базу данных объекта SMB, устанавливает интерфейс к контроллеру заданий и определяет:
  • Сообщения от контроллера заданий должны быть доставлены в симбионт синхронно или асинхронно по отношению к выполнению симбионт.
  • Симбионт должен быть однопоточным или многопоточным; эти концепции описаны в следующих разделах.
SMB$CHECK_FOR_MESSAGE Проверяет, было ли сообщение от контроллера заданий к симбионту прибыл (используется с синхронными симбионтами)
SMB$READ_MESSAGE Считывает сообщение контроллера заданий в буфер
SMB$READ_MESSAGE_ITEM Возвращает один элемент информации из сообщения контроллера заданий. (который может иметь несколько информационных элементов)
SMB$SEND_TO_JOBCTL Отправляет сообщение от симбионта контроллеру заданий

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

16.1.7 Выбор среды симбионта

Первая подпрограмма SMB, которую должен вызвать симбионт, это SMB$INITIALIZE. рутина. В дополнение к выделению и инициализации средств SMB внутренняя база данных, она предлагает вам два варианта вашего симбионта среда: (1) синхронная или асинхронная доставка сообщений из контроллер заданий и (2) одиночная или многопотоковая передача симбионт.


Предыдущий Следующий Содержимое Индекс
  конфиденциальность и юридическое заявление  
4493PRO_046.HTML

Руководство по утилитам OpenVMS

Руководство по утилитам OpenVMS
Дата пересмотра документа: 30 марта 2001 г.

Руководство по служебным программам OpenVMS


Предыдущий Содержимое Индекс

17.1.7.1 Синхронная и асинхронная доставка запросов

Когда вы инициализируете интерфейс симбионта/контроллера задания, symbiont имеет возможность принимать запросы от контроллера заданий синхронно или асинхронно.

Синхронная среда

Адрес процедуры AST является необязательным аргументом для подпрограмма SMB$INITIALIZE; если он не указан, симбионт получает сообщения от контроллера заданий синхронно. Симбионт, который получает сообщения синхронно, должен вызывать SMB$CHECK_FOR_MESSAGE периодически в процессе обработки заданий, чтобы обеспечить своевременная доставка запросов STOP_TASK, PAUSE_TASK и RESET_STREAM.

SMB$CHECK_FOR_MESSAGE проверяет, было ли сообщение от задания контроллер ждет. Если сообщение ожидает, SMB$CHECK_FOR_MESSAGE возвращает код успеха. Затем вызывающий SMB$CHECK_FOR_MESSAGE может вызовите SMB$READ_MESSAGE, чтобы прочитать сообщение и принять соответствующие действие.

Если ожидающих сообщений нет, SMB$CHECK_FOR_MESSAGE возвращает ноль в R0. Вызывающий SMB$CHECK_FOR_MESSAGE может продолжить обработку задачи в рука.

На рис. 17.2 представлена ​​блок-схема синхронного однопоточного симбионт. На блок-схеме не показаны все детали логики симбионту и не показывает, как симбионт справляется с PAUSE_TASK, Запросы RESUME_TASK или RESET_STREAM.

Рис. 17-2 Блок-схема однопоточного синхронного Симбионт


Асинхронная среда

Чтобы получать сообщения асинхронно, симбионт указывает подпрограмма AST для обработки сообщений в качестве второго аргумента Процедура SMB$INITIALIZE. В этой схеме всякий раз, когда контроллер заданий отправляет сообщения симбионту, вызывается процедура AST.

Подпрограмма AST вызывается без аргументов и не возвращает никакого значения. Ты есть возможность заставить процедуру AST прочитать сообщение в пределах контекст его выполнения или пробуждения подпрограммой AST приостановленного процесс для чтения сообщения вне контекста выполнения Процедура АСТ.

Имейте в виду, что AST может быть доставлен только тогда, когда симбионт не выполнение в контексте подпрограммы AST. Таким образом, чтобы обеспечить доставку сообщений от контроллера заданий, симбионта не следует выполнять длительные операции на уровне АСТ.

Это особенно важно для выполнения STOP_TASK, Запросы PAUSE_TASK и RESET_STREAM. Если запрос STOP_TASK не может быть поставленный во время обработки задачи, например, бесполезен.

Один метод, который обеспечивает доставку запросов STOP и PAUSE в асинхронная среда заключается в том, чтобы подпрограмма AST устанавливала флаг, если она читает запрос PAUSE_TASK, STOP_TASK или RESET_STREAM и иметь основная процедура симбионта периодически проверяет флаг.

На рис. 17-3 и рис. 17-4 показаны блок-схемы для однопоточного, асинхронный симбионт. Цифры не показывают многих деталей, которые вы symbiont может включать в себя, например, вызов системной службы $QIO.

Обратите внимание, что пунктирные линии на рис. 17.3, соединяющие вызовы с $HIBER с вызовами процедуры AST $WAKE показывают, что следующее действие чтобы иметь место, является вызовом $WAKE. Они не точно отражают поток управления внутри симбионта, но представляют собой действие контроллер заданий, вызывающий выполнение подпрограммы AST.

Рис. 17-3 Блок-схема однопоточного асинхронного Симбионт (ГЛАВНАЯ программа)


Рис. 17-4 Блок-схема однопоточного асинхронного Симбионт (программа AST)


17.1.7.2 Однопотоковая передача в сравнении с многопотоковой

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

Аргумент подпрограммы SMB$READ_MESSAGE обеспечивает способ для многопоточный симбионт для отслеживания потока, на который ссылается запрос. Однако написание собственного многопоточного симбионта может оказаться сложной задачей. сложная затея.

17.1.8 Чтение запросов контроллера заданий

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

Табл. 17-1 Функции контроллера заданий
SMMBSG$K_START_STREAM SMMBMSG$K_STOP_STREAM
SMMBSG$K_START_TASK SMMBSG$K_PAUSE_TASK
SMMBSG$K_RESUME_TASK SMMBSG$K_STOP_TASK
SMMBSG$K_RESET_STREAM

Контроллер заданий передает эти запросы симбионту в структуре который содержит: (1) код, идентифицирующий запрошенную функцию и (2) необязательные элементы информации, которые могут понадобиться симбионту выполнить запрошенную функцию.

Вызывая SMB$READ_MESSAGE, симбионт считывает код функции и записывает связанные элементы информации, если таковые имеются, в буфер. Затем symbiont анализирует элементы сообщения, хранящиеся в буфере, вызывая процедура SMB$READ_MESSAGE_ITEM. SMB$READ_MESSAGE_ITEM читает одно элемент сообщения каждый раз, когда он вызывается.

Каждый элемент сообщения состоит из кода, который идентифицирует тип сообщения. информацию, содержащуюся в элементе, и саму информацию. Например, код SMMBMSG$K_JOB_NAME сообщает симбионту, что предмет содержит строка, которая является именем задания.

Количество элементов сообщения в сообщении запроса зависит от типа запроса. Поэтому, чтобы убедиться, что все элементы сообщения прочитаны, SMB$READ_MESSAGE_ITEM необходимо вызывать повторно для каждого запроса. SMB$READ_MESSAGE_ITEM возвращает статус SMB$_NOMOREITEMS после прочтения последний элемент сообщения в данном запросе.

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

См. описание подпрограммы SMB$READ_MESSAGE_ITEM для таблицы. который показывает элементы сообщения, составляющие каждый тип запроса.

17.1.9 Обработка запросов контроллера заданий

После того, как запрос прочитан, его необходимо обработать. Как выглядит запрос обработки зависит от типа запроса. В следующем разделе перечислены, для каждого запроса, который контроллер заданий отправляет симбионту печати, действия, которые выполняет стандартный симбионт (PRTSMB) при появлении сообщения получен. Эти действия ориентированы на печатных симбионтов в частности, но может служить ориентиром для других видов симбионтов, таких как Что ж.

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

SMBMSG$K_START_STREAM

  • Сброс всей информации о потоке, которая могла быть изменена по предыдущим запросам START_STREAM в этом потоке (для многопоточных симбионты).
  • Прочитайте и сохраните элементы сообщения, связанные с запросом.
  • Выделить устройство, указанное в элементе SMMBMSG$K_DEVICE_NAME.
  • Назначьте канал устройству.
  • Получить характеристики устройства.
  • Если устройство не является ни терминалом, ни принтером, то прервать обработки и вернуть ошибку контроллеру заданий с помощью Процедура SMB$SEND_TO_JOBCTL. Обратите внимание, что даже если ошибка произошло, поток по-прежнему считается запущенным. Контроллер заданий обнаруживает ошибку и отправляет симбионту запрос STOP_STREAM.
  • Установите временные характеристики устройства, подходящие для того, как симбионт будет использовать устройство.
  • Для удаленных устройств (устройств, подключенных к системе с помощью модем), установить AST, чтобы сообщить о потере несущего сигнала.
  • Сообщите контроллеру заданий, что запрос выполнен и что поток запущен, указав SMMBMSG$K_START_STREAM в вызов SMB$SEND_TO_JOBCTL.

SMMBSG$K_START_TASK

  • Сброс всей информации о задании, которая могла быть изменена предыдущие запросы START_TASK для этого номера потока.
  • Чтение и сохранение элементов сообщения, связанных с запросом.
  • Откройте основной входной файл.
  • Сообщите контроллеру заданий, что задача запущена указание SMMBMSG$K_START_TASK в вызове SMB$SEND_TO_JOBCTL рутина.
  • Начать обработку задачи.
  • По завершении задачи уведомите контроллер заданий, указав SMMBMSG$K_TASK_COMPLETE в вызове процедуры SMB$SEND_TO_JOBCTL.

SMMBSG$K_PAUSE_TASK

  • Чтение и сохранение элементов сообщения, связанных с запросом.
  • Установите флаг, который заставит основную процедуру обработки приостанавливаться в начало следующей выходной страницы.
  • Когда основная процедура приостанавливается, уведомите контроллер заданий, указание SMMBMSG$K_PAUSE_TASK в вызове SMB$SEND_TO_JOBCTL рутина.

SMMBSG$K_RESUME_TASK

  • Прочитайте и сохраните элементы сообщения, связанные с запросом.
  • Выполнение любых функций позиционирования, указанных в элементах сообщения.
  • Снимите флаг, который приводит к приостановке основной процедуры ввода, и возобновить обработку задачи.
  • Уведомление контроллера заданий о возобновлении выполнения задачи указание SMMBMSG$K_RESUME_TASK в вызове SMB$SEND_TO_JOBCTL рутина.

SMMBSG$K_STOP_TASK

  • Прочитайте и сохраните элементы сообщения, связанные с запросом.
  • Если выполнение текущей задачи было приостановлено, возобновить ее.
  • Отмените все невыполненные операции ввода-вывода.
  • Закройте входной файл.
  • Если контроллер заданий указал в сообщении START_TASK, что страница трейлера должна быть напечатана, когда задача остановлена ​​или если она указано, что устройство должно сбрасываться при остановке задачи, затем выполнять эти функции.
  • Уведомить контроллер заданий о том, что задание было остановлено аварийно указав SMMBMSG$K_STOP_TASK и указав вектор ошибки в вызов SMB$SEND_TO_JOBCTL. PRTSMB указывает значение, переданное контроллер заданий в элементе SMMBSG$K_STOP_CONDITION как ошибку условие в векторе ошибки.

SMBMSG$K_STOP_STREAM

  • Чтение и сохранение элементов сообщения, связанных с запросом.
  • Освободите все ресурсы, относящиеся к потоку: (1) отмените назначение канала на устройство и (2) освободить устройство.
  • Уведомление контроллера заданий о том, что поток был остановлен указав SMMBMSG$K_STOP_STREAM в вызове SMB$SEND_TO_JOBCTL.
  • Если это однопоточный симбионт или если это многопоточный symbiont, но все остальные потоки в данный момент остановлены, то вызовите Системная служба $EXIT с кодом состояния SS$_NORMAL.

SMBMSG$K_RESET_STREAM

  • Чтение и сохранение элементов сообщения, связанных с запросом.
  • Прерывание любой выполняемой задачи — вам не нужно уведомлять о задании контроллер, что задача была прервана, но вы можете сделать это, если вы хочу.
  • Если контроллер заданий указал в сообщении START_TASK, что страница трейлера должна быть напечатана, когда задача остановлена ​​или если она указано, что устройство должно сбрасываться при остановке задачи, затем подавить эти функции.
    Контроллер заданий отправляет симбионтирует запрос RESET_STREAM, чтобы восстановить контроль над очередью или устройство, которое не ответило на запрос STOP_TASK. Запрос RESET_STREAM должен по возможности избегать любых дальнейших операций ввода-вывода. Например, принтер может быть отключен, а запросы на вывод на это устройство никогда не будет завершено.
  • Продолжить, как если бы это был запрос STOP_STREAM.
Примечание

Запрос STOP_STREAM и запрос RESET_STREAM останавливают очередь; но запрос RESET_STREAM является аварийной остановкой и используется для например, когда устройство вышло из строя. Запрос RESET_STREAM должен предотвратить дальнейшие операции ввода-вывода, поскольку принтер может быть не в состоянии чтобы завершить его.

17.1.10 Ответ на запросы контроллера заданий

Симбионт использует процедуру SMB$SEND_TO_JOBCTL для отправки сообщений контролер заданий.

Большинство сообщений, которые симбионт отправляет контроллеру заданий, ответы на запросы диспетчера заданий. Такие сообщения информируют контроллер заданий, что запрос был успешно выполнен или безуспешно. Код функции, который симбионт возвращает контроллер в вызове SMB$SEND_TO_JOBCTL указывает, какой запрос было завершено.

Например, если контроллер заданий отправляет запрос START_TASK с помощью Код SMMBMSG$K_START_TASK, симбионт отвечает вызовом SMB$SEND_TO_JOBCTL с использованием SMMBMSG$K_START_TASK в качестве Аргумент запроса , указывающий, что обработка задачи завершена. началось. Пока симбионт не ответит, команда DCL SHOW QUEUE указывает, что очередь запускается.

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

Помимо отправки сообщений в ответ на запросы, симбионт может отправлять другие сообщения контроллеру заданий. В этих сообщениях симбионт отправляет либо код SMMBMSG$K_TASK_COMPLETE, указывающий, что он выполнил задачу, или SMMBMSG$K_TASK_STATUS, указывающий, что сообщение содержит информацию о статусе задачи.

Обратите внимание, что при доставке запроса START_TASK симбионт отвечает сообщением SMB$SEND_TO_JOBCTL с SMMBMSG$K_START_TASK код. Этот ответ означает, что задача запущена. Это не означает задача выполнена. Когда симбионт выполняет задание, он вызывает SMB$SEND_TO_JOBCTL с кодом SMMBMSG$K_TASK_COMPLETE.

17.2 Подпрограммы SMB

В этом разделе описываются отдельные подпрограммы SMB.


SMB$CHECK_FOR_MESSAGE

Процедура SMB$CHECK_FOR_MESSAGE определяет, было ли отправлено сообщение от контроллера заданий к симбионту ожидает чтения.

Формат

SMB$CHECK_FOR_MESSAGE

ВОЗВРАТ


Использование OpenVMS: условное_значение
тип: длинное слово (без знака)
доступ: только запись
механизм: по значению

Значение условия длинного слова. Большинство утилит возвращают условие значение в R0. Перечислены значения условий, которые может возвращать эта процедура. в разделе Возвращенные значения условия.


Аргументы

Никто.

Описание

Когда ваш симбионт вызывает процедуру SMB$INITIALIZE для инициализации интерфейс между симбионтом и контроллером задания, вы можете выбрать чтобы запросы от контроллера заданий доставлялись с помощью AST. Если вы решите не использовать AST, ваш симбионт должен вызвать SMB$CHECK_FOR_MESSAGE во время обработки задач, чтобы проверить, сообщение от контроллера заданий ожидает прочтения. Если сообщение ожидает, SMB$CHECK_FOR_MESSAGE возвращает код успеха; если нет, то возвращает ноль.

Если сообщение ожидает, симбионт должен вызвать SMB$READ_MESSAGE, чтобы прочитайте его, чтобы определить, следует ли предпринять немедленные действия (как в случае STOP_TASK, RESET_STREAM или PAUSE_TASK).

Если сообщение не ожидает, SMB$CHECK_MESSAGE возвращает ноль. Если это состояние обнаружено, симбионт должен продолжить обработку запрос под рукой.


Возвращаемые значения условия

СС$_НОРМАЛЬНЫЙ Одно или несколько ожидающих сообщений.
0 Никаких ожидающих сообщений.

SMB$ИНИЦИАЛИЗАЦИЯ

Процедура SMB$INITIALIZE инициализирует написанный пользователем симбионт и интерфейс между симбионтом и контроллером заданий. Он выделяет и инициализирует внутренние базы данных интерфейса и настраивает механизм, который должен разбудить симбионта при получении сообщения.

Формат

SMB$INITIALIZE уровень_структуры [ast_routine] [streams]

ВОЗВРАТ


Использование OpenVMS: условное_значение
тип: длинное слово (без знака)
доступ: только запись
механизм: по значению

Значение условия длинного слова. Большинство утилит возвращают условие значение в R0. Перечислены значения условий, которые может возвращать эта процедура. в разделе Возвращенные значения условия.


Аргументы

уровень_структуры

Использование OpenVMS: longword_unsigned
тип: длинное слово (без знака)
доступ: только чтение
механизм: по ссылке

Версия интерфейса симбионта/контроллера заданий. уровень_структуры аргумент — это адрес длинного слова содержащий версию используемого интерфейса симбионта/контроллера заданий когда симбионт был скомпилирован. Всегда размещайте значение символа SMMBSG$K_STRUCTURE_LEVEL в длинном слове, к которому обращается этот аргумент. Каждый язык программирования предоставляет соответствующий механизм для определяющие символы.
ast_routine

Использование OpenVMS: ast_procedure
тип: значение процедуры
доступ: только чтение
механизм: по ссылке

Процедура обработки сообщений, вызванная на уровне AST. Аргумент ast_routine — адрес точки входа подпрограммы обработки сообщений, которая будет вызываться на уровне AST, когда symbiont получает сообщение от контроллера заданий. Процедура AST вызывается без параметров и не возвращает значения. Если процедура AST указано, подпрограмма вызывается один раз каждый раз, когда симбионт получает сообщение от диспетчера заданий.

Подпрограмма AST обычно читает сообщение и определяет, следует ли немедленно необходимо принять меры. Имейте в виду, что AST может быть доставлен только во время симбионт работает на уровне, отличном от AST. Таким образом, для обеспечения доставки сообщений от контроллера заданий, симбионт не должен выполнять длительные операции на уровне АСТ.

Если вы не укажете аргумент ast_routine , симбионт должен вызвать процедуру SMB$CHECK_FOR_MESSAGE для проверки ожидающие сообщения.

потоков

Использование OpenVMS: longword_unsigned
тип: длинное слово (без знака)
доступ: только чтение
механизм: по ссылке

Максимальное количество потоков, которые должен поддерживать симбионт. потоков аргумент — это адрес длинного слова содержащий количество потоков, которые должен поддерживать симбионт. число должно быть в пределах 1 до 32 .

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

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


Описание

Ваш симбионт должен вызвать SMB$INITIALIZE перед вызовом любого другого SMB. рутины. Он вызывает SMB$INITIALIZE, чтобы сделать следующее:
  • Выделите и инициализируйте внутреннюю базу данных объекта SMB.
  • Установите интерфейс между контроллером заданий и симбионтом.
  • Определить схему потоков симбионта.
  • Настройте механизм пробуждения симбионта при получении сообщения полученный.

После того, как симбионт вызовет SMB$INITIALIZE, он сможет взаимодействовать с контроллер заданий с помощью других подпрограмм SMB.


Возвращаемые значения условия

СС$_НОРМАЛЬНЫЙ Обычное успешное завершение.
SMB$_INVSTRLEV Недопустимый уровень структуры.

Эта подпрограмма также возвращает любые коды, возвращенные $ASSIGN и LIB$GET_VM.


SMB$READ_MESSAGE

Подпрограмма SMB$READ_MESSAGE копирует сообщение, которое контроллер заданий отправлено в указанный буфер вызывающей стороны.

Формат

Поток SMB$READ_MESSAGE, буфер, запрос

ВОЗВРАТ


Использование OpenVMS: условное_значение
тип: длинное слово (без знака)
доступ: только запись
механизм: по значению

Значение условия длинного слова. Большинство утилит возвращают условие значение в R0. Перечислены значения условий, которые может возвращать эта процедура. в разделе Возвращенные значения условия.


Аргументы

поток

Использование OpenVMS: longword_unsigned
тип: длинное слово (без знака)
доступ: только запись
механизм: по ссылке

Номер потока, указывающий поток, к которому относится сообщение. поток аргумент — это адрес длинного слова в который контроллер заданий записывает номер потока, на который ссылается сообщение. В однопоточных симбионтах номер потока всегда 0.
буфер

Использование OpenVMS: символьная_строка
тип: строка символов
доступ: только запись
механизм: по дескриптору

Адрес дескриптора, указывающего на буфер, в котором находится задание контроллер пишет сообщение. SMB$READ_MESSAGE использует Библиотечные подпрограммы обработки строк (STR$) для копирования сообщения в буфер, который вы поставляете. Буфер должен быть указан динамической строкой дескриптор.
запрос

Использование OpenVMS: идентификатор
тип: длинное слово (без знака)
доступ: только запись
механизм: по ссылке

Код, идентифицирующий запрос. Аргумент запроса адрес длинного слова, в которое SMB$READ_MESSAGE записывает код, идентифицирующий запрос.

Существует семь кодов запросов. Каждый код интерпретируется как сообщение симбионт. Ниже приведены коды и их описания:

SMMBSG$K_START_STREAM Инициирует обработку неактивного потока симбионтов. Контроллер заданий посылает это сообщение, когда START/QUEUE или INITIALIZE/QUEUE/START команда выдается в остановленной очереди.
SMMBMSG$K_STOP_STREAM Останавливает обработку запущенной очереди. Контроллер заданий отправляет это сообщение при выдаче команды STOP/QUEUE/NEXT после того, как симбионт завершает любую текущую активную задачу.
SMMBSG$K_RESET_STREAM Прерывает всю обработку запущенного потока и повторно ставит текущее задание в очередь. Контроллер заданий отправляет это сообщение, когда поступает команда STOP/QUEUE/RESET. выпущен.
SMMBSG$K_START_TASK Запрашивает, чтобы симбионт начал обработку задачи. Контроллер заданий отправляет это сообщение, когда файл находится в незанятой запущенной очереди.
SMMBSG$K_STOP_TASK Запрашивает, чтобы симбионт прервал выполнение задачи. Работа контроллер посылает это сообщение, когда STOP/QUEUE/ABORT или Выдается команда STOP/QUEUE/REQUEUE. Товар SMMBMSG$K_STOP_CONDITION определяет, является ли это прерыванием или повторным запросом в очередь.
SMMBSG$K_PAUSE_TASK Запрашивает, чтобы симбионт приостановил обработку задачи, но сохранил ресурсы, необходимые для продолжения. Контроллер заданий отправляет это сообщение, когда команда STOP/QUEUE выдается без /ABORT, /ENTRY, /REQUEUE или /NEXT для очереди, которая в данный момент печатает работа.
SMMBSG$K_RESUME_TASK Запрашивает, чтобы симбионт продолжал выполнять задачу, которая была остановлен запросом PAUSE_TASK. Это сообщение отправляется, когда Команда START/QUEUE выдается для очереди, обслуживаемой симбионтом, который пауза в обработке текущей задачи.

Описание

Ваш симбионт вызывает SMB$READ_MESSAGE, чтобы прочитать сообщение о том, что задание контроллер отправил симбионту.

Каждое сообщение от контроллера заданий состоит из кода, идентифицирующего функция, которую должен выполнять симбионт, и ряд элементов сообщения. Есть семь кодов. Элементы сообщения — это фрагменты информации, которые симбионт должен выполнять запрошенную функцию.

Например, когда вы вводите команду DCL PRINT, контроллер заданий отправляет сообщение, содержащее код START_TASK и элемент сообщения содержащий спецификацию файла для печати.

SMB$READ_MESSAGE записывает код в длинное слово (указанное запрос аргумент) и пишет сопроводительное сообщение элементы, если таковые имеются, в буфер (указанный буфером аргумент).

Оставьте первый комментарий

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*