На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Что есть ERRORLEVEL как таковой?
    Господа, объясните пожалуйста, что есть ERRORLEVEL по сути (не по назначению разумеется), правила образования, местоположение, время жизни...
    Спасибо..
      Хм.. насколько я помню, ERRORLEVEL существует только в досовском комманд.коме (в юниховых *sh он по-другому называется). Ты его имеешь в виду?..
        ну кароче это результат жизнедеятельности программы, который используется, чтобы дать понять другим программам, как прошло... ;-)
          Правило образования - значение регистра AL при выходе через AH=4Ch/INT 21h. При выходе через INT 20h, AH=0/INT 21h вроде как нулевой.... Храниться должен где-то в переменных ДОСа...... Срок жизни - до следующего запуска.....
            да перепробовал я энто всё.... не вытанцовывается...
            нужно запустить батник, в котором последовательно запускаются две программы:
            - одна устанавливает EL
            - вторая его проверяет и, в зависимости от энтого выполняет чего-то (прога типа IF ERRORLEVEL ...)
              А ты сделай прогу, которой в качестве параметра передаётся то, что нужно запустить и после чего нужно проверять ERRORLEVEL....
                нет важнее всего программа, которая ПРОВЕРЯЕТ EL...
                мне нужен, по правде говоря, только механизм отыскания и проверки EL, а применение сему я найду.
                Хуже, если EL уничтожается при ЗАПУСКЕ следующей программы... хотя, не должен бы...
                  Что такое errorlevel? По сути - переменная окружения, которая выставляется в командном режиме после выполнения каждой команды (любой). Поэтому и ловить ты его можешь только сразу после запуска программы. Но оно(она) какая-то неправильная переменная, потому что кроме как в батче и не видна. Вот. Херня какая.
                    Идея проста - если её что-то проверяет (ну пусть даже батник), то она где-то лежит....
                    Вопрос!!!  ГДЕ ЛЕЖИТ ... и В КАКОМ ВИДЕ ?
                      ERRORLEVEL - это просто макроопределение в великой могучей программе COMMAND.COM.
                      if errorlevel 5
                      означает: еси код, возвращённый вызванной программой _больше_ или равен 5, то.. Вот и всё. Вне COMMAND.COM (т.е. вне .bat-файлов) данная хрень не имеет абсолютно никакого значения. Это НЕ переменная окружения (мля, ну и перевод.. environment..)..
                        непонятки - программа, вызванная из COMMAND.com как виртуальный модуль, возвращает ей значение (ЗНАЧЕНИЕ ТИПА INTEGER) !!!! Сразу вопрос - КУДА ОНА ЕГО ПОМЕСТИЛА?
                        А ОНА ЕГО КУДА-ТО поместила, раз COMMAND.COM может его проверить.

                        повторюсь - ЭТО НЕ АСТРАЛЬНАЯ СУЩНОСТЬ - ЭТО ПЕРЕМЕННАЯ ТИПА INTEGER.

                        почему программа из ТОГО ЖЕ БАТНИКА не может проделать ТО ЖЕ, ЧТО И МАКРООПРЕДЕЛЕНИЕ ERRORLEVEL ???


                        а также... макроопределение есть ни что иное как набор команд процессора... (мнение ламера, разумеется  :) )
                        Сообщение отредактировано: Drew -
                          Ну.... во-первых, это переменная типа Byte.... :)
                          Во-вторых.... Если при запуске своей проги ты обнаруживаешь ноль, когда вызываешь ah=4Dh/int21h, значит этот ERRORLEVEL уничтожается до запуска проги! Логично? Так что тебе придётся только писать TSR-ку....
                          Кстати.... я тебя обрадовать хочу! После вызова ah=4Dh/int21h это самое значение уничтожается! :) Поэтому даже TSR-ка тебе может не помочь....
                            Попробую внести ясность. ERRORLEVEL - это не переменная, а, действительно, только макроопределение. Причём, если сделать if ERRORLEVEL 1, то эта хрень вернёт TRUE для значений, равных _и_больших_, чем единица. Почему её ниоткуда нельзя прочитать, кроме как из батника? А можно в асмовой проге написать IF EXIST xxx.yyy THEN?? ERRORLEVEL - эта хрень, принадлежащая исключительно комманд.кому. А вот почему ты не можешь прочитать собственно код возврата предыдующей проги:
                            "the word in which DOS stores the return code is cleared after being
                            read by this function, so the return code can only be retrieved once"
                            [Ralph Brown's Interrupt List, выпуск 61, раздел Int 21, Func 4D].
                            А т.к. COMMAND.COM читает этот код возврата (чтобы дать возможность узнать о нём батнику), код будет сброшен, и больше никто о нём не узнает.
                              Цитата Kernel Panic, 11.05.02, 18:57:53

                              [Int 21, Func 4D].
                              А т.к. COMMAND.COM читает этот код возврата (чтобы дать возможность узнать о нём батнику...


                              ну...ну... и ГДЕ батник (то есть COMMAND.COM) энто исчет и КАК определяет при обработке строки IF ERRORL... ?
                                Drew, смотри: комманд.ком - это интерпретатор. Вот он встречает в батнике строку, в которой его просят пустить какую-нить прогу. Он её пускает. Когда прога завершается, она возвращает управление комманд.кому, и тот проверяет, чё эта прога там вернула (int 21, ah=4D). И запоминает этот код возврата (где-то у себя в своих внутренних переменных). Потом продолжает интерпретировать батник. Следующей, скажем, идёт проверка ERRORLEVEL'a. Комманд.ком смотрит на свою переменную и принимает соответствующие действия.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0324 ]   [ 14 queries used ]   [ Generated: 17.05.24, 03:42 GMT ]