📄 recparse.inc
字号:
;/*
; * 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -