;/*
; *                      Microsoft Confidential
; *                      Copyright (C) Microsoft Corporation 1991
; *                      All Rights Reserved.
; */


const	segment public para 'const' ;AC000;bgb
;***************************************************************************
; Equates
;***************************************************************************
;
;Match Flags
Numeric_Value		equ	8000h		; AN000
Signed_Numeric_Value	equ	4000h		; AN000
Simple_String		equ	2000h		; AN000
Date_String		equ	1000h		; AN000
Time_String		equ	0800h		; AN000
Complex_List		equ	0400h		; AN000
Filespec		equ	0200h		; AN000
Drive_Only		equ	0100h		; AN000
Quoted_String		equ	0080h		; AN000
Ignore_Colon		equ	0010h		; AN000
Repeats_Allowed 	equ	0002h		; AN000
Optional		equ	0001h		; AN000

;Function_Flags

File_Table_Capitalize	equ	1		; AN000
Char_Table_Capitalize	equ	2		; AN000
Remove_Colon		equ	10h		; AN000

;Extra delimeters and EOL

No_Extra_Delimiters	equ	00h		; AN000;SM
Delimiters_Only 	equ	1		; AN000
EOL_Or_Delimiters	equ	2		; AN000

Semi_Colon		equ	";"             ; AN000
Tab			equ	09h		; AN000
Colon			equ	":"             ; AN000


;Parse Errors

No_Error		equ	0		; AN000
Too_Many_Operands	equ	1		; AN000
Operand_Missing 	equ	2		; AN000
Not_In_Switch_List	equ	3		; AN000
Not_In_Keyword_List	equ	4		; AN000
Out_Of_Range		equ	6		; AN000
Not_In_Value_List	equ	7		; AN000
Not_In_String_List	equ	8		; AN000
Syntax_Error		equ	9		; AN000
End_Of_Parse		equ	-1		; AN000

;Return types

Type_Reserved		equ	0		;				;AN000;
Type_Number		equ	1		;				;AN000;
Type_List_Index 	equ	2		;				;AN000;
Type_String		equ	3		;				;AN000;
Type_Complex		equ	4		;				;AN000;
Type_Filespec		equ	5		;				;AN000;
Type_Drive		equ	6		;				;AN000;
Type_Date		equ	7		;				;AN000;
Type_Time		equ	8		;				;AN000;
Type_Quoted_String	equ	9		;				;AN000;


;Other

None			equ	0		; AN000
No_Error		equ	0		; AN000
Switch_Found		equ	0FFFFh		; AN000
Range_Ok		equ	1		; AN000
Command_Line_Parms	equ	81h		; AN000
const	ends  ;AC000;bgb

data	segment public para 'DATA'  ;AC000;bgb
;***************************************************************************** ;AN000;bgb
;***************************************************************************** ;AN000;bgb
; Parse Tables								       ;AN000;bgb
;***************************************************************************** ;AN000;bgb
;***************************************************************************** ;AN000;bgb
;									       ;AN000;bgb
;The following parse control block can be used for any command which	       ;AN000;bgb
;needs only one optional file specification an operand.  Returns a	       ;AN000;bgb
;pointer to the unverified string in PARSE1_OUTPUT.  Currently used	       ;AN000;bgb
;for the RECOVER command.						       ;AN000;bgb
;***************************************************************************** ;AN000;bgb
;;;;db 'PARSE TABLE AREA'                                                      ;AN000;bgb
 public parms_input_block, parms_ext_block, control_block, value_list_block
 public results_block, parse_type, parse_code, parse_addr,
									       ;AN000;bgb
;***************************************************************************** ;AN000;bgb
; This is the parms input block pointed to by es:di before calling sysparse.   ;AN000;bgb
; it is the top level table.						       ;AN000;bgb
parms_input_block LABEL   BYTE						       ;AN000;bgb
		DW	dg:parms_ext_block	  ; addr of parms extension block ;AN000;bgb
		DB	0			; no delimiters or eol chars   ;AN000;bgb
									       ;AN000;bgb
;***************************************************************************** ;AN000;bgb
; This is the parms extension block pointed to by the parms input block.       ;AN000;bgb
; it defines the number and type of parameters allowed in the command line.    ;AN000;bgb
parms_ext_block LABEL	BYTE						       ;AN000;bgb
		DB	1,1			; only one positional parm     ;AN000;bgb
		DW	dg:control_block       ; addr of positional control block ;AN000;bgb
		DB	1			; 1 switch
		DW	dg:Switch_options	; ptr to switch block
		DB	0			;	 no keywords	       ;AN000;bgb
;									       ;AN000;bgb
;PARSE control block for an optional file specification (upper cased)	       ;AN000;bgb
;or drive number							       ;AN000;bgb
;									       ;AN000;bgb
;***************************************************************************** ;AN000;bgb
; This is the control block for either drive letter "c:", or filename.ext, or  ;AN000;bgb
; both "c:filename.ext" entered in the command line. it is pointed to by the   ;AN000;bgb
; parms extension block.						       ;AN000;bgb
control_block	LABEL	BYTE						       ;AN000;bgb
		Dw	$p_file_spc+$p_drv_only ; allowable return values	;AN000;bgb
						; 0200 = filespec	       ;AN000;bgb
						; 0100 = drive only	       ;AN000;bgb
		DW	1			; capitalize - file table	;AN000;bgb
		DW	dg:results_block	   ; points to reults block	   ;AN000;bgb
		DW	dg:value_list_block	   ; point to valu list block	   ;AN000;bgb
		DB	0			; no keyword synonyms		;AN000;bgb


;***************************************************************************** ;AN000;bgb
; This is the switch block for the /? options switch.  The user enters this
; switch when they want help with the command syntax.

	PUBLIC	Switch_options, SwOptions_Syn
Switch_options	LABEL	BYTE
		DW	0000h			; Match Mask
		DW	0000h			; Function Mask
		DW	dg:results_block	; ptr to Result block
		DW	dg:value_list_block	; ptr to Value block
		DB	1			; count of synonyms
SwOptions_Syn	DB	"/?", 0			; text to match

;										;AN000;bgb
;Indicates no value list for PARSE.						;AN000;bgb
;*****************************************************************************	;AN000;bgb
; This is the value list block pointed to by the control block.  This table is	;AN000;bgb
; used to define the type of numeric or string parameters expected.  Since no	;AN000;bgb
; parameters with numerics or strings are used, this block is set to zero.	;AN000;bgb
value_list_block DW	 0			 ;AN000;  no values		;AN000;bgb
										;AN000;bgb
;										;AN000;bgb
;Common output blocks for PARSE number, complex, or string values.		;AN000;bgb
;*****************************************************************************	;AN000;bgb
; This is the results block pointed to by the control block.			;AN000;bgb
; both "c:filename.ext" entered in the command line. it is pointed to by the    ;AN000;bgb
; parms extension block.							;AN000;bgb

	PUBLIC	results_block, PARSE_SYN
results_block	LABEL	BYTE			;AN000; 			;AN000;bgb
PARSE_TYPE     DB      0		       ; type of parm returned		;AN000;bgb
PARSE_CODE     DB      0		       ; matched item tag / return valu ;AN000;bgb
PARSE_SYN      DW      0		       ;	es offset of synonym	;AN000;bgb
PARSE_ADDR     DD      0		       ; either a numeric value, or	;AN000;bgb
	       dd      0 ;parser puts in too many;the offset of string value	;AN000;bgb

;;;;DB 'PARSE AREA ENDS'
data	ends									;AN000;bgb
										;AN000;bgb
;										;AN000;
code	segment PUBLIC para 'CODE'   ;AC000;bgb                                 ;AN000;
;*****************************************************************************	;AN000;
; SysParse Routines								;AN000;
;*****************************************************************************	;AN000;
FarSW	equ	Not_Include			;				;AN000;
DateSW	equ	Not_Include			;				;AN000;
TimeSW	equ	Not_Include			;				;AN000;
FileSW	equ	Do_Include			;				;AN000;
CAPSW	equ	Not_Include			;				;AN000;
CmpxSW	equ	Not_Include			;				;AN000;
NumSW	equ	Not_Include			;				;AN000;
KeySW	equ	Not_Include			;				;AN000;
SwSW	equ	Do_Include			;				;AN000;
Val1SW	equ	Not_Include			;				;AN000;
Val2SW	equ	Not_Include			;				;AN000;
Val3SW	equ	Not_Include			;				;AN000;
DrvSW	equ	Do_Include			;				;AN000;
QusSW	equ	Not_Include			;
basesw	equ	1 ;use ds as the default register				;an040;bgb
incsw	equ	0 ;include psdata myself					;an040;bgb
code	ends									;an040;bgb
										;an040;bgb
										;an040;bgb
data	segment PUBLIC para 'DATA'                                              ;an040;bgb
include psdata.inc								;an040;bgb
data	ends									;an040;bgb
										;an040;bgb
code	segment PUBLIC para 'CODE'                                              ;an040;bgb
pathlabl parser 								;an040;bgb
INCLUDE PARSE.ASM				;AN000; 			;an040;bgb
pathlabl parser 								;an040;bgb
code	ends									;an040;bgb
