Files
MS-DOS/v4.0/src/CMD/CHKDSK/CHKPARSE.INC
T

286 lines
12 KiB
PHP

;an000;bgb
;an000;bgb
;an000;bgb
;an000;bgb
data segment public para 'DATA' ;an000;bgb ;AN000;
;an000;bgb
;an000;bgb
; ;an000;bgb
;***************************************************************************** ;an000;bgb
; Publics ;an000;bgb
;***************************************************************************** ;an000;bgb
; ;an000;bgb
;an000;bgb
; Public Drive_Letter_Buffer ;an000;bgb
Public SwBuffer ;an000;bgb
Public Switch_F_Buffer ;an000;bgb
; Public FileSpec_Buffer ;an000;bgb
public buffer ;an000;bgb
public sw_v, sw_f ;an000;bgb;an020;bgb
;an000;bgb
; ;an000;bgb
;*************************************************************************** ;an000;bgb
; Equates ;an000;bgb
;*************************************************************************** ;an000;bgb
; ;an000;bgb
;an000;bgb
;Match Flags ;an000;bgb
;an000;bgb
Numeric_Value equ 8000h ; ;an000;bgb;AN000;
Signed_Numeric_Value equ 4000h ; ;an000;bgb;AN000;
Simple_String equ 2000h ; ;an000;bgb;AN000;
Date_String equ 1000h ; ;an000;bgb;AN000;
Time_String equ 0800h ; ;an000;bgb;AN000;
Complex_List equ 0400h ; ;an000;bgb;AN000;
Quoted_String equ 0080h ; ;an000;bgb;AN000;
Ignore_Colon equ 0010h ; ;an000;bgb;AN000;
Repeats_Allowed equ 0002h ; ;an000;bgb;AN000;
Optional equ 0001h ; ;an000;bgb;AN000;
Filespec equ 0200h ; ;an000;bgb;AN000;
Drive_Only equ 0100h ; ;an000;bgb;AN000;
;an000;bgb
;Function_Flags ;an000;bgb
;an000;bgb
File_Table_Capitalize equ 1 ; ;an000;bgb;AN000;
Char_Table_Capitalize equ 2 ; ;an000;bgb;AN000;
Remove_Colon equ 10h ; ;an000;bgb;AN000;
;an000;bgb
;Extra delimeters and EOL ;an000;bgb
;an000;bgb
Delimiters_Only equ 1 ; ;an000;bgb;AN000;
EOL_Or_Delimiters equ 2 ; ;an000;bgb;AN000;
;an000;bgb
Semi_Colon equ ";" ; ;an000;bgb;AN000;
Tab equ 09h ; ;an000;bgb;AN000;
Colon equ ":" ; ;an000;bgb;AN000;
;an000;bgb
;an000;bgb
;Parse Errors ;an000;bgb
;an000;bgb
No_Error equ 0 ; ;an000;bgb;AN000;
Too_Many_Operands equ 1 ; ;an000;bgb;AN000;
Operand_Missing equ 2 ; ;an000;bgb;AN000;
Not_In_Switch_List equ 3 ; ;an000;bgb;AN000;
Not_In_Keyword_List equ 4 ; ;an000;bgb;AN000;
Out_Of_Range equ 6 ; ;an000;bgb;AN000;
Not_In_Value_List equ 7 ; ;an000;bgb;AN000;
Not_In_String_List equ 8 ; ;an000;bgb;AN000;
Syntax_Error equ 9 ; ;an000;bgb;AN000;
End_Of_Parse equ -1 ; ;an000;bgb;AN000;
;an000;bgb
;Return types ;an000;bgb
;an000;bgb
Type_Reserved equ 0 ; ;an000;bgb;AN000;
Type_Number equ 1 ; ;an000;bgb;AN000;
Type_List_Index equ 2 ; ;an000;bgb;AN000;
Type_String equ 3 ; ;an000;bgb;AN000;
Type_Complex equ 4 ; ;an000;bgb;AN000;
Type_Filespec equ 5 ; ;an000;bgb;AN000;
Type_Drive equ 6 ; ;an000;bgb;AN000;
Type_Date equ 7 ; ;an000;bgb;AN000;
Type_Time equ 8 ; ;an000;bgb;AN000;
Type_Quoted_String equ 9 ; ;an000;bgb;AN000;
;an000;bgb
;Other ;an000;bgb
;an000;bgb
None equ 0 ; ;an000;bgb;AN000;
No_Error equ 0 ; ;an000;bgb;AN000;
Switch_Found equ 0FFFFh ; ;an000;bgb;AN000;
Range_Ok equ 1 ; ;an000;bgb;AN000;
Command_Line_Parms equ 81h ; ;an000;bgb;AN000;
;an000;bgb
; ;an000;bgb
;***************************************************************************** ;an000;bgb
; Parse Structures ;an000;bgb
;***************************************************************************** ;an000;bgb
; ;an000;bgb
;an000;bgb
Control struc ;an000;bgb
;an000;bgb
Match_Flags dw ? ;an000;bgb
Function_Flags dw ? ;an000;bgb
Result dw ? ;an000;bgb
Values dw ? ;an000;bgb
Num_Keywords db ? ;an000;bgb
Keyword db ? ;an000;bgb
;an000;bgb
Control ends ;an000;bgb
;an000;bgb
;Drive_Letter_Return struc ; ;an000;bgb ;AN000;
;Drive_Type db 0 ; ;an000;bgb ;AN000;
;Drive_Item_Tag db 0 ; ;an000;bgb ;AN000;
;Drive_Pointer dw 0 ; ;an000;bgb ;AN000;
;Drive_Number db 0 ;A=1, B=2, C=3 ;an000;bgb ;AN000;
;Drive_debug db 8 dup(0) ;an000;bgb
;Drive_Letter_Return ends ; ;an000;bgb ;AN000;
; ;an000;bgb
;Filespec_Return struc ;AN000;SM ;an000;bgb
;Filespec_Type db 0 ;AN000;SM ;an000;bgb
;FileSpec_Item db 0 ;AN000;SM ;an000;bgb
;FileSpec_Pointer dw 0 ;AN000;SM ;an000;bgb
;Filespec_String_Off dw 0 ;AN000;SM ;an000;bgb
;FileSpec_String_Seg dw 0 ;an000;bgb
;FileSpec_Return ends ;an000;bgb
;an000;bgb
single_Return struc ;AN000;SM ;an000;bgb
dftype db 0 ;AN000;SM ;an000;bgb
Item db 0 ;AN000;SM ;an000;bgb
Pointer dw 0 ;AN000;SM ;an000;bgb
drnum_stroff dw 0 ;AN000;SM ;an000;bgb
return_strseg dw 0 ;an000;bgb
single_return ends ;an000;bgb
;an000;bgb
;an000;bgb
Switch_Return struc ; ;an000;bgb;AN000;
Switch_Type db 0 ; ;an000;bgb;AN000;
Switch_Item_Tag db 0 ; ;an000;bgb;AN000;
Switch_Pointer dw 0 ; ;an000;bgb;AN000;
Switch_Debug db 4 dup(0) ;an000;bgb
Switch_Return ends ; ;an000;bgb;AN000;
;an000;bgb
Switch_Num_Return struc ; ;an000;bgb;AN000;
Switch_Num_Type db 0 ; ;an000;bgb ;AN000;
Switch_Num_Item_Tag db 0 ; ;an000;bgb ;AN000;
Switch_Num_Pointer dw 0 ; ;an000;bgb ;AN000;
Switch_Number_Low dw 0 ; ;AN0;an000;bgb00;
Switch_Number_High dw 0 ; ;AN0;an000;bgb00;
Switch_Num_Return ends ; ;an000;bgb;AN000;
;an000;bgb
Switch_String_Return struc ; ;an000;bgb;AN000;
Switch_String_Type db 0 ; ;an000;bgb ;AN000;
Switch_String_Item_Tag db 0 ; ;an000;bgb ;AN000;
Switch_String_Pointer dw 0 ; ;an000;bgb ;AN000;
Switch_String_Off dw 0 ; ;an000;bgb;AN000;
Switch_String_Seg dw 0 ; ;an000;bgb;AN000;
Switch_String_Return ends ; ;an000;bgb;AN000;
;an000;bgb
;an000;bgb
; ;an000;bgb
;************************************************************************** ;an000;bgb
; Parse tables ;an000;bgb
;************************************************************************** ;an000;bgb
; ;an000;bgb
Public input_Table ;an000;bgb
input_Table label byte ; ;AN000;;an000;bgb
;an000;bgb
dw offset dg:ext_table ;Point to next level ;A;an000;bgbN000;
db Delimiters_Only ; ;an000;bgb;AN000;
db 1 ; ;an000;bgb;AN000;
db Semi_Colon ; ;an000;bgb;AN000;
;an000;bgb
Drive_Table label byte ;an000;bgb;AN000;
; ;an000;bgb
dw offset dg:Drive_Control_Definition ;Point to next level ;an000;bgb ;AN000;
db Delimiters_Only ; ;an000;bgb;AN000;
db 1 ; ;an000;bgb;AN000;
db Semi_Colon ; ;an000;bgb;AN000;
;an000;bgb
; ;an000;bgb
;************************************************************************** ;an000;bgb
;Define Positionals, Switches and Keywords ;an000;bgb
;************************************************************************** ;an000;bgb
; ;an000;bgb
;an000;bgb
Public ext_table ;an000;bgb
ext_table label byte ; ;an000;bgb;AN000;
; ;an000;bgb
db 0,1 ;up to one parm, either drive or file ;an000;bgb;an026;bgb
dw dg:dfcontrol ;Pointer to control table ;an000;bgb ;AN000;
db 1 ;1 switch def ;an000;bgb;AN020;bgb
dw dg:SwControl ;switch control block ;an000;bgb;AN020;bgb
db None ;No Keywords (maxk) ;an000;bgb;AN000;
; ;an000;bgb
Drive_Control_Definition label byte ; ;an000;bgb;AN000;
; ;an000;bgb
db 0,1 ;Only drive letter positional ;an000;bgb;AN000;
dw dg:dfControl ;Pointer to control table ;AN0;an000;bgb00;
db None ;0 switches ;an000;bgb;AN000;
db None ;No Keywords (maxk) ;an000;bgb;AN000;
; ;an000;bgb
;an000;bgb
;an000;bgb
; ;an000;bgb
;************************************************************************** ;an000;bgb
; Define Positionals, Switches and Keywords ;an000;bgb
;************************************************************************** ;an000;bgb
; ;an000;bgb
;this is the new control block for both drive letters and filespecs ;an000;bgb
Public dfControl ;an000;bgb
dfControl label byte ; ;AN000;;an000;bgb
dw drive_only+FileSpec+Optional ; ;an000;bgb ;AN000;
dw None ; ;an000;bgb;AN000;
dw dg:Buffer ; ;AN000; ;an000;bgb
dw dg:No_Value ; ;an000;bgb;AN000;
db None ; ;an000;bgb;AN000;
;an000;bgb
Public SwControl ;an02;an000;bgb0;bgb
SwControl label byte ; ;AN020;;an000;bgbbgb
dw None ; ;an000;bgb;AN000;
dw None ; ;an000;bgb;AN000;
dw dg:SwBuffer ; ;AN000;;an000;bgb
dw dg:No_Value ;an000;bgb ;AN000;
db 2 ; ;an000;bgb;AN020;bgb
sw_v db "/V",0 ; ;an000;bgb;AN020;bgb
sw_f db "/F",0 ; ;an000;bgb;AN020;bgb
; ;an000;bgb
;an000;bgb
; ;an000;bgb
;***************************************************************************** ;an000;bgb
; Value lists ;an000;bgb
;***************************************************************************** ;an000;bgb
; ;an000;bgb
;an000;bgb
No_Value db 0 ; ;an000;bgb;AN000;
;an000;bgb
;an000;bgb
; ;an000;bgb
;************************************************************************ ;an000;bgb
; PARSE Return Buffers ;an000;bgb
;************************************************************************ ;an000;bgb
; ;an000;bgb
; these buffers were replaced by a single buffer due to the parser bug ;an000;bgb
;Drive_Letter_Buffer Drive_Letter_Return <> ;Example of structure ;an000;bgb ;AN000;
;FileSpec_Buffer FileSpec_Return <> ; ;an000;bgb
SwBuffer Switch_Return <> ; ;an000;bgb;AN000;
Switch_F_Buffer Switch_Return <> ; ;an000;bgb;AN000;
buffer single_return <> ; new results buffer ;an000;bgb
data ends ; ;an000;bgb;AN000;
;an000;bgb
; ;an000;bgb
;***************************************************************************** ;an000;bgb
; SysParse Routines ;an000;bgb
;***************************************************************************** ;an000;bgb
; ;an000;bgb
;an000;bgb
;an000;bgb
code segment public para 'CODE' ;an000;bgb
;an000;bgb
FarSW equ Not_Include ; ;an000;bgb;AN000; ;AN000;
DateSW equ Not_Include ; ;an000;bgb;AN000;
TimeSW equ Not_Include ; ;an000;bgb;AN000;
FileSW equ Do_Include ; ;an000;bgb;AN000;
CAPSW equ Not_Include ; ;an000;bgb;AN000;
CmpxSW equ Not_Include ; ;an000;bgb;AN000;
NumSW equ Not_Include ; ;an000;bgb;AN000;
KeySW equ Not_Include ; ;an000;bgb;AN000;
SwSW equ Do_Include ; ;an000;bgb;AN000;
Val1SW equ Not_Include ; ;an000;bgb;AN000;
Val2SW equ Not_Include ; ;an000;bgb;AN000;
Val3SW equ Not_Include ; ;an000;bgb;AN000;
DrvSW equ Do_Include ; ;an000;bgb;AN000;
QusSW equ Not_Include ; ;an000;bgb;AN000;
basesw equ 1 ;use ds as the default register ;an025;bgb
incsw equ 0 ;include psdata myself ;an028;bgb
code ends ;an028;bgb
data segment PUBLIC para 'DATA' ;an028;bgb
include psdata.inc ;an028;bgb
data ends ;an028;bgb
code segment PUBLIC para 'CODE' ;an028;bgb
pathlabl parser ;an028;bgb
INCLUDE PARSE.ASM ;AN000; ;an028;bgb
pathlabl parser ;an028;bgb
code ends ;an000;bgb