IF (%TYPE%)==(EXe) SET TYPE=EXE
IF (%TYPE%)==(eXE) SET TYPE=EXE
IF (%TYPE%)==(EXE) goto :DOASM
rem
IF (%TYPE%)==(c) SET TYPE=COM
IF (%TYPE%)==(C) SET TYPE=COM
IF (%TYPE%)==(co) SET TYPE=COM
IF (%TYPE%)==(Co) SET TYPE=COM
IF (%TYPE%)==(cO) SET TYPE=COM
IF (%TYPE%)==(CO) SET TYPE=COM
IF (%TYPE%)==(com) SET TYPE=COM
IF (%TYPE%)==(Com) SET TYPE=COM
IF (%TYPE%)==(cOm) SET TYPE=COM
IF (%TYPE%)==(coM) SET TYPE=COM
IF (%TYPE%)==(COm) SET TYPE=COM
IF (%TYPE%)==(cOM) SET TYPE=COM
IF (%TYPE%)==(COM) goto :DOASM
rem
GOTO :ASKTYPE
:DOASM
IF (%MASM%)==() SET MASM=/S/P/V/L%MASM%
IF not (%MASM%)==() ECHO MASM командная строка переключается в: %MASM%
ECHO on
MASM %F1%.asm;
@ECHO off
IF errorlevel 1 goto :NOASSEM
REM
IF (%TYPE%)==(OBJ) goto :LSTFILES
IF (%LINK%)==() SET LINK=/I/CP:1%LINKS%
IF not (%LINK%)==() ECHO Link командная строка переключается в: %LINK%
- П-6 -
ECHO on
LINK %F1%.obj,%F1%.exe;
@ECHO off
IF errorlevel 1 goto : NOLINK
IF exist %F1%.obj DEL %F1%.obj >nul:
REM
IF (%TYPE%)==(COM) EXE2BIN %F1%.exe %F1%.com >nul:
IF (%TYPE%)==(COM) goto :DEL_EXE
GOTO :LSTFILES
:DEL_EXE
IF exist %F1%.exe DEL %F1%.exe >nul:
:LSTFILES
IF exist %F1%.bak DEL %F1%.bak >nul:
DIR %F1%.*
GOTO :END
:NOPARM
ECHO Параметр не указан!
GOTO :END
:NOFILE
ECHO Файл "%F1%.ASM" не существует!"
GOTO :END
:NOASSEM
ECHO Ошибка ассемблера при трансляции!
GOTO :END
:NOLINK
ECHO Ошибка при редактировании связей!
:END
SET F1=
SET TYPE=
SET MASM=
SET LINK=
SET MASMS=
SET LINKS=
----------------------------------------------------------------
Отметим, что командный файл МК.BAT использует некоторые не-
печатаемые в коде ASCII символы: ESC (переход) в коде ASCII пока-
зан, как ^[, а BS (возврат) в коде ASCII показан, как ^H.
В процессе создания командного файла МК.BAT программа-редак-
тор и программа текстовой обработки, которые Вы используете,
должны обеспечить возможность вставки этих символов в данный
текст.
Начало листинга показывает использование команды @ ECHO off
операционной системы MS-DOS версии 3.3, результатом которой явля-
ется выключение режима вывода на экран исполняемых команд, при
этом и сама строка ECHO off на экран выводиться не будет.
Однако, если Вы работаете с более ранней версией операцион-
ной системы MS-DOS, то можно использовать управляющую последова-
тельность стандарта ANSI, показанные в нескольких последующих
строках листинга.
Управляющая последовательность стандарта ANSI используется
только тогда, когда драйвер устройства ANSI.SYS загружается в
процессе первоначальной загрузки системы.
Символ возврата в коде ASСII используется с целью отображе-
ния операционной системой MS-DOS пустой строки в процессе выпол-
нения данного файла: результатом оператора "ECHO^H" является
- П-7 -
отображение пустой строки во всех версиях операционной системы
MS-DOS.
Командный файл МК.BAT использует программу общего пользова-
ния, называемую ANSWER.COM. Эта программа используется для отоб-
ражения приглашения операционной системы MS-DOS, означающего го-
товность операционной системой к приему команд; в ответ на это
приглашение любой вводимый текст назначается переменной окружения
ANSWER.
Ввод в ответ на запрос может быть затем проверен в командном
файле путем использования в операторе %ANSWER%.
Использование средства MAKE фирмы "Майкрософт"
Утилита сопровождения программы фирмы "Майкрософт", называе-
мая MAKE, может использоваться с целью значительного повышения
уровня автоматизации разработки программ.
Утилита MAKE используется для автоматического обновления го-
тового к выполнению файла всякий раз, когда вносятся изменения в
один или более ее исходных объектных файлов; кроме того с помощью
этой утилиты можно обновлять любой файл всякий раз, когда вносят-
ся изменения в другие смежные файлы.
Чтобы использовать утилиту MAKE, необходимо создать "файл
описаний", содержащий команды для утилиты MAKE по построению дан-
ного проекта.
К примеру, если вы хотите создать с помощью утилиты MAKE
программу, называемую TEST1.EXE, файл описания утилиты MAKE может
содержать операторы, показанные в листинге A-4.
Листинг A-4. Пример файла описания утилиты MAKE
----------------------------------------------------------------
# Стандартная строка команды с текстом макроопределений
f1=test1 # имя файла, подлежащего созданию
msm=masm /S /P /V /L # переключатели (операторы выбора)
# строки команд макроассемблера MASM
lnk=link /CP:1 /I # переключатели (операторы выбора)
# строки команд редактора связей LINK
#
# Перечень файлов ASM
$(f1).obj: $(f1).asm
$(msm) $(f1).asm;
#
$(f1).exe: $(f1).obj
$(lnk) $(f1).obj,$(f1).exe;
DEL $(f1).obj
----------------------------------------------------------------
Файл описания утилиты MAKE обычно имеет то же имя, что и го-
товый к выполнению файл, но без расширения. Таким образом, если
готовый к выполнению файл называется ТЕSТ1.EXE, то файл описания
утилиты MAKE, используемый для создания программы ТЕSТ1.EXE, на-
зывается просто ТЕSТ1.
Чтобы создать или обновить программу ТЕSТ1.EXE, просто вве-
дите "MAKE ТЕSТ1".
Файл описания утилиты MAKE, показанный в листинге A-4, имеет
следующие характеристики:
- П-8 -
- Любой текст, который начинается с символа #, является ком-
ментарием и игнорируется утилитой MAKE в процессе обработ-
ки;
- "Техt=" представляет макротекст, который присваивается
строке с текстом, что позволяет отображать этот текст в
символическом виде по всему файлу описания. Пример, приве-
денный в листинге A-4, показывает, что макротексту присва-
ивается значение f1 в качестве имени файла программ, кото-
рый должен обрабатываться. Далее значение f1 используется
на протяжении остального файла описания с целью представ-
ления данного файла программ в виде $(f1). Если Вам необ-
ходимо изменить имя данного файла программ, оно меняется
только в одном месте, где значение f1 впервые присваивает-
ся;
- $(f1).OBJ - это имя первого целевого файла, называемого
"выходным файлом", а $(f1).ASM (который в данном примере в
"test1.ASM") - это имя исходного файла, называемого "вход-
ным файлом". Входной файл - это файл, который требуется
для создания выходного файла. Выходной файл всегда вводит-
ся первым, за ним следует двоеточие, за которым следует
один или более входных файлов, требуемых для создания вы-
ходного файла. Если выходной файл отсутствует или имеет
отметку о времени и дате, более раннюю чем, связанный с
ним входной файл(ы), то следующая строка в файле описания
выполняется как команда операционной системы MS-DOS (в
данном примере "$(msm)$(f1);", которая будет оттранслиро-
вана в "masm /s/p/v/l/test1;".
Если данный входной файл не существует, то средство
MAKE останавливает обработку в этой точке и выводит сооб-
щение об ошибке;
- $(f1).EXE - имя конечного выходного файла, а $(f1).OBJ -
имя требуемого входного файла. И снова, если файл $(f1).EXE
(который транслируется в "test1.EXE") не существует или если
он имеет отметку о времени и дате, более раннюю по сравнению
с файлом $(f1).OBJ, то следующая строка выполняется как ко-
манда операционной системы MS-DOS $(lnk)$(f1);, которая
транслируется в "link/CP:1/I test1; в данном примере).
Если файл $(f1).OBJ не существует, то средство MAKE
останавливает обработку и выводит сообщение об ошибке;
- Файл описания, может содержать любую команду операционной
системы MS-DOS. В конце примера показано, как по команде
DEL$(f1).obj файл $(f1).obj (который транслируется в
/test1.obj) должен быть удален, но только если процесс ре-
дактирования связей был успешным.
Средство MAKE способно отреагировать на коды ошибок, возвра-
щаемые командами операционной системы MS-DOS в файле описания.
Например, если макроассемблер MASM выдал код возврата отличный от
"0" (в данном примере $(msm) $(f1).asm;), средство MAKE остановит
обработку файла описания в этой точке и выведет на экран сообще-
ние об ошибке.
Если макроассемблер успешно проводит трансляцию данного фай-
ла, однако редактор связей LINK возвратил ошибку, то команда уда-
ления объектного файла (DEL$(f1).obj) не будет обработана.
Средство MAKE является отличным средством для разработки
- П-9 -
проектов программ, особенно больших программных проектов. Файл
описания средства MAKE может содержать правила для многочисленных
исходных файлов, а также объектных файлов; кроме того, он может
описать использование нескольких различных ассемблеров, компиля-
торов, редакторов связей и других средств, а также и нескольких
примеров с одинаковыми средствами.
В случае создания резервных копий или архивизации всех фай-
лов больших проектов файл описания средства MAKE может быть также
помещен в архив с тем, чтобы в случае перепостроения проекта его
легко можно было осуществить простым выполнением средства MAKE и
указанием файла описания.
Использование шаблонов для создания .COM- и .EXE - программ
Листинги A-5, A-6 и A-7 могут оказаться полезными в началь-
ной стадии разработки Вами программ.
Листинг A-5 показывает формат для .EXE-программ с промежут-
ками для записи Вашего текста программы.
Листинг A-6 показывает формат для .COM- файлов.
Листинг A-7 содержит некоторые макрокоманды, которые могут
оказаться полезными при написании или .EXE-, или .COM - прог-
рамм. Некоторые макрокоманды могут быть или встроены в исходный