You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
258 lines
10 KiB
258 lines
10 KiB
;/*
|
|
; * Microsoft Confidential
|
|
; * Copyright (C) Microsoft Corporation 1991
|
|
; * All Rights Reserved.
|
|
; */
|
|
; SCCSID = @(#)comequ.asm 1.1 85/05/14
|
|
; SCCSID = @(#)comequ.asm 1.1 85/05/14
|
|
;*************************************
|
|
; COMMAND EQUs which are not switch dependant
|
|
|
|
include curdir.inc ; to get DIRSTRLEN
|
|
; Note dossym.inc must already have been included!
|
|
|
|
EMGDEBUG = FALSE
|
|
|
|
SYM EQU ">"
|
|
|
|
ifdef JAPAN
|
|
LINESPERPAGE EQU 24
|
|
else ; if Not JAPAN
|
|
LINESPERPAGE EQU 25 ;AC000; default lines per page
|
|
endif
|
|
NORMPERLIN EQU 1
|
|
WIDEPERLIN EQU 5
|
|
COMBUFLEN EQU 128 ; Length of commmand buffer
|
|
EXECPATHLEN EQU 273 ; MAX_PATH+13 (expanded for ntvdm)
|
|
BatLen EQU 32 ; buffer for batch files
|
|
YES_ECHO EQU 1 ; echo line
|
|
NO_ECHO EQU 0 ; don't echo line
|
|
No_Echo_Char EQU "@" ; don't echo line if this is first char
|
|
call_in_progress EQU 1 ; indicate we're in the CALL command
|
|
length_call EQU 4 ; length of CALL
|
|
max_nest EQU 10 ; max # levels of batch nesting allowed
|
|
fail_allowed EQU 00001000b ; critical error
|
|
retry_allowed EQU 00010000b ; critical error
|
|
Ignore_allowed EQU 00100000b ; critical error
|
|
nullcommand EQU 1 ; no command on command line
|
|
end_of_line EQU -1 ;AN000; end of line return from parser
|
|
end_of_line_out EQU 0 ;AN000; end of line for output
|
|
end_of_line_in EQU 0dh ;AN000; end of line for input
|
|
result_number EQU 1 ;AN000; number returned from parser
|
|
result_string EQU 3 ;AN000; string returned from parser
|
|
result_filespec EQU 5 ;AN000; filespec returned from parser
|
|
result_drive EQU 6 ;AN000; drive returned from parser
|
|
result_date EQU 7 ;AN000; date returned from parser
|
|
result_time EQU 8 ;AN000; time returned from parser
|
|
result_no_error EQU 0 ;AN000; no error returned from parser
|
|
no_cont_flag EQU 0 ;AN000; no control flags for message
|
|
util_msg_class EQU -1 ;AN000; message class for utility
|
|
ext_msg_class EQU 1 ;AN000; message class for extended error
|
|
parse_msg_class EQU 2 ;AN000; message class for parse error
|
|
crit_msg_class EQU 3 ;AN000; message class for critical error
|
|
ext_crlf_class EQU 081h ;AN054; message class for extended error with no CRLF
|
|
colon_char EQU ":" ;AN000; colon character
|
|
crt_ioctl_ln EQU 14 ;AN000; default length of data for display ioctl
|
|
text_mode EQU 1 ;AN000; text mode return from ioctl
|
|
get_generic EQU 07Fh ;AN000; generic ioctl - get device info
|
|
set_crit_dev EQU 0100H ;AN000; device attribute for critical error on I/0
|
|
mult_ansi EQU 01Ah ;AC064; multiplex for ansi.sys
|
|
mult_shell_get EQU 01902h ;AC065; multiplex for Shell - get next command
|
|
mult_shell_brk EQU 01903h ;AN000; multiplex for Shell - ^C batch check
|
|
shell_action equ 0ffh ;AN000; SHELL - return for taking SHELL specific action
|
|
bat_not_open EQU -1 ;AN000; batch handle will be set to this if not open
|
|
bat_open_handle EQU 19 ;AN000; handle will be in this position in JFN table
|
|
Ptr_seg_pos equ 7 ;AN000; Offset from start of message block for subst segment
|
|
Ptr_off_pos equ 5 ;AN000; Offset from start of message block for subst offset
|
|
Parm_off_pos equ word ptr 2 ;AN000; Offset from start of subst list for subst offset
|
|
parm_block_size equ 11 ;AN000; size of message subst block
|
|
blank equ " " ;AN000; blank character
|
|
no_subst equ 0 ;AN000; no substitutions for messages
|
|
one_subst equ 1 ;AN000; one substitution for messages
|
|
no_handle_out equ -1 ;AN000; use function 1 thru 12 for message retriever
|
|
res_subst equ 2 ;AN000; offset from start of message definition to number of subst
|
|
read_open_mode equ 0000000000000000b ;AN024; extended open mode for read
|
|
deny_write equ 0000000000100000b ; deny write sharing mode ;M031
|
|
deny_none equ 0000000001000000b ; deny none sharing mode ;Myyy
|
|
read_open_flag equ 0000000100000001b ;AN000; extended open flags for read
|
|
write_open_mode equ 0000000000000001b ;AN024; extended open mode for read
|
|
write_open_flag equ 0000000100000001b ;AN000; extended open flags for read
|
|
creat_open_flag equ 0000000100010010b ;AN000; extended open flags for read
|
|
capital_A equ 'A' ;AC000;
|
|
vbar equ '|' ;AC000;
|
|
labracket equ '<' ;AC000;
|
|
rabracket equ '>' ;AC000;
|
|
dollar equ '$' ;AC000;
|
|
lparen equ '(' ;AC000;
|
|
rparen equ ')' ;AC000;
|
|
nullrparen equ 29h ;AC000;
|
|
in_word equ 4e49h ;AC000; 'NI' ('IN' backwards)
|
|
do_word equ 4f44h ;AC000; 'OD' ('DO' backwards)
|
|
star equ '*' ;AC000;
|
|
plus_chr equ '+' ;AC000;
|
|
small_a equ 'a' ;AC000;
|
|
small_z equ 'z' ;AC000;
|
|
dot_chr equ '.' ;AC000;
|
|
tab_chr equ 9 ;AN032;
|
|
equal_chr equ '=' ;AN032;
|
|
semicolon equ ';' ;AN049;
|
|
dot_qmark equ 2e3fh ;AC000; '.?'
|
|
dot_colon equ 2e3ah ;AC000; '.:'
|
|
capital_n equ 0 ;AC000; result from Y/N call if N entered
|
|
capital_y equ 1 ;AC000; result from Y/N call if Y entered
|
|
AppendInstall equ 0B700H ;AN020; append install check
|
|
AppendDOS equ 0B702H ;AN020; append DOS version check
|
|
AppendGetState equ 0B706H ;AN020; append get current state
|
|
AppendSetState equ 0B707H ;AN020; append set current state
|
|
AppendTruename equ 0B711H ;AN042; Get file's real location for Batch
|
|
search_attr equ attr_read_only+attr_hidden+attr_directory ;AC042;
|
|
|
|
;*************************************
|
|
;* PARSE ERROR MESSAGES
|
|
;*************************************
|
|
|
|
MoreArgs_Ptr equ 1 ;AN000;"Too many parameters" message number
|
|
LessArgs_Ptr equ 2 ;AN000;"Required parameter missing" message number
|
|
BadSwt_Ptr equ 3 ;AN000;"Invalid switch" message number
|
|
BadParm_Ptr equ 10 ;AN000;"Invalid parameter" message number
|
|
|
|
;*************************************
|
|
;* EQUATES FOR MESSAGE RETRIEVER
|
|
;*************************************
|
|
|
|
GET_EXTENDED_MSG EQU 0 ;AN000; get extended message address
|
|
SET_EXTENDED_MSG EQU 1 ;AN000; set extended message address
|
|
GET_PARSE_MSG EQU 2 ;AN000; get parse message address
|
|
SET_PARSE_MSG EQU 3 ;AN000; set parse message address
|
|
GET_CRITICAL_MSG EQU 4 ;AN000; get critical message address
|
|
SET_CRITICAL_MSG EQU 5 ;AN000; set critical message address
|
|
MESSAGE_2F EQU 46 ;AN000; minor code for message retriever
|
|
|
|
;*********************************
|
|
;* EQUATES FOR INT 10H
|
|
;*********************************
|
|
|
|
VIDEO_IO_INT EQU 10H ;AN000; equate for int 10h
|
|
SET_VIDEO_MODE EQU 0 ;AN000; set video mode
|
|
SET_CURSOR_POSITION EQU 2 ;AN000; set new cursor position
|
|
SCROLL_VIDEO_PAGE EQU 6 ;AN000; scroll active page up
|
|
VIDEO_ATTRIBUTE EQU 7 ;AN000; attribute to be used on blank line
|
|
SET_COLOR_PALETTE EQU 11 ;AN000; set color for video
|
|
GET_VIDEO_STATE EQU 15 ;AN000; get current video state
|
|
VIDEO_ALPHA EQU 3 ;AN000; alpha video is 3 or below
|
|
VIDEO_BW EQU 7 ;AN000; mode for 80X25 black & white
|
|
|
|
AltPipeChr equ "|" ; alternate pipe character
|
|
|
|
FCB EQU 5CH
|
|
|
|
VARSTRUC STRUC
|
|
ISDIR DB ?
|
|
SIZ DB ?
|
|
TTAIL DW ?
|
|
INFO DB ?
|
|
BUF DB DIRSTRLEN + 20 DUP (?)
|
|
VARSTRUC ENDS
|
|
|
|
;
|
|
; Flags for internal command parsing
|
|
;
|
|
fCheckDrive equ 00000001b ; validate drive letter
|
|
fSwitchAllowed equ 00000010b ; switches allowed
|
|
fLimitHelp equ 00000100b ; /? must appear alone
|
|
|
|
;
|
|
; Test switches
|
|
;
|
|
fParse EQU 0001h ; display results of parseline
|
|
|
|
;
|
|
; Batch segment structure
|
|
;
|
|
; BYTE type of segment
|
|
; BYTE echo state of parent on entry to batch file
|
|
; WORD segment of last batch file
|
|
; WORD segment for FOR command
|
|
; BYTE FOR flag state on entry to batch file
|
|
; DWORD offset for next line
|
|
; 10 WORD pointers to parameters. -1 is empty parameter
|
|
; ASCIZ file name (with . and ..)
|
|
; BYTES CR-terminated parameters
|
|
; BYTE 0 flag to indicate end of parameters
|
|
;
|
|
|
|
BatchType equ 0
|
|
|
|
BatchSegment struc
|
|
BatType DB BatchType ; signature
|
|
Batechoflag DB 0 ; G state of echo
|
|
BatchEOF DB 0 ;records if EOF reached on file
|
|
Batlast DW 0 ; G segment of last batch file
|
|
Batforptr DW 0 ; G segment for FOR command
|
|
Batforflag DB 0 ; G state of FOR
|
|
BatSeek DD ? ; lseek position of next char
|
|
BatParm DW 10 dup (?) ; pointers to parameters
|
|
BatFile DB ? ; beginning of batch file name
|
|
BatchSegment ends
|
|
|
|
ANULL equ 0 ; terminates an argv string
|
|
ARGMAX equ 64 ; max args on a command line
|
|
ARGBLEN equ 2*128 ; 1char each plus term NUL
|
|
tplen equ 64 ; max size of one argument
|
|
arg_cnt_error equ 1 ; number of args > MAXARG
|
|
arg_buf_ovflow equ 2 ; overflowed argbuffer
|
|
|
|
argv_ele STRUC ; elements in the argv array
|
|
argpointer DW (?) ; pointer to the argstring
|
|
argflags DB (?) ; cparse flags for this argstring
|
|
argstartel DW (?) ; the result of cparse's [STARTEL]
|
|
arglen DW (?) ; cparse's char count + one (for null)
|
|
argsw_word DW (?) ; any switches after this? what kinds?
|
|
arg_ocomptr DW (?) ; pointer into original command string
|
|
argv_ele ENDS
|
|
|
|
arg_unit STRUC
|
|
argv DB (ARGMAX * SIZE argv_ele) DUP (?)
|
|
argvcnt DW (?) ; number of arguments
|
|
argswinfo DW (?) ; Switch information for entire line
|
|
argbuf DW ARGBLEN DUP (?) ; storage for argv strings
|
|
argforcombuf db COMBUFLEN DUP (?) ; Original for loop command string
|
|
arg_unit ENDS
|
|
|
|
parseflags RECORD special_delim:1, unused:4, path_sep:1, wildcard:1, sw_flag:1
|
|
|
|
SwitchQues EQU 20h
|
|
SwitchV EQU 10h
|
|
SwitchB EQU 08h
|
|
SwitchA EQU 04h
|
|
SwitchP EQU 02h
|
|
SwitchW EQU 01h
|
|
fSwitch EQU 8000h
|
|
fBadSwitch EQU 4000h
|
|
|
|
SwitchDir EQU SwitchP + SwitchW + fSwitch
|
|
SwitchCopy EQU SwitchV + SwitchA + SwitchB + fSwitch
|
|
|
|
break <Trap: Get the attention of MSDOS>
|
|
; TRAP snares the operating system for a service call
|
|
; AX, as well as any other registers MS-DOS takes a fancy to, will be crunched.
|
|
trap MACRO dos_function,dos_info
|
|
ifnb <dos_info>
|
|
mov AX, (dos_function SHL 8) + dos_info
|
|
else
|
|
mov AX, (dos_function SHL 8)
|
|
endif
|
|
int 21h
|
|
ENDM
|
|
|
|
;
|
|
; Equates for initialization
|
|
;
|
|
initInit equ 01h ; initialization in progress
|
|
initSpecial equ 02h ; in initialization time/date routine
|
|
initCtrlC equ 04h ; already in ^C handler
|
|
|
|
;M052 BETA3WARN equ 1 ; Yank anything related to this EQU
|
|
; out before we ship
|
|
|
|
|