mirror of
https://github.com/microsoft/MS-DOS.git
synced 2024-11-29 17:15:47 +00:00
813 lines
27 KiB
Plaintext
813 lines
27 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
MS-DOS 2.0
|
|||
|
|
|||
|
Utility Extensions
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The following notation is used below:
|
|||
|
|
|||
|
[item] item is optional.
|
|||
|
item* item is repeated 0 or more times.
|
|||
|
item+ item is repeated 1 or more times.
|
|||
|
{item1 | item2}
|
|||
|
item1 is present or item 2 is present but
|
|||
|
not both.
|
|||
|
<object> indicates a syntactic variable.
|
|||
|
|
|||
|
|
|||
|
COMMAND invokation
|
|||
|
|
|||
|
COMMAND [[<drive>:]<path>] [<cttydev>] [-D] [-P] [-C <string>]
|
|||
|
|
|||
|
-P If present COMMAND will be permanent, otherwise
|
|||
|
this is a transient command.
|
|||
|
|
|||
|
-D If present COMMAND will not prompt for DATE and
|
|||
|
TIME when it comes up.
|
|||
|
|
|||
|
d: Specifies device where command will look for
|
|||
|
COMMAND.COM current default drive if absent.
|
|||
|
|
|||
|
<Path> Specifies a directory on device d: root
|
|||
|
directory if absent.
|
|||
|
|
|||
|
<cttydev> Name of the CTTY device. /DEV/CON if absent
|
|||
|
and command is permanent. The /DEV/ may be left
|
|||
|
off if AVAILDEV is TRUE (see sysinit doc).
|
|||
|
|
|||
|
-C <string> If present -C must be the last switch.
|
|||
|
This causes COMMAND to try to execute the string
|
|||
|
as if the user had typed it at the standard input.
|
|||
|
COMMAND executes this single command string and
|
|||
|
then exits. If the -P switch is present it is
|
|||
|
ignored (can't have a single command, permanent
|
|||
|
COMMAND). NOTE: ALL of the text on the command
|
|||
|
line after the -C is just passed on. It is not
|
|||
|
processed for more arguments, this is why -C must
|
|||
|
be last.
|
|||
|
|
|||
|
COMMAND extensions
|
|||
|
|
|||
|
IF <condition> <command>
|
|||
|
|
|||
|
where <condition> is one of the following:
|
|||
|
|
|||
|
ERRORLEVEL <number>
|
|||
|
true if and only if the previous program EXECed by
|
|||
|
COMMAND had an exit code of <number> or higher.
|
|||
|
|
|||
|
<string1> == <string2>
|
|||
|
true if and only if <string1> and <string2> are
|
|||
|
identical after parameter substitution. Strings
|
|||
|
may not have embedded delimiters.
|
|||
|
|
|||
|
EXIST <filename>
|
|||
|
true if and only if <filename> exists.
|
|||
|
|
|||
|
NOT <condition>
|
|||
|
true if and only if <condition> is false.
|
|||
|
|
|||
|
The IF statement allows conditional execution of commands.
|
|||
|
When the <condition> is true, then the <command> is
|
|||
|
executed otherwise, the <command> is skipped.
|
|||
|
|
|||
|
Examples:
|
|||
|
|
|||
|
IF not exist /tmp/foo ECHO Can't find file /tmp/foo
|
|||
|
|
|||
|
IF $1x == x ECHO Need at least one parameter
|
|||
|
|
|||
|
IF NOT ERRORLEVEL 3 LINK $1,,;
|
|||
|
|
|||
|
|
|||
|
FOR %%<c> IN <set> DO <command>
|
|||
|
|
|||
|
<c> can be any character but 0,1,2,3,..,9 (so there is no
|
|||
|
confusion with the %0 - %9 batch parameters).
|
|||
|
|
|||
|
<set> is ( <item>* )
|
|||
|
|
|||
|
The %%<c> variable is sequentially set to each member of
|
|||
|
<set> and then <command> is evaluated. If a member of
|
|||
|
<set> is an expression involving * and/or ?, then the
|
|||
|
variable is set to each matching pattern from disk. In
|
|||
|
this case only one such <item> may be in the set, any
|
|||
|
<item>s after the first are ignored.
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
FOR %%f IN ( *.ASM ) DO MASM %%f;
|
|||
|
|
|||
|
for %%f in (FOO BAR BLECH) do REM %%f to you
|
|||
|
|
|||
|
NOTE: The '%%' is needed so that after Batch parameter
|
|||
|
(%0 - %9) processing is done, there is one '%' left.
|
|||
|
If only '%f' were there, the batch parameter processor
|
|||
|
would see the '%' then look at 'f', decide that '%f'
|
|||
|
was an error (bad parameter reference) and throw out
|
|||
|
the '%f' so that FOR would never see it. If the FOR
|
|||
|
is NOT in a batch file, then only ONE '%' should be
|
|||
|
used.
|
|||
|
|
|||
|
|
|||
|
SHIFT
|
|||
|
|
|||
|
Currently, command files are limited to handling 10
|
|||
|
parameters: %0 through %9. To allow access to more than
|
|||
|
these, the command SHIFT will perform a 'pop' of the
|
|||
|
command line parameters:
|
|||
|
|
|||
|
if %0 = "foo"
|
|||
|
%1 = "bar"
|
|||
|
%2 = "blech"
|
|||
|
%3...%9 are empty
|
|||
|
|
|||
|
then a SHIFT will result in the following:
|
|||
|
|
|||
|
%0 = "bar"
|
|||
|
%1 = "blech"
|
|||
|
%2...%9 are empty
|
|||
|
|
|||
|
If there are more than 10 parameters given on a command
|
|||
|
line, then the those that appear after the 10th (%9) will
|
|||
|
be shifted one at a time into %9 by successive shifts.
|
|||
|
|
|||
|
:<label>
|
|||
|
|
|||
|
This is essentially a no-op. It defines a label in the
|
|||
|
batch file for a subsequent GOTO. It may also be used to
|
|||
|
put comment lines in batch files since all lines that
|
|||
|
start with ':' are ignored.
|
|||
|
|
|||
|
GOTO <label>
|
|||
|
|
|||
|
Causes commands to be taken from the batch file beginning
|
|||
|
with the line after the <label> definition. If no label
|
|||
|
has been defined, the current batch file will terminate.
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
:foo
|
|||
|
REM looping...
|
|||
|
GOTO foo
|
|||
|
|
|||
|
will produce a infinite sequence of messages:
|
|||
|
'REM looping...'
|
|||
|
|
|||
|
NOTE: Labels are case insensitive, :FOO == :foo == :Foo
|
|||
|
|
|||
|
|
|||
|
ECHO [{ON | OFF | <message>}]
|
|||
|
|
|||
|
Normally, commands in a BATCH file are echoed onto the
|
|||
|
standard output as they are seen by COMMAND. ECHO OFF
|
|||
|
turns off this feature. ECHO ON turns echoing back on.
|
|||
|
If ON or OFF is not specified and there is text following
|
|||
|
the command, that text (a message) is echoed to standard
|
|||
|
output. If there are no arguments at all, the current
|
|||
|
setting of echo (on or off) is echoed to the standard
|
|||
|
output in the form:
|
|||
|
|
|||
|
ECHO is xxx
|
|||
|
|
|||
|
Where xxx is "on" or "off".
|
|||
|
|
|||
|
Redirection of standard input/standard output.
|
|||
|
|
|||
|
Programs that read from the keyboard and write to the
|
|||
|
screen are said to be doing I/O to the standard input and
|
|||
|
standard output. Using any of the following will result
|
|||
|
in I/O to these standard devices:
|
|||
|
|
|||
|
Writing to default handles 1 / read from default
|
|||
|
handle 0.
|
|||
|
|
|||
|
Doing byte I/O using system calls 1, 2, 6-12.
|
|||
|
|
|||
|
These standard devices may be redirected to/from files by
|
|||
|
the following in command line arguments:
|
|||
|
|
|||
|
> <filename>
|
|||
|
causes <filename> to be created (or truncated to
|
|||
|
zero length) and then assigns standard output to
|
|||
|
that file. All output from the command will be
|
|||
|
placed in the file.
|
|||
|
|
|||
|
< <filename>
|
|||
|
causes standard input to be assigned to
|
|||
|
<filename>. All input to the command will come
|
|||
|
from this file. If end-of-file is reached, then
|
|||
|
system calls 1, 2, 6-12 will return ^Z , while
|
|||
|
reading from handle 0 will return zero characters.
|
|||
|
|
|||
|
>> <filename>
|
|||
|
causes <filename> to be opened (created if
|
|||
|
necessary) and positions the write pointer at the
|
|||
|
end of the file so that all output will be
|
|||
|
appended to the file.
|
|||
|
|
|||
|
Note that the above will not appear in the command line
|
|||
|
that the program being invoked sees.
|
|||
|
|
|||
|
Examples:
|
|||
|
|
|||
|
DIR *.ASM > FOO.LST
|
|||
|
Sends the output of the dir command to the file
|
|||
|
FOO.LST.
|
|||
|
|
|||
|
|
|||
|
FOR %0 IN (*.ASM) DO MASM %0; >>ERRS.LST
|
|||
|
Sends all error output from assembling every .ASM file
|
|||
|
into the file ERRS.LST.
|
|||
|
|
|||
|
Piping of standard I/O
|
|||
|
|
|||
|
It is often useful for the output of one program to be
|
|||
|
sent as input to another program. A typical case is a
|
|||
|
program that produces columnar output that must later be
|
|||
|
sorted.
|
|||
|
|
|||
|
The pipe feature allows this to occur naturally is the
|
|||
|
programs do all of their I/O to the standard devices.
|
|||
|
|
|||
|
For example, if we had a program SORT that read all of
|
|||
|
it's standard input, sorted it and then wrote it to the
|
|||
|
standard output, then we could get a sorted directory
|
|||
|
listing as follows:
|
|||
|
|
|||
|
DIR | SORT
|
|||
|
|
|||
|
The | would cause all standard output generated by the
|
|||
|
left-hand command to be sent to the standard input of the
|
|||
|
right-hand command.
|
|||
|
|
|||
|
If we wanted the sorted directory to be sent to a file, we
|
|||
|
type:
|
|||
|
|
|||
|
DIR | SORT >FILE
|
|||
|
|
|||
|
and away it goes.
|
|||
|
|
|||
|
The piping feature is implemented as sequential execution
|
|||
|
of the procedures with redirection to and from temporary
|
|||
|
files. In the example above, the following would be an
|
|||
|
exact equivalent:
|
|||
|
|
|||
|
DIR >/tmp/std1
|
|||
|
SORT </tmp/std1 >FILE
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The pipe is not a real pipe but rather a quasi-pipe
|
|||
|
that uses temporary files to hold the input and output as
|
|||
|
it sequentially executes the elements of the pipe. These
|
|||
|
files are created in the current directory, of the current
|
|||
|
drive and have the form %PIPEx%.$$$, where x will be 1 or
|
|||
|
2. This means that any program that runs in the pipe must
|
|||
|
be sure to restore the current directory and drive if it
|
|||
|
has changed them, otherwise the pipe files will be lost.
|
|||
|
|
|||
|
|
|||
|
VER
|
|||
|
Prints DOS version number.
|
|||
|
|
|||
|
VOL [<drive>:]
|
|||
|
Prints the volume ID of the disk in drive d:. No d: does
|
|||
|
default drive.
|
|||
|
|
|||
|
CHDIR [{<drive>: | <path>}]
|
|||
|
Change directory, or print current. directory.If no
|
|||
|
argument is given, the current directory on the default
|
|||
|
drive is printed. If d: alone is given, the durrent
|
|||
|
directory of drive d is printed. Otherwise the current
|
|||
|
directory is set to path.
|
|||
|
|
|||
|
NOTE:"CD" is accepted as an abbreviation.
|
|||
|
|
|||
|
MKDIR <path> - Make a directory.
|
|||
|
"MD" is accepted as an abbreviation.
|
|||
|
|
|||
|
RMDIR <path> - Remove a directory.
|
|||
|
"RD" is accepted as an abbreviation.
|
|||
|
The directory must be empty except for
|
|||
|
'.' and '..'.
|
|||
|
|
|||
|
<path> - A standard XENIX style path with the optional
|
|||
|
addition of a drive spec:
|
|||
|
|
|||
|
A:/FOO/BAR Full path
|
|||
|
/FOO/BAR Full path, current drive
|
|||
|
FOO/BAR Current dir relative
|
|||
|
A:FOO/BAR " " "
|
|||
|
|
|||
|
VERIFY [{ON | OFF}]
|
|||
|
Select/deselect verify after write mode. This supliments
|
|||
|
the V switch to the COPY command. Once turned ON, it
|
|||
|
stays on until some program changes it (via the set verify
|
|||
|
system call) or the VERIFY OFF command is given. If no
|
|||
|
argument is given, the current setting of VERIFY is
|
|||
|
printed to the standard output in the form:
|
|||
|
|
|||
|
VERIFY is xxx
|
|||
|
|
|||
|
Where xxx is "on" or "off".
|
|||
|
|
|||
|
PATH [<path>{;<path>}*]
|
|||
|
Set command search paths. This allows users to set
|
|||
|
directories that should be searched for external commands
|
|||
|
after a search of the current directory is made. The
|
|||
|
default value is /bin. In addition there are two special
|
|||
|
cases: PATH all by itself with no arguments will print
|
|||
|
the current path. Path with the single argument ';' (ie.
|
|||
|
"PATH ;") will set the NUL path (no directories other than
|
|||
|
the current one searched). If no argument is given, the
|
|||
|
current value of PATH is printed to the standard output in
|
|||
|
the form:
|
|||
|
|
|||
|
PATH=text of path
|
|||
|
or
|
|||
|
No path
|
|||
|
|
|||
|
NOTE: On IBM systems, the default value of path is No
|
|||
|
path.
|
|||
|
|
|||
|
EXIT
|
|||
|
For COMMANDs run without the P switch, this causes COMMAND
|
|||
|
to return. For a normal COMMAND it causes a return to
|
|||
|
itself.
|
|||
|
|
|||
|
BREAK [{ON | OFF}]
|
|||
|
Like in CONFIG.SYS, "BREAK ON" turns on the Control C
|
|||
|
check in the DOS function dispatcher. "BREAK OFF" turns
|
|||
|
it off. If no argument is given the setting of BREAK is
|
|||
|
printed to the standard output in the form:
|
|||
|
|
|||
|
BREAK is xxx
|
|||
|
|
|||
|
Where xxx is "on" or "off".
|
|||
|
|
|||
|
PROMPT [<prompt-text>]
|
|||
|
Set the system prompt. MS-DOS prompts are now user
|
|||
|
settable, all of the text on the command line is taken to
|
|||
|
be the new prompt. If no text is present the prompt is
|
|||
|
set to the default prompt. There are meta strings for
|
|||
|
various special prompts. These are of the form '$c' where
|
|||
|
c is one of the following:
|
|||
|
|
|||
|
$ - The '$' character.
|
|||
|
t - The time.
|
|||
|
d - The date.
|
|||
|
p - The current directory of the default drive.
|
|||
|
v - The version number.
|
|||
|
n - The default drive.
|
|||
|
g - The '>' character.
|
|||
|
l - The '<' character.
|
|||
|
b - The '|' character.
|
|||
|
s - The ' ' character.
|
|||
|
e - The ESC character.
|
|||
|
_ - A CR LF sequence.
|
|||
|
|
|||
|
EXAMPLE:
|
|||
|
PROMPT $n:
|
|||
|
Would set the normal MS-DOS prompt.
|
|||
|
PROMPT $n>
|
|||
|
Would det the normal PC-DOS prompt.
|
|||
|
PROMPT Time = $t$_Date = $d
|
|||
|
Would set a two line prompt which printed
|
|||
|
Time = (current time)
|
|||
|
Date = (current date)
|
|||
|
|
|||
|
NOTE: For '$c' sequences, lower case = upper case, and
|
|||
|
any character not on the above list is mapped to
|
|||
|
nothing.
|
|||
|
|
|||
|
SET (ENVNAME)=(ENVTEXT)
|
|||
|
Set environment strings. This command inserts strings in
|
|||
|
COMMAND's environment. For instance:
|
|||
|
|
|||
|
SET PROMPT=$n>
|
|||
|
Duplicates the function of the PROMPT command.
|
|||
|
SET PATH=p1;p2
|
|||
|
Duplicates the function of the PATH command.
|
|||
|
SET foo=bar
|
|||
|
Puts the string FOO=bar into the environment (note the
|
|||
|
case mapping of (ENVNAME)).
|
|||
|
|
|||
|
NOTE: Environments are very flexible, almost anything can
|
|||
|
be put into the environment with the SET command; the
|
|||
|
only requirement is that a single '=' be present in
|
|||
|
the string.
|
|||
|
|
|||
|
CLS
|
|||
|
Clear screen, causes the ANSI escape sequence ESC[2J to be
|
|||
|
sent to standard output.
|
|||
|
|
|||
|
CTTY /DEV/dev - Change console TTY. For instance:
|
|||
|
|
|||
|
CTTY /DEV/AUX
|
|||
|
|
|||
|
Would move all command I/O to the AUX port.
|
|||
|
|
|||
|
CTTY /DEV/CON
|
|||
|
|
|||
|
Would move it back to the normal device. The
|
|||
|
/dev/ prefix may be left off if AVAILDEV is
|
|||
|
TRUE (see configuration-file doc).
|
|||
|
|
|||
|
COMMAND internal commands take path arguments.
|
|||
|
|
|||
|
DIR <path>
|
|||
|
|
|||
|
COPY <path> <path>
|
|||
|
|
|||
|
DEL(ERASE) <path>
|
|||
|
If the path is a dir, all files in that dir
|
|||
|
are deleted.
|
|||
|
NOTE: The "Are you sure (Y/N)" prompt for DEL and
|
|||
|
ERASE now uses buffered standard input, so
|
|||
|
users must type a return after their answer.
|
|||
|
This gives them the chance to correct if they
|
|||
|
type 'y' by mistake.
|
|||
|
|
|||
|
TYPE <path> (must specify a file)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
FILCOM - compare two files
|
|||
|
|
|||
|
The FILCOM program compares two files and produces a log
|
|||
|
of differences between them. The comparison may be made
|
|||
|
in two fashions; either on a line-by-line basis, or on a
|
|||
|
byte-by-byte basis.
|
|||
|
|
|||
|
The line-by-line compare will isolate blocks of lines that
|
|||
|
are different between the two files and will print the
|
|||
|
blocks from each file. The line-by-line compare is the
|
|||
|
default when neither of the two files being compared has
|
|||
|
the extension .EXE, .COM, or .OBJ.
|
|||
|
|
|||
|
The byte-by-byte compare will display exactly which bytes
|
|||
|
are different between the two files. If either file being
|
|||
|
compared has extension .EXE, .COM, or .OBJ then the files
|
|||
|
will be compared in byte-by-byte mode.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RECOVER - recover files from a trashed disk.
|
|||
|
|
|||
|
If a sector on a disk goes bad, you can recover either the
|
|||
|
file that contained that sector (without the sector) or
|
|||
|
the entire disk (if the bad sector was in the directory).
|
|||
|
|
|||
|
To recover a particular file:
|
|||
|
|
|||
|
RECOVER <file-to-recover>
|
|||
|
|
|||
|
This will cause the file to be read sector by sector and
|
|||
|
to be have the bad sector skipped. Note that this implies
|
|||
|
that the allocation unit containing the bad sector will be
|
|||
|
read as much as possible. When such a bad sector is
|
|||
|
found, its containing allocation unit is marked as bad,
|
|||
|
thus preventing future allocations of that bad sector.
|
|||
|
|
|||
|
To recover a particular disk:
|
|||
|
|
|||
|
RECOVER <drive-letter>:
|
|||
|
|
|||
|
This will cause a scan to be made of the drive's FAT for
|
|||
|
chains of allocation units (files). A new root directory
|
|||
|
is then written that has entries of the form FILEnnnn.
|
|||
|
Each FILEnnnn will point to the head of one of the
|
|||
|
allocation unit chains.
|
|||
|
|
|||
|
If there are more chains than directory entries in the
|
|||
|
root, RECOVER prints a message and leaves the un-RECOVERED
|
|||
|
chains in the FAT so that RECOVER can be run again once
|
|||
|
some room has been made in the ROOT.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
DEBUG ON MS-DOS 2.0
|
|||
|
|
|||
|
|
|||
|
When 2.0 DEBUG is invoked it sets up a program header
|
|||
|
atoffset 0 in its program work area. On previous versions it
|
|||
|
was OK to overwrite this header with impunity: this is true
|
|||
|
of the default header set up if no <filespec> is given to
|
|||
|
DEBUG. If DEBUGging a .COM or .EXE file, however, you must be
|
|||
|
careful not to tamper with the header of the program below
|
|||
|
address 5CH, to do this will probably result in a crash. It
|
|||
|
is also important that an attempt is not made to "restart" a
|
|||
|
program once the "program terminated normally" message is
|
|||
|
given. The program must be reloaded with the N and L commands
|
|||
|
in order for it to run properly.
|
|||
|
|
|||
|
NEW FEATURES
|
|||
|
|
|||
|
The A (Assemble) Command
|
|||
|
|
|||
|
FORMAT: A [<address>]
|
|||
|
|
|||
|
PURPOSE: To assemble 8086/8087/8088 mnemonics directly into
|
|||
|
memory.
|
|||
|
|
|||
|
o If a syntax error is encountered, DEBUG responds with
|
|||
|
|
|||
|
^ Error
|
|||
|
|
|||
|
and redisplays the current assembly address.
|
|||
|
|
|||
|
o All numeric values are hexadecimal and may be entered
|
|||
|
as 1-4 characters.
|
|||
|
|
|||
|
o Prefix mnemonics must be entered in front of the opcode
|
|||
|
to which they refer. They may also be entered on a
|
|||
|
separate line.
|
|||
|
|
|||
|
o The segment override mnemonics are CS:, DS:, ES:, and
|
|||
|
SS:
|
|||
|
|
|||
|
o String manipulation mnemonics must explictly state the
|
|||
|
string size. For example, the MOVSW must be used to
|
|||
|
move word strings and MOVSB must be used to move byte
|
|||
|
strings.
|
|||
|
|
|||
|
|
|||
|
o The mnemonic for the far return is RETF.
|
|||
|
|
|||
|
o The assembler will automatically assemble short, near
|
|||
|
or far jumps and calls depending on byte displacement
|
|||
|
to the destination address. These may be overridden
|
|||
|
with the NEAR or FAR prefix. For example:
|
|||
|
|
|||
|
0100:0500 JMP 502 ; a 2 byte short jump
|
|||
|
0100:0502 JMP NEAR 505 ; a 3 byte near jump
|
|||
|
0100:0505 JMP FAR 50A ; a 5 byte far jump
|
|||
|
|
|||
|
The NEAR prefix may be abbreviated to NE but the FAR
|
|||
|
prefix cannot be abbreviated.
|
|||
|
|
|||
|
o DEBUG cannot tell whether some operands refer to a word
|
|||
|
memory location or a byte memroy location. In this case
|
|||
|
the data type must be explicity stated with the prefix
|
|||
|
"WORD PTR" or "BYTE PTR". DEBUG will also except the
|
|||
|
abbreviations "WO" and "BY". For example:
|
|||
|
|
|||
|
NEG BYTE PTR [128]
|
|||
|
DEC WO [SI]
|
|||
|
|
|||
|
o DEBUG also cannot tell whether an operand refers to a
|
|||
|
memory location or to an immediate operand. DEBUG uses
|
|||
|
the common convention that operands enclosed in square
|
|||
|
brackets refer to memory. For example:
|
|||
|
|
|||
|
MOV AX,21 ;Load AX with 21H
|
|||
|
MOV AX,[21] ;Load AX with the contents
|
|||
|
;of memory location 21H
|
|||
|
|
|||
|
o Two popular pseudo-instructions have also been included.
|
|||
|
The DB opcode will assemble byte values directly into
|
|||
|
memory. The DW opcode will assemble word values directly
|
|||
|
into memory. For example:
|
|||
|
|
|||
|
DB 1,2,3,4,"THIS IS AN EXAMPLE"
|
|||
|
DB 'THIS IS A QUOTE: "'
|
|||
|
DB "THIS IS A QUOTE: '"
|
|||
|
|
|||
|
DW 1000,2000,3000,"BACH"
|
|||
|
|
|||
|
|
|||
|
o All forms of the register indirect commands are supported.
|
|||
|
For example:
|
|||
|
|
|||
|
ADD BX,34[BP+2].[SI-1]
|
|||
|
POP [BP+DI]
|
|||
|
PUSH [SI]
|
|||
|
|
|||
|
o All opcode synonyms are supported, For example:
|
|||
|
|
|||
|
LOOPZ 100
|
|||
|
LOOPE 100
|
|||
|
|
|||
|
JA 200
|
|||
|
JNBE 200
|
|||
|
|
|||
|
o For 8087 opcodes the WAIT or FWAIT prefix must be
|
|||
|
explictly specified. For example:
|
|||
|
|
|||
|
FWAIT FADD ST,ST(3) ; This lines will assemble
|
|||
|
; a FWAIT prefix
|
|||
|
|
|||
|
FLD TBYTE PTR [BX] ; This line will not
|
|||
|
|
|||
|
|
|||
|
|
|||
|
FORMAT enhancements
|
|||
|
|
|||
|
FORMAT will now install volume id's during the format
|
|||
|
process. DIR and CHKDSK will display these volume id's.
|
|||
|
|
|||
|
User programs can read the volume id on a particular drive
|
|||
|
by doing a 'search next' with the volume id attribute. It
|
|||
|
is impossible, using normal DOS calls, to delete a volume
|
|||
|
id or to create another one. The only way to create a
|
|||
|
volume id is to reformat the disk.
|
|||
|
|
|||
|
NOTE: On IBM systems the V switch must be given to FORMAT
|
|||
|
to have it do Volume IDs.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
CHKDSK FOR MS-DOS 2.0
|
|||
|
|
|||
|
|
|||
|
MS-DOS 2.0 has a tree structured directory scheme which
|
|||
|
did not exist on previous versions of MS-DOS. As a result
|
|||
|
CHKDSK is a much more complex program than in previous
|
|||
|
versions since it must perform a tree traversal to find all of
|
|||
|
the files on a given disk. It employes a depth first
|
|||
|
traversal in order to accomplish this.
|
|||
|
|
|||
|
Previous versions of CHKDSK automatically "fixed"
|
|||
|
disks (regardless of whether it was appropriate). CHKDSK 2.00
|
|||
|
run normally will not alter the disk in any way, it simply
|
|||
|
reports on any inconsistencies found. To actually "fix" a
|
|||
|
disk CHKDSK must be run with the F switch (Fix). This allows
|
|||
|
you to perhaps take some alternate (to CHKDSK repairs) action
|
|||
|
before letting CHKDSK loose on your disk.
|
|||
|
|
|||
|
CHKDSK 2.00 will report on non-contiguous allocation units
|
|||
|
(extents) for specified files. This is handy for gaging how
|
|||
|
"fragmented" a disk volume has become. This is done by simply
|
|||
|
giving a filespec:
|
|||
|
|
|||
|
CHKDSK B:*.*
|
|||
|
|
|||
|
This would report extents for all files in the current
|
|||
|
directory for drive B after doing a normal consistency check
|
|||
|
on drive B. Files which have many extents can be copied and
|
|||
|
renamed to restore them to a contiguous state, thus improving
|
|||
|
I/O performance to the files.
|
|||
|
|
|||
|
Previous versions of CHKDSK would simply free
|
|||
|
allocation units which were marked as used, but were not
|
|||
|
actually part of any file. CHKDSK 2.00 will recover these
|
|||
|
"orphan" allocation units if specified. If orphan allocation
|
|||
|
units are found, CHKDSK prompts for free or recover. Free
|
|||
|
just frees the orphans as previous versions did, recover will
|
|||
|
employ allocation chain analysis to create "orphan files" in
|
|||
|
the root directory of the disk. These files will have the
|
|||
|
form "%ORPHAN%.l$$" where l will take on some ASCII value
|
|||
|
greater than '@'. These files may then be inspected to see if
|
|||
|
valuable data was contained in them. If there is not enough
|
|||
|
room to make all of the "orphan" files, CHKDSK leaves the
|
|||
|
unrecovered chains in the FAT so that CHKDSK can be run again
|
|||
|
(once some entries in the ROOT have been deleted). NOTE:
|
|||
|
Making ORPHAN files is a SLOW process.
|
|||
|
|
|||
|
Verbose mode. CHKDSK 2.00 may be run with the V switch
|
|||
|
which causes a trace of the files and directories being
|
|||
|
processed to be printed as CHKDSK runs.
|
|||
|
|
|||
|
|
|||
|
FILTERS FOR MS-DOS 2.0
|
|||
|
|
|||
|
A filter is a utility that reads from standard input,
|
|||
|
modifies the information in some way, then writes the result
|
|||
|
to standard output. In this way the data is said to have been
|
|||
|
"filtered" by the program. Since different filters can be
|
|||
|
piped together in many different ways a few filters can take
|
|||
|
the place of a large number of specific purpose programs. The
|
|||
|
following describes the filters that are provided with MS-DOS
|
|||
|
2.0:
|
|||
|
|
|||
|
CIPHER <key word>
|
|||
|
|
|||
|
Cipher reads a program from standard input, encrypts it
|
|||
|
using the key word provided by the user, then writes the
|
|||
|
result to standard output. To decrypt the file simply run
|
|||
|
CIPHER again using the same keyword. For example:
|
|||
|
|
|||
|
A>CIPHER MYSTERY <NSA.CIA >SECRET.FIL
|
|||
|
|
|||
|
This command line will read file NSA.CIA, encrypt it using
|
|||
|
the key word "MYSTERY", then write the result to file
|
|||
|
SECRET.FIL To view the original file the following command
|
|||
|
line could be used:
|
|||
|
|
|||
|
A>CIPHER MYSTERY <SECRET.FIL
|
|||
|
|
|||
|
This will read file SECRET.FIL, decrypt the file using the
|
|||
|
key word "MYSTERY", then write the result to standard output,
|
|||
|
which in this case is the console.
|
|||
|
|
|||
|
FGREP
|
|||
|
|
|||
|
This filter takes as arguments a string and optionally a
|
|||
|
series of file names. It will send to standard output all
|
|||
|
lines from the files specified in the command line that
|
|||
|
contain the string.
|
|||
|
|
|||
|
If no files are specified FGREP will take the input from
|
|||
|
standard in. The format for the command line invocation of
|
|||
|
FGREP is:
|
|||
|
|
|||
|
FGREP [<option>] <string> <filename>*
|
|||
|
|
|||
|
The options available are:
|
|||
|
|
|||
|
/v Will cause FGREP to output all lines NOT
|
|||
|
containing the specified string.
|
|||
|
|
|||
|
/c Will cause FGREP to only print the count of
|
|||
|
lines matched in each of the files.
|
|||
|
|
|||
|
/n Each line matched is preceded by its relative
|
|||
|
line number in the file.
|
|||
|
|
|||
|
The string argument should be enclosed in double quotes.
|
|||
|
Two double quotes in succession are taken as a single double
|
|||
|
quote. So,
|
|||
|
|
|||
|
A>FGREP "Fool""s Paradise" book1.txt book2.txt bible
|
|||
|
|
|||
|
will output all lines from the book1.txt, book2.txt and bible
|
|||
|
(in that order that contain the string: Fool"s Paradise .
|
|||
|
And,
|
|||
|
|
|||
|
A>dir b: | fgrep /v "DAT"
|
|||
|
|
|||
|
will output all names of the files in disk b: which do not
|
|||
|
contain the string DAT .
|
|||
|
|
|||
|
MORE
|
|||
|
|
|||
|
The filter MORE reads from standard input, sends one
|
|||
|
screen full of information to standard output and then pauses
|
|||
|
with message:
|
|||
|
|
|||
|
-- More --
|
|||
|
|
|||
|
Pressing the RETURN key will cause another screen full of
|
|||
|
information to be written to standard output. This process
|
|||
|
continues until all the input data is read.
|
|||
|
|
|||
|
SORT [/R] [/+n]
|
|||
|
|
|||
|
Sort reads from standard input, sorts the data, the writes
|
|||
|
the information to standard output. The sort is done using
|
|||
|
the ASCII collating sequence. There are switches which allow
|
|||
|
the user to select various options:
|
|||
|
|
|||
|
R - Reverse the sort, that is make "Z" come before "A"
|
|||
|
|
|||
|
+n - Sort starting with column "n" where n is some integer.
|
|||
|
The default is start the comparisons with column 1,
|
|||
|
this switch allows the user to start in any column.
|
|||
|
|
|||
|
example:
|
|||
|
|
|||
|
A>SORT /R <UNSORT.TXT >SORT.TXT
|
|||
|
|
|||
|
This command line will read the file UNSORT.TXT, do a reverse
|
|||
|
sort, then write the output to file SORT.TXT
|
|||
|
|
|||
|
A>DIR | SORT /+14
|
|||
|
|
|||
|
This command line will cause the output of the directory
|
|||
|
command to be piped to the sort filter, the sort filter will
|
|||
|
sort starting with column 14 (This is the column the file size
|
|||
|
starts), then send the output to the console. Thus a
|
|||
|
directory sorted by file size will be the result. To get real
|
|||
|
fancy:
|
|||
|
|
|||
|
A>DIR | SORT /+14 | MORE
|
|||
|
|
|||
|
will do the same thing except that MORE will give you a chance
|
|||
|
to read the directory before it scrolls off the screen.
|
|||
|
|