Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-1


					PAGE	,132			;
					TITLE	COMPPAR.SAL - LOOK AT COMMAND LINE PARMS
				;****************** START OF SPECIFICATIONS *****************************
				; MODULE NAME: COMPPAR.SAL
				;
				; DESCRIPTIVE NAME: Handle the definition of the DOS command line parameters
				;		    and the interface to the DOS system PARSER.
				;
				;FUNCTION: The static data areas are prescribed by the DOS system PARSER
				;	   to define the several parameters presented to COMP.	These
				;	   data areas are passed to the PARSER, and its responses checked
				;	   to determine the nature of the user's specifications.  Any errors
				;	   found in the user's parameters are defined in messages back
				;	   to the user.
				;
				; ENTRY POINT: PARSER, near
				;
				; INPUT: (DOS COMMAND LINE PARAMETERS)
				;
				;	[d:][path] COMP [d:][path][filenam1[.ext]] [d:][path][filenam2[.ext]]
				;
				;	 Where
				;	 [d:][path] before COMP to specify the drive and path that
				;		    contains the COMP command file.
				;
				;	 [d:][path][filenam1[.ext]] -  to specify the FIRST (or primary)
				;		    file or group of files to be compared
				;
				;	 [d:][path][filenam2[.ext]]  - to specify the SECOND file or group
				;		    of files to be compared with the corresponding file
				;		    from the FIRST group
				;
				;	 Global filename characters are allowed in both filenames,
				;	 and will cause all of the files matching the first filename
				;	 to be compared with the corresponding files from the second
				;	 filename.  Thus, entering COMP A:*.ASM B:*.BAK will cause
				;	 each file from drive A:  that has an extension of .ASM to be
				;	 compared with a file of the same name (but with an extension
				;	 of .BAK) from drive B:.
				;
				;	 If you enter only a drive specification, COMP will assume
				;	 all files in the current directory of the specified drive.
				;	 If you enter a path without a filename, COMP assumes all
				;	 files in the specified directory.  Thus, COMP A:\LEVEL1
				;	 B:\LEVEL2 will compare all files in directory A:\LEVEL1 with
				;	 the files of the same names in directory B:\LEVEL2.
				;
				;	 If no parameters are entered with the COMP command, you will
				;	 be prompted for both.	If the second parm is omitted, COMP
				;	 will prompt for it.  If you simply press ENTER when prompted
				;	 for the second filename, COMP assumes *.* (all files
				;	 matching the primary filename), and will use the current
				;	 directory of the default drive.
				;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-2


				;	 If no file matches the primary filename, COMP will prompt
				;	 again for both parameters.
				;
				;
				;	Upon entry to PARSER in this module,
				;	"CURRENT_PARM" = offset to start of parm text in command string
				;	"ORDINAL" = initialized to zero
				;	PSP+81H = text of DOS command line parms string
				;
				; EXIT-NORMAL: If a Code Page number was specified
				;		  BX = Offset to language table to be loaded
				;		  DX = Integer value of Code Page specified
				;	       If /STATUS (or /STA) was specified
				;		  BX = 0
				;	       If Question mark was specified
				;		  BX=-1
				;
				; EXIT-ERROR: If there was any problem with the parms,
				;	      the question mark is assumed, and the appropriate
				;	      PARSE error message is displayed.
				;	      The Errorlevel code of "EXPAR" (3), meaning: "PARM ERROR",
				;	      set in "EXITFL", is requested to be returned to the user.
				;
				; INTERNAL REFERENCES:
				;    ROUTINES:
				;	PARSE_ERROR:NEAR Display the appropriate Parse error message.
				;
				;    DATA AREAS:
				;	The several parameter control blocks, defined by the System
				;	PARSER interface, defining the COMP parameters.
				;
				; EXTERNAL REFERENCES:
				;    ROUTINES:
				;	SENDMSG:NEAR	Uses Msg Descriptor to drive message handler.
				;	SYSPARSE:NEAR	System Command Line Common Parser.
				;
				;    DATA AREAS:
				;	EXITFL:BYTE	Errorlevel return code.
				;	MSGNUM_PARSE:WORD Message descriptor for all parse errors.
				;
				; NOTES:
				;	 This module should be processed with the SALUT preprocessor
				;	 with the re-alignment not requested, as:
				;
				;		SALUT COMPPAR,NUL
				;
				;	 To assemble these modules, the alphabetical or sequential
				;	 ordering of segments may be used.
				;
				;	 For LINK instructions, refer to the PROLOG of the main module,
				;	 COMP1.SAL.
				;
				; REVISION HISTORY:
				;	     A000 Version 4.0 : add PARSER, System Message Handler,
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-3


				;		  Add compare of extended attributes, if present.
				;
				; COPYRIGHT: The following notice is found in the OBJ code generated from
				;	     the "COMPSM.SAL" module:
				;
				;	     "The DOS COMP Utility"
				;	     "Version 4.0  (C) Copyright 1988 Microsoft"
				;	     "Licensed Material - Property of Microsoft"
				;
				;PROGRAM AUTHOR: Edwin M. K.
				;	 modified: Bill L.
				;****************** END OF SPECIFICATIONS *****************************
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
				HEADER	MACRO	TEXT			;;AN000;
				.XLIST					;;AN000;
					SUBTTL	TEXT			;;AN000;
				.LIST					;;AN000;
					PAGE				;;AN000;
					ENDM				;;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
				;		      $SALUT (4,23,28,36) ;AN000;
				
						      INCLUDE COMPEQ.INC ;AN000;
			     C	;*****************************************************************************
			     C	;
			     C	; MODULE: compeq.inc
			     C	;
			     C	; Modification History:
			     C	;
			     C	;   version   author          date     comment
			     C	;   -------   ------          ----     -------
			     C	;   V4.0      Bill L.	     9/17/87  moved equates from comp2.sal to here!
			     C	;
			     C	;*****************************************************************************
			     C	
 = 0002                      C	EAISBINARY     equ  02h           ;extended attribute is a binary integer       ;AN001;
 = 8000                      C	EASYSTEM       equ  8000h         ;extended attr. is system defined             ;AN001;
			     C	
 = 0000                      C	VERSION        EQU  00H           ;DOS VERSION, =00H (NOT USED)                 ;AN000;
 = 0000                      C	NUL            EQU  00H           ;END OF STRING (ASCIIZ) MARKER                ;AN000;
 = 0001                      C	ONE_PARM       EQU  01H           ;ONLY PARSE ONE PARAMETER                     ;AN000;
 = 0000                      C	ZERO_PARM_CT   EQU  00H           ;ORDINAL # BEFORE PARSING FIRST PARM.         ;AN000;
 = 0001                      C	FIRST_PARM_CT  EQU  01H           ;ORDINAL # AFTER PARSING FIRST PARM.          ;AN000;
 = 0002                      C	TRICK_PARM_CT  EQU  02H           ;TRICK PARSER SO THAT FILENAME GOES TO PATH2  ;AN000;
			     C	                                  ;INSTEAD OF PATH1                             ;AN000;
 = 0001                      C	YES            EQU  01H           ;A VALID YES RESPONSE EQUALS 1                ;AN000;
 = 00C1                      C	KEYB_INP_CLR   EQU  0C1H          ; does an INT 21H fuction 0CH, 01H            ;AN000;
 = 00FF                      C	KEYB_INPUT     EQU  0FFH          ;DO A READ ON CLEAR KEYBOARD                  ;AN000;
 = 007F                      C	INPUT_LEN      EQU  127           ;LENGTH OF INPUT BUFFER ON BUFFERED INPUT     ;AN000;
 = 0001                      C	KEYIN          EQU  01H           ;WAIT FOR KEYBOARD INPUT TO AL                ;AN000;
 = 0002                      C	DISP_OUT       EQU  02H           ;DL = CHAR TO BE DISPLAYED TO STD OUT         ;AN000;
 = 0006                      C	DIRECT_IO      EQU  06H           ;DUMBY CALL, USED IN CLEARING KEYBOARD        ;AN000;
 = 000A                      C	BUFFD_KEYBD    EQU  0AH           ;BUFFERED KEYBOARD INPUT TO DX                ;AN000;
 = 000B                      C	IN_STAT        EQU  0BH           ;check keyboard status                        ;AC210;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-4


 = 000C                      C	CLEAR_KEYBD    EQU  0CH           ;CLEAR KEYB, DO KEYB FUNC IN AL               ;AN000;
 = 000F                      C	FCBOpen        equ  0FH           ;fcb open                                     ;AN000;
 = 0010                      C	FCBCLOSE       EQU  10H           ;FCB CLOSE FILE                               ;AN000;
 = 0011                      C	SearchF        equ  11H           ;FCB Search function call                     ;AN000;
 = 0012                      C	SEARCHN        EQU  12H           ;FCB SEARCH NEXT                              ;AN000;
 = 001A                      C	SetDTA         equ  1AH           ;Set DTA                                      ;AN000;
 = 0019                      C	DEFDRV         equ  19H           ;get default drive                            ;AN000;
 = 0023                      C	YESNO_CHECK    EQU  23H           ;CHECK (Y/N) RESPONSE ON INPUT (EXTENDED COUNTRY INFO) ;AN000;
 = 0025                      C	SETVECTOR      equ  25H           ;set interrupt vector in AL to DS:DX          ;AN000;
 = 0027                      C	FCBRndBlkRead  equ  27H           ;Read function call                           ;AN000;
 = 0029                      C	PARSE_FILENAME EQU  29H           ;PARSE FILENAME                               ;AN000;
 = 0030                      C	GETVER         equ  30H           ;get dos version                              ;AN000;
 = 003B                      C	CHDIR          equ  3BH           ;CHDIR function call                          ;AN000;
 = 003D                      C	HandleOpen     equ  3DH           ;Handle open function call                    ;AN000;
 = 003E                      C	HANDLECLOSE    EQU  3EH           ;HANDLE CLOSE FUNCTION CALL                   ;AN000;
 = 0040                      C	Write          equ  40H           ;Write function call                          ;AN000;
 = 0047                      C	CURDIR         equ  47H           ;get current directory for drive in [dl]      ;AN000;
 = 004C                      C	RET_FN         EQU  4CH           ;"RETURN TO DOS" NOT REMAIN RESIDENT          ;AN000;
 = 0065                      C	GET_EXT_CNTRY_INFO EQU 65H        ;EXTENED COUNTRY INFO DOS CALL                ;AN000;
			     C	
 = 0001                      C	STDOUT          equ  0001H        ;Standard output device                       ;AN000;
 = 0002                      C	STDERR          equ  0002H        ;Standard error device                        ;AN000;
			     C	
 = 0000                      C	ReadOnlyAccess  equ  00H          ;Access code for Handle Open function call    ;AN000;
			     C	
 = 0033                      C	CPSW_CHECK      EQU  33H          ;CODE PAGE SWITCHING CONTROL                  ;AN000;
 = 0003                      C	GET_CPSW_STATE  EQU  03H          ;AL=3, GET STATE TO DL                        ;AN000;
 = 0004                      C	SET_CPSW_STATE  EQU  04H          ;AL=4, SET STATE FROM DL                      ;AN000;
 = 0000                      C	CPSW_OFF        EQU  00H          ; DL=0, OFF                                   ;AN000;
 = 0001                      C	CPSW_ON         EQU  01H          ; DL=1, ON                                    ;AN000;
 = 0040                      C	CPSW            EQU  40H          ;IN CPSW_ORIG: ON, CPSW=ON                    ;AN000;
 = 0000                      C	ZERO_CP         EQU  00H          ; A ZERO CODE PAGE                            ;AN000;
			     C	
			     C	;   EXTENDED OPEN EQUATES         ;                                    LOOK     ;AN000;
 = 0000                      C	NO_ATTR_LIST    EQU  00H          ;NO ATTRIBUTE LIST NEEDED            ||       ;AN000;
 = 0082                      C	OPEN_MODE       EQU  82H          ;OPEN MODE FOR EXTENDED OPEN         ||       ;AN000;
 = 0101                      C	FUNC_CNTRL      EQU  0101H        ;FUNCTION CONTROL FOR EXTENDED OPEN  ||       ;AN000;
 = 0000                      C	EXT_OPEN_RD     EQU  00H          ;READ MODE ON EXTENDED OPEN          \/       ;AN000;
 = 006C                      C	EXT_OPEN        EQU  6CH          ;EXTENDED OPEN                                ;AN000;
			     C	                                  ;AL=FUNCTION CONTROL, IN FORMAT=CE            ;AN000;
			     C	                                  ; C=DOES NOT EXIST ACTION:                    ;AN000;
			     C	                                  ;   0=FAIL, 1=CREATE                          ;AN000;
			     C	                                  ; E=EXISTS ACTION                             ;AN000;
			     C	                                  ;   0=FAIL, 1=OPEN, 2=REPLACE/OPEN            ;AN000;
			     C	                                  ;BX=OPEN MODE, FORMAT=0WF00000ISSS0AAA        ;AN000;
			     C	                                  ;   AAA=ACCESS CODE: 0=READ, 1=WRITE          ;AN000;
			     C	                                  ;    2=READ/WRITE, 4=EXECUTE (UNDOC)          ;AN000;
			     C	                                  ;    7=FCB (UNDOC)                            ;AN000;
			     C	                                  ;   SSS=SHARING MODE: 0=COMPATIBILITY         ;AN000;
			     C	                                  ;    1=DENY READ/WRITE, 2=DENY WRITE          ;AN000;
			     C	                                  ;    2=DENY READ, 3=DENY NONE                 ;AN000;
			     C	                                  ;   I=0, PASS HANDLE TO CHILD, 1=NO INHERIT   ;AN000;
			     C	                                  ;   F=0, INT 24H, 1=RETURN ERROR              ;AN000;
			     C	                                  ;ON THIS OPEN AND ANY IO TO THIS HANDLE       ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-5


			     C	                                  ;   W=0, NO COMMIT, 1=AUTO-COMMIT ON WRITE    ;AN000;
			     C	                                  ;CX=SCARCH/CREATE ATTRIBUTE                   ;AN000;
			     C	                                  ;DX=FUNCTION CONTROL, 0000000C NNNNEEEE       ;AN000;
			     C	                                  ; NNNN=DOES NOT EXIST ACTION:                 ;AN000;
			     C	                                  ;  0=FAIL,1=CREATE                            ;AN000;
			     C	                                  ; EEEE=DOES EXIST ACTION:                     ;AN000;
			     C	                                  ;  0=FAIL,1=OPEN,2=REPLACE/OPEN               ;AN000;
			     C	                                  ; C=CODEPAGE ACTION:                          ;AN000;
			     C	                                  ;  0=VALIDATE, 1=NO CHECK CODE PAGE           ;AN000;
			     C	                                  ;DS:SI=PARM LIST:                             ;AN000;
			     C	                                  ;    DD POINT TO NAME TO OPEN                 ;AN000;
			     C	                                  ;    DB NUMBER OF ADDITIONAL PARMS            ;AN000;
			     C	                                  ;    DB 1  IO MODE                            ;AN000;
			     C	                                  ;    DB IOMODE                                ;AN000;
			     C	                                  ;       ???0H=UNSPECIFIED (DEFAULT)           ;AN000;
			     C	                                  ;       ???1H=MAINLY SEQUENTIAL               ;AN000;
			     C	                                  ;       ???2H=MAINLY RANDOM                   ;AN000;
			     C	                                  ;       ???3H=RANDOM WITH LOCALITY            ;AN000;
			     C	                                  ;       ???=RESERVED (SET TO ZERO)            ;AN000;
			     C	                                  ;ES:DI=EXTENTED ATTR LIST                     ;AN000;
			     C	
			     C	                                  ;OUTPUT: CY SET ON ERROR                      ;AN000;
			     C	                                  ; AX=HANDLE                                   ;AN000;
			     C	                                  ; CX=ACTION TAKEN: 1=FILE OPENED,             ;AN000;
			     C	                                  ;  2=FILE CREATED/OPENED,                     ;AN000;
			     C	                                  ;  3=FILE REPLACED/OPENED                     ;AN000;
			     C	
 = 0057                      C	EXT_ATTR_LIST   EQU  57H          ;FUNCTION # : EXTENDED ATTR LIST              ;AN000;
 = 0002                      C	GET_EXT_ATTR_LIST EQU 02H         ;SUB-FUNC. # : GET EXTENDED ATTR TO LIST      ;AN000;
			     C	                                  ;BX=HANDLE                                    ;AN000;
			     C	                                  ;ES:DI=LIST                                   ;AN000;
			     C	                                  ;CY SET IF ERROR                              ;AN000;
			     C	
			     C	
 = 0059                      C	EXTERROR        EQU  59H          ;EXTENDED ERROR                               ;AN000;
			     C	                                  ;BX = 40 VERSION NUMBER (FOR 3.40)            ;AN000;
			     C	                                  ;OUTPUT:                                      ;AN000;
			     C	                                  ;AX=EXTENDED ERROR                            ;AN000;
			     C	                                  ;BH=ERROR CLASS                               ;AN000;
			     C	                                  ;BL=SUGGESTED ACTION                          ;AN000;
			     C	                                  ;CH=LOCUS                                     ;AN000;
			     C	
			     C	;               ERRORLEVEL RETURN CODES, PASSED IN "EXITFL"                     ;AN000;
 = 0000                      C	EXOK            EQU  0            ;NORMAL RETURN CODE, NO PROBLEM               ;AN000;
 = 0001                      C	EXCB            EQU  1            ;CONTROL BREAK EXIT                           ;AN000;
 = 0001                      C	EXVER           EQU  1            ;BAD DOS VERSION OR OTHER                     ;AN000;
			     C	                                  ; SYSLOADMSG DIFFICULTY                       ;AN000;
			     C	
			     C	;               VALUES FOR THE MSG_DESC CONTROL BLOCK                           ;AN000;
 = 0000                      C	NO_SUBS        EQU   0            ;NO VARIABLE FIELDS IN MESSAGE                ;AN000;
 = 0001                      C	ONE_SUBS       EQU   1            ;ONE VARIABLE FIELD IN MESSAGE                ;AN000;
 = 0002                      C	TWO_SUBS       EQU   2            ;TWO VARIABLE FIELDS IN MESSAGE               ;AN000;
 = 0003                      C	THREE_SUBS     EQU   3            ;THREE VARIABLE FIELDS IN MESSAGE             ;AN000;
 = 0001                      C	CLASS_1        EQU   1            ;CLASS 1 (DOS EXTENDED ERRORS)                ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-6


 = 0002                      C	CLASS_2        EQU   2            ;CLASS 2 (PARSE ERRORS)                       ;AN000;
 =-0001                      C	CLASS_A        EQU   -1           ;CLASS A TYPE MESSAGE                         ;AN000;
			     C	
			     C	;*****************************                                                  ;AN000;
			     C	; Message Retriever structures                                                  ;AN000;
			     C	;*****************************                                                  ;AN000;
			     C	
			     C	msg_desc          struc                                                         ;AN000;
 0000  0000                  C	msg_num           dw    0         ;MESSAGE NUMBER (TO AX)                       ;AN000;
 0002  0001                  C	msg_handle        dw    STDOUT    ;HANDLE OF OUTPUT DEVICE (TO BX)              ;AN000;
 0004  0000                  C	msg_sublist       dw    0         ;POINTER TO SUBLIST (TO SI)                   ;AN000;
 0006  0000                  C	msg_count         dw    0         ;SUBSTITUTION COUNT (TO CX)                   ;AN000;
 0008  FF00                  C	msg_class         dw    CLASS_A shl 8 ;MESSAGE CLASS (IN HIGH BYTE, TO DH)      ;AN000;
			     C	                                  ;LOW BYTE HAS 0 (FUNCTION "NO INPUT", TO DL)  ;AN000;
 000A  0000                  C	msg_input         dw    ?         ;######EXTRA WORD - ONLY FOR MESSAGES WITH BUFFERED INPUT        ;
				AN000;
			     C	                                  ;######OTHERWISE THIS WORD IS NOT VALID AS PART OF THE STRUCT    ;
				AN000;
			     C	                                  ;POINTER TO INPUT BUFFER                      ;AN000;
 000C                        C	msg_desc          ends                                                          ;AN000;
			     C	
 = 0000                      C	MAX_0             equ   0         ;MAXIMUM WIDTH OF STRING FIELD (0=NO LIMIT)   ;AN000;
 = 0020                      C	PAD_BLK           equ   " "       ;CHAR FOR PAD FIELD                           ;AN000;
			     C	
			     C	
			     C	sublist           struc                                                         ;AN000;
 0000  0B                    C	sub_size          db    11        ;SUBLIST SIZE (POINTER TO NEXT SUBLIST)       ;AN000;
 0001  00                    C	sub_res           db    0         ;RESERVED                                     ;AN000;
			     C	                                  ;NEXT FIELD IS TO BE USED AS A DOUBLE WORD    ;AN000;
 0002  0000                  C	sub_value         dw    0         ;TIME, DATE, OR PTR TO DATA ITEM              ;AN000;
 0004  0000                  C	sub_value_seg     dw    0         ;SEG ID OF PTR                                ;AN000;
			     C	                                  ;(ABOVE FIELD MUST BE FILLED AT EXECUTION TIME ;AN000;
			     C	                                  ; IF THIS IS A .COM FILE)                     ;AN000;
 0006  00                    C	sub_id            db    0         ;N OF %N                                      ;AN000;
 0007  00                    C	sub_flags         db    0         ;DATA TYPE FLAGS                              ;AN000;
 0008  00                    C	sub_max_width     db    MAX_0     ;MAXIMUM FIELD WIDTH (0=UNLIMITED)            ;AN000;
 0009  00                    C	sub_min_width     db    0         ;MINIMUM FIELD WIDTH                          ;AN000;
 000A  20                    C	sub_pad_char      db    PAD_BLK   ;CHARACTER FOR PAD FIELD                      ;AN000;
			     C	                                  ; CAN BE " ", "0" OR ",".                     ;AN000;
			     C	                                  ; "," CAUSES INSERTION OF THE ACTIVE          ;AN000;
			     C	                                  ; THOUSANDS SEPARATOR BETWEEN EVERY 3 DIGITS. ;AN000;
 000B                        C	sublist           ends                                                          ;AN000;
			     C	
			     C	;end of COMPEQ.INC                                                              ;AN000;
				;		      LOCAL EQUATES						      ;AN000;
 = 0040				MAX_PATH_LEN	      EQU  64	   ;MAX CHAR IN A PATH				;AN000;
 = 0001				EXPAR		      EQU  1	   ;RETURN TO DOS, INVALID DOS COMMAND LINE PARMS  ;AN000;
 = 0000				ZERO_PARM_CT	      EQU  0	   ;ORDINAL VALUE BEFORE FIRST PARM FOUND	;AN000;
 = 0001				FIRST_PARM_CT	      EQU  1	   ;ORDINAL VALUE AFTER FIRST PARM FOUND	;AN000;
 = 0000				NUL		      EQU  0	   ;ASCIIZ STRING DELIMITER			;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
				;		      EXIT CODES FROM SYSPARSE (WHEN CY=0)			      ;AN000;
				
 = 0000				SYSPRM_EX_OK	      EQU  0	   ; no error					;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-7


 = 0001				SYSPRM_EX_MANY	      EQU  1	   ; too many operands				;AN000;
 = 0002				SYSPRM_EX_MISSING     EQU  2	   ; required operand missing			;AN000;
 = 0003				SYSPRM_EX_NOT_SWLIST  EQU  3	   ; not in switch list provided		;AN000;
 = 0004				SYSPRM_EX_NOT_KEYLIST EQU  4	   ; not in keyword list provided		;AN000;
 = 0006				SYSPRM_EX_RANGE       EQU  6	   ; out of range specified			;AN000;
 = 0007				SYSPRM_EX_VALUE       EQU  7	   ; not in value list provided 		;AN000;
 = 0008				SYSPRM_EX_STRING      EQU  8	   ; not in string list provided		;AN000;
 = 0009				SYSPRM_EX_SYNTAX      EQU  9	   ; syntax error				;AN000;
 =-0001				SYSPRM_EX_EOL	      EQU  -1	   ; end of command line			;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
						      HEADER <STRUC - DEFINITIONS OF EXTERNAL CONTROL BLOCKS> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-8
STRUC - DEFINITIONS OF EXTERNAL CONTROL BLOCKS			;          

				PSP		      STRUC	   ;AN000;
 0000  0080[					      DB   80H DUP (?) ;SKIP OVER FIRST HALF OF PSP	       ;AN000;
	   ??			
			 ]	
				
 0080  00			PSP_PARMLEN	      DB   ?	   ;NUMBER OF BYTES IN DOS COMMAND LINE    ;AN000;
 0081  007F[			PSP_COMMAND	      DB   127 DUP(?) ;TEXT OF DOS COMMAND LINE 	      ;AN000;
	   ??			
			 ]	
				
 0100				PSP		      ENDS	   ;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
				FILESPEC	      STRUC	   ;AN000;
 0000  00			FS_DRIVE_ID	      DB   ?	   ;DRIVE LETTER		   ;AN000;
 0001  3A			FS_COLON	      DB   ":"	   ;COLON SEPARATOR		   ;AN000;
 0002  5C			FS_SLASH1	      DB   "\"	   ;LEADING BACKSLASH,START AT ROOT ;AN000;
 0003  0040[			FS_PATH 	      DB   MAX_PATH_LEN DUP (0) ;TEXT OF PATH			;AN000;
	   00			
			 ]	
				
				
				;LOCATION OF REMAINING FIELDS DEPENDS ON LENGTH OF ACTUAL PATH			;AN000;
				;POSITIONS SHOWN ARE FOR MAX PATH LENGTH ONLY					;AN000;
				
 0043  00			FS_SLASH2	      DB   0	   ;TRAILING BACKSLASH			     ;AN000;
 0044  0008[			FS_FNAME	      DB   8 DUP (0) ;FILENAME				       ;AN000;
	   00			
			 ]	
				
 004C  00			FS_PER		      DB   0	   ;PERIOD END OF FILENAME		     ;AN000;
 004D  0003[			FS_EXT		      DB   3 DUP (0) ;FILENAME EXTENSION		       ;AN000;
	   00			
			 ]	
				
 0050				FILESPEC	      ENDS	   ;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
						      HEADER <PARSING WORKAREAS> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-9
PARSING WORKAREAS			;                                       

				;	     $SALUT (4,14,19,36)   ;AN000;
 0000				CSEG	     SEGMENT PARA PUBLIC 'CODE' ;AN000;
					     ASSUME CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG ;AN000;
				
					     EXTRN SENDMSG:NEAR    ;USES MSG DESCRIPTOR TO DRIVE MESSAGE HANDLR ;AN000;
					     EXTRN SYSPARSE:NEAR   ;SYSTEM COMMAND LINE PARSER			;AN000;
				
					     EXTRN EXITFL:BYTE	   ;ERRORLEVEL RETURN CODE		      ;AN000;
					     EXTRN PATH1:BYTE	   ;FIRST POSITIONAL PARM		      ;AN000;
					     EXTRN PATH2:BYTE	   ;SECOND POSITIONAL PARM		      ;AN000;
					     EXTRN MSGNUM_PPARSE:WORD ;MESSAGE DESCRIPTOR FOR ALL PARSE ERRORS ;AN000;
					     EXTRN SUBLIST_24:WORD ;sublist for parse error messages	      ;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
				
 0000  0081			CURRENT_PARM DW   81H		   ;POINTER INTO COMMAND OF NEXT OPERAND	;AN000;
					     PUBLIC CURRENT_PARM   ;AN000;
				
 0002  0000			ORDINAL      DW   0		   ;ORDINAL NUMBER OF WHICH PARM TO PARSE	;AN000;
					     PUBLIC ORDINAL	   ;AN000;
				
 0004  0000			PARM_COUNT   DW   00H		   ;CURRENT PARM COUNT (USED TO TRICK "PARSER"	;AN000;
					     PUBLIC PARM_COUNT	   ;INTO PARSING FILE NAMES ENTERED FROM THE	;AN000;
								   ;KEYBOARD INSTEAD OF COMMAND LINE		;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
					     HEADER <DOS COMMAND LINE PARSER CONTROL BLOCKS> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-10
DOS COMMAND LINE PARSER CONTROL BLOCKS			;                  

				
				;INPUT PARAMETERS CONTROL BLOCK, POINTED TO BY ES:DI WHEN CALLING PARSER	;AN000;
				
					     PUBLIC PARMS	   ;LET LINK MAKE PARMS BLOCK ADDRESSABLE	;AN000;
 0006				PARMS	     LABEL BYTE 	   ;PARMS CONTROL BLOCK 			;AN000;
 0006  0009 R				     DW   PARMSX	   ;POINTER TO PARMS EXTENSION			;AN000;
 0008  00				     DB   0		   ; NUMBER OF STRINGS (0, 1, 2)		;AN000;
								   ; NEXT LIST WOULD BE EXTRA DELIM LIST	;AN000;
								   ;  (,& WHITESPACE ALWAYS)			;AN000;
								   ; NEXT LIST WOULD BE EXTRA END OF LINE LIST	;AN000;
								   ;  (CR,LF,0 ALWAYS)				;AN000;
				
				;SYSTEM PARSER PARAMETER EXTENSION CONTROL BLOCK				;AN000;
 0009				PARMSX	     LABEL BYTE 	   ;PARMS EXTENSION CONTROL BLOCK		;AN000;
 0009  00 02				     DB   0,2		   ; MIN, MAX POSITIONAL OPERANDS ALLOWED	;AN000;
 000B  0011 R				     DW   CONTROL_POS	   ; DESCRIPTION OF POSITIONAL 1		;AN000;
 000D  0011 R				     DW   CONTROL_POS	   ; DESCRIPTION OF POSITIONAL 2		;AN000;
				
 000F  00				     DB   0		   ; MAX SWITCH OPERANDS ALLOWED		;AN000;
				
 0010  00				     DB   0		   ; MAX KEYWORD OPERANDS ALLOWED		;AN000;
								   ; THERE IS NO CONTROL BLOCK			;AN000;
								   ;  DEFINING KEYWORDS 			;AN000;
				
				; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =		;AN000;
					     HEADER <POSITIONAL PARM DESCRIPTOR BLOCK> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-11
POSITIONAL PARM DESCRIPTOR BLOCK			;                        

				;PARSER CONTROL BLOCK DEFINING THE ONLY POSITIONAL PARAMETER, OPTIONAL		;AN000;
				;BOTH POSITIONAL PARAMETER ARE: 						;AN000;
				;	[d:][path][filename[.ext]]						;AN000;
				
					     PUBLIC CONTROL_POS    ;LET LINK MAKE THIS ADDRESSABLE		;AN000;
 0011				CONTROL_POS  LABEL BYTE 	   ;FIRST POSITIONAL DESCRIPTOR FOR FILESPEC,	;AN000;
								   ; OPTIONAL					;AN000;
 0011  0201				     DW   0201H 	   ; CONTROLS TYPE MATCHED			;AN000;
								   ; SELECTED BITS: "FILESPEC" AND "OPTIONAL"	;AN000;
				
								   ; 8000H=NUMERIC VALUE, (VALUE LIST WILL BE CHECKED)	;AN000;
								   ; 4000H=SIGNED NUMERIC VALUE (VALUE LIST WILL BE  ;AN000;
								   ;   CHECKED) 				;AN000;
								   ; 2000H=SIMPLE STRING(VALUE LIST WILL BE CHECKED)  ;AN000;
								   ; 1000H=DATE STRING (VALUE LIST WON'T BE CHECKED)  ;AN000;
								   ; 0800H=TIME STRING (VALUE LIST WON'T BE CHECKED)  ;AN000;
								   ; 0400H=COMPLEX LIST (VALUE LIST WON'T BE CHECKED)  ;AN000;
								   ; 0200H=FILE SPEC (VALUE LIST WON'T BE CHECKED)  ;AN000;
								   ; 0100H=DRIVE ONLY (VALUE LIST WON'T BE CHECKED)  ;AN000;
								   ; 0080H=QUOTED STRING (VALUE LIST WON'T BE CHECKED)  ;AN000;
								   ; 0010H=IGNORE ":" AT END IN MATCH		;AN000;
								   ; 0002H=REPEATS ALLOWED			;AN000;
								   ; 0001H=OPTIONAL				;AN000;
				
 0013  0001				     DW   0001H 	   ;FUNCTION_FLAGS				;AN000;
								   ; 0001H=CAP RESULT BY FILE TABLE		;AN000;
								   ; 0002H=CAP RESULT BY CHAR TABLE		;AN000;
								   ; 0010H=REMOVE ":" AT END			;AN000;
 0015  001A R				     DW   RESULT1	   ; RESULT BUFFER				;AN000;
 0017  0022 R				     DW   NOVALS	   ; VALUE LISTS				;AN000;
 0019  00				     DB   0		   ; NUMBER OF KEYWORD/SWITCH SYNONYMS		;AN000;
								   ;   IN FOLLOWING LIST			;AN000;
				
				; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =		;AN000;
				;RESULTS CONTROL BLOCK FOR THE POSITIONAL PARAMETER				;AN000;
 001A				RESULT1      LABEL BYTE 	   ; BELOW FILLED IN FOR DEFAULTS		;AN000;
 001A  05				     DB   5		   ; TYPE RETURNED: 0=RESERVED, 		;AN000;
								   ;	   1=NUMBER, 2=LIST INDEX,		;AN000;
								   ;	   3=STRING, 4=COMPLEX, 		;AN000;
								   ;	   5=FILESPEC, 6=DRIVE			;AN000;
								   ;	   7=DATE, 8=TIME			;AN000;
								   ;	   9=QUOTED STRING			;AN000;
 001B  FF			RESULT_TAG   DB   0FFH		   ; MATCHED ITEM TAG				;AN000;
 001C  0000				     DW   0		   ;POINTER TO SYNONYM				;AN000;
				
 001E  00000000			RESULT_PTR1  DD   ?		   ; OFFSET OF STRING VALUE			;AN000;
				
				; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =		;AN000;
				;VALUE CONTROL BLOCK								;AN000;
 0022				NOVALS	     LABEL BYTE 	   ;AN000;
 0022  00				     DB   0		   ; NUMBER OF VALUE DEFINITIONS (0 - 3)	;AN000;
				
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
					     HEADER <PARSER - ASK SYSPARM TO DECODE PARAMETERS> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-12
PARSER - ASK SYSPARM TO DECODE PARAMETERS			;               

				;  $SALUT (4,4,9,36)		   ;AN000;
 0023				PARSER PROC NEAR		   ;AN000;
				   PUBLIC PARSER		   ;AN000;
				
				;INPUT: "CURRENT_PARM" = OFFSET TO NEXT PARM IN COMMAND STRING			;AN000;
				;	"ORDINAL" = COUNT OF NEXT PARM TO PARSE 				;AN000;
				;	PSP+81H = TEXT OF DOS COMMAND LINE PARMS STRING 			;AN000;
				
				;OUTPUT: IF SPECIFIED, FIRST PARM GOES TO "PATH1".				;AN000;
				;	 IF SPECIFIED, SECOND PARM GOES TO "PATH2".				;AN000;
				;	 IF EITHER PARM MISSING, THEN "PATHn" STARTS WITH NUL CHAR.		;AN000;
				;	 CARRY SET IF ERROR.							;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
				
				;  $SEARCH COMPLEX		   ;LOOP THRU COMMAND LINE			;AN000;
 0023  EB 31			   JMP SHORT $$SS1
 0025				$$DO1:
								   ;LOOKING AT RETURN CODE FROM SYSPARSE...	;AN000;
 0025  23 C0			       AND  AX,AX		   ;AN008; ;WERE THERE ANY ERRORS?			;AN000;
				;  $EXITIF NE			   ;HAD A PROBLEM				;AN000;
 0027  74 0B			   JE $$IF1
 0029  E8 006E R		       CALL PARSE_ERROR 	   ;DISPLAY REASON FOR ERROR			;AN000;
 002C  B0 01			       MOV  AL,01h		   ;AN000; ;pass back errorlevel ret code
 002E  B4 4C			       mov  ah,4ch
 0030  CD 21			       int  21h
				;  $ORELSE			   ;SINCE NO PROBLEM, SO FAR			;AN000;
 0032  EB 39			   JMP SHORT $$SR1
 0034				$$IF1:
 0034  89 0E 0002 R		       MOV  ORDINAL,CX		   ;SAVE UPDATED COUNT				;AN000;
 0038  89 36 0000 R		       MOV  CURRENT_PARM,SI	   ;REMEMBER HOW FAR I GOT			;AN000;
 003C  8B DA			       MOV  BX,DX		   ;SET DATA BASE REG TO POINT TO		;AN000;
								   ;RESULT BUFFER OF THIS OPERAND		;AN000;
				
 003E  8B 36 001E R		       MOV  SI,WORD PTR RESULT_PTR1 ;GET WHERE STRING IS PUT			;AN000;
								   ;GUESS, THIS IS THE FIRST PARM		;AN000;
 0042  BF 0000 E		       MOV  DI,OFFSET PATH1	   ;GET WHERE STRING IS TO GO			;AN000;
				
								   ;IF PARSING FILENAME INPUTED FROM KEYBOARD	;AN000;
								   ;THEN PARM_COUNT MUST = ZERO_PARM_CT = 0	;AN000;
 0045  3B 0E 0004 R		       CMP  CX,PARM_COUNT	   ;IS THIS THE FIRST PARM OR JUST A FILENAME IN BUFFER ;AN000;
				
				;      $IF  NE			   ;NO, MUST BE THE SECOND PARM 		;AN000;
 0049  74 03			       JE $$IF4
								   ;MADE A BAD GUESS, FIX IT			;AN000;
 004B  BF 0000 E			   MOV	DI,OFFSET PATH2    ;CHANGE DEST TO WHERE SECOND STRING GOES	;AN000;
				;      $ENDIF			   ;AN000;
 004E				$$IF4:
				
								   ;MOVE ASCIIZ STRING FROM DS:SI		;AN000;
								   ;WHERE COMMAND PARSE PUT IT			;AN000;
								   ;TO ES:DI WHERE COMP2 USES IT		;AN000;
				
				;      $DO  COMPLEX		   ;AN000;
 004E  EB 01			       JMP SHORT $$SD6
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-13
PARSER - ASK SYSPARM TO DECODE PARAMETERS			;               

 0050				$$DO6:
 0050  AA				   STOSB		   ;PUT CHAR IN AL TO ES:DI			;AN000;
				;      $STRTDO			   ;AN000;
 0051				$$SD6:
 0051  AC				   LODSB		   ;GET CHAR FROM DS:SI TO AL			;AN000;
 0052  3C 00				   CMP	AL,NUL		   ;IS THAT THE END OF STRING?			;AN000;
				;      $ENDDO E 		   ;IF SO, QUIT 				;AN000;
 0054  75 FA			       JNE $$DO6
				
				;  $STRTSRCH			   ;AN000;
 0056				$$SS1:
 0056  8D 3E 0006 R		       LEA  DI,PARMS		   ;ES:DI = PARSE CONTROL DEFINITON		;AN000;
 005A  8B 36 0000 R		       MOV  SI,CURRENT_PARM	   ;DS:SI = COMMAND STRING, NEXT PARM		;AN000;
 005E  33 D2			       XOR  DX,DX		   ;RESERVED, INIT TO ZERO			;AN000;
 0060  8B 0E 0002 R		       MOV  CX,ORDINAL		   ;OPERAND ORDINAL, INITIALLY ZERO		;AN000;
 0064  E8 0000 E		       CALL SYSPARSE		   ;LOOK AT DOS PARMS				;AN000;
								   ;AX=EXIT CODE				;AN000;
								   ;BL=TERMINATED DELIMETER CODE		;AN000;
								   ;CX=NEW OPERAND ORDINAL			;AN000;
								   ;SI=SET TO PAST SCANNED OPERAND		;AN000;
								   ;DX=SELECTED RESULT BUFFER			;AN000;
 0067  3D FFFF			       CMP  AX,SYSPRM_EX_EOL	   ;IS THAT THE END OF THE PARMS?		;AN000;
								   ;IF NOT, LOOP BACK AND FIND OUT		;AN000;
								   ;WHAT THAT PARM IS				;AN000;
				;  $ENDLOOP E			   ;END OF LIST 				;AN000;
 006A  75 B9			   JNE $$DO1
 006C  F8			       CLC			   ;RETURN FLAG FOR "NO ERROR"			;AN000;
				;  $ENDSRCH			   ;FINISHED WITH DOS COMMAND LINE		;AN000;
 006D				$$SR1:
 006D  C3			   RET				   ;RETURN TO CALLER				;AN000;
 006E				PARSER ENDP			   ;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
				   HEADER <PARSE_ERROR - DISPLAY REASON FOR PARSE ERROR> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Page     1-14
PARSE_ERROR - DISPLAY REASON FOR PARSE ERROR			;            

 006E				PARSE_ERROR PROC NEAR		   ;AN000;
				
				;INPUT: "FIRST_TIME" - IF NON-ZERO, FORCE ERROR CODE TO "TOO MANY PARMS"	;AN000;
				;	 AX - ERROR NUMBER RETURNED FROM PARSE. 				;AN000;
				;OUTPUT: APPROPRIATE ERROR MESSAGE IS DISPLAYED.				;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
				
 006E  A3 0000 E		   MOV	MSGNUM_PPARSE,AX	   ;PASS MESSAGE NUMBER TO DESCRIPTOR		;AN000;
 0071  BA 0000 E		   MOV	DX,OFFSET MSGNUM_PPARSE     ;PASS MESSAGE DESCRIPTOR			 ;AN000;
 0074  8B 1E 0000 R		   MOV	BX,CURRENT_PARM 							;AN000;
 0078				PE_BX:										;AN000;
 0078  3B DE			   CMP	BX,SI			   ;are we past the point the parser stopped ?	;AN000;
 007A  73 08			   JAE	PE_BX_OK		   ;yes, we are done.				;AN000;
 007C  80 3F 20			   CMP	BYTE PTR [BX],20H	   ;by-pass leading blanks			;AN000;
 007F  75 03			   JNE	PE_BX_OK								;AN000;
 0081  43			   INC	BX									;AN000;
 0082  EB F4			   JMP	PE_BX									;AN000;
 0084				PE_BX_OK:									;AN000;
 0084  89 1E 0002 E		   MOV	SUBLIST_24.SUB_VALUE,BX 						;AN000;
				;
				;make a ASCIIZ string out of parameter
				;
 0088				PE_LOOP:									;AN000;
 0088  3B DE			   CMP	BX,SI			   ;are we past the point the parser stopped ?	;AN000;
 008A  73 08			   JAE	PE_OK			   ;yes, we are done.				;AN000;
 008C  80 3F 20			   CMP	BYTE PTR [BX],20H	   ;check for spaec or end of line		;AN000;
 008F  74 03			   JE	PE_OK									;AN000;
 0091  43			   INC	BX									;AN000;
 0092  EB F4			   JMP	PE_LOOP 								;AN000;
 0094				PE_OK:										;AN000;
 0094  C6 07 00			   MOV	byte ptr [BX],00H	   ;end string with zero			;AN000;
				
 0097  E8 0000 E		   CALL SENDMSG 		   ;DISPLAY ERROR MESSAGE			;AN000;
				
 009A  C6 06 0000 E 01		   MOV	EXITFL,EXPAR		   ;ERRORLEVEL CODE TO "PARM ERROR"		;AN000;
 009F  C3			   RET				   ;RETURN TO CALLER				;AN000;
 00A0				PARSE_ERROR ENDP		   ;AN000;					;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
 00A0				CSEG ENDS			   ;AN000;
				   END				   ;AN000;

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Symbols-1


Macros:

		N a m e			Lines

HEADER . . . . . . . . . . . . .  	   4

Structures and Records:

                N a m e                 Width   # fields
                                        Shift   Width   Mask    Initial

FILESPEC . . . . . . . . . . . .  	0050	0008
  FS_DRIVE_ID  . . . . . . . . .  	0000
  FS_COLON . . . . . . . . . . .  	0001
  FS_SLASH1  . . . . . . . . . .  	0002
  FS_PATH  . . . . . . . . . . .  	0003
  FS_SLASH2  . . . . . . . . . .  	0043
  FS_FNAME . . . . . . . . . . .  	0044
  FS_PER . . . . . . . . . . . .  	004C
  FS_EXT . . . . . . . . . . . .  	004D
MSG_DESC . . . . . . . . . . . .  	000C	0006
  MSG_NUM  . . . . . . . . . . .  	0000
  MSG_HANDLE . . . . . . . . . .  	0002
  MSG_SUBLIST  . . . . . . . . .  	0004
  MSG_COUNT  . . . . . . . . . .  	0006
  MSG_CLASS  . . . . . . . . . .  	0008
  MSG_INPUT  . . . . . . . . . .  	000A
PSP  . . . . . . . . . . . . . .  	0100	0003
  PSP_PARMLEN  . . . . . . . . .  	0080
  PSP_COMMAND  . . . . . . . . .  	0081
SUBLIST  . . . . . . . . . . . .  	000B	0009
  SUB_SIZE . . . . . . . . . . .  	0000
  SUB_RES  . . . . . . . . . . .  	0001
  SUB_VALUE  . . . . . . . . . .  	0002
  SUB_VALUE_SEG  . . . . . . . .  	0004
  SUB_ID . . . . . . . . . . . .  	0006
  SUB_FLAGS  . . . . . . . . . .  	0007
  SUB_MAX_WIDTH  . . . . . . . .  	0008
  SUB_MIN_WIDTH  . . . . . . . .  	0009
  SUB_PAD_CHAR . . . . . . . . .  	000A

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

CSEG . . . . . . . . . . . . . .  	00A0	PARA	PUBLIC	'CODE'

Symbols:            

                N a m e         	Type	 Value	 Attr

BUFFD_KEYBD  . . . . . . . . . .  	NUMBER	000A	

CHDIR  . . . . . . . . . . . . .  	NUMBER	003B	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Symbols-2


CLASS_1  . . . . . . . . . . . .  	NUMBER	0001	
CLASS_2  . . . . . . . . . . . .  	NUMBER	0002	
CLASS_A  . . . . . . . . . . . .  	NUMBER	-0001	
CLEAR_KEYBD  . . . . . . . . . .  	NUMBER	000C	
CONTROL_POS  . . . . . . . . . .  	L BYTE	0011	CSEG	Global
CPSW . . . . . . . . . . . . . .  	NUMBER	0040	
CPSW_CHECK . . . . . . . . . . .  	NUMBER	0033	
CPSW_OFF . . . . . . . . . . . .  	NUMBER	0000	
CPSW_ON  . . . . . . . . . . . .  	NUMBER	0001	
CURDIR . . . . . . . . . . . . .  	NUMBER	0047	
CURRENT_PARM . . . . . . . . . .  	L WORD	0000	CSEG	Global

DEFDRV . . . . . . . . . . . . .  	NUMBER	0019	
DIRECT_IO  . . . . . . . . . . .  	NUMBER	0006	
DISP_OUT . . . . . . . . . . . .  	NUMBER	0002	

EAISBINARY . . . . . . . . . . .  	NUMBER	0002	
EASYSTEM . . . . . . . . . . . .  	NUMBER	8000	
EXCB . . . . . . . . . . . . . .  	NUMBER	0001	
EXITFL . . . . . . . . . . . . .  	V BYTE	0000	CSEG	External
EXOK . . . . . . . . . . . . . .  	NUMBER	0000	
EXPAR  . . . . . . . . . . . . .  	NUMBER	0001	
EXTERROR . . . . . . . . . . . .  	NUMBER	0059	
EXT_ATTR_LIST  . . . . . . . . .  	NUMBER	0057	
EXT_OPEN . . . . . . . . . . . .  	NUMBER	006C	
EXT_OPEN_RD  . . . . . . . . . .  	NUMBER	0000	
EXVER  . . . . . . . . . . . . .  	NUMBER	0001	

FCBCLOSE . . . . . . . . . . . .  	NUMBER	0010	
FCBOPEN  . . . . . . . . . . . .  	NUMBER	000F	
FCBRNDBLKREAD  . . . . . . . . .  	NUMBER	0027	
FIRST_PARM_CT  . . . . . . . . .  	NUMBER	0001	
FUNC_CNTRL . . . . . . . . . . .  	NUMBER	0101	

GETVER . . . . . . . . . . . . .  	NUMBER	0030	
GET_CPSW_STATE . . . . . . . . .  	NUMBER	0003	
GET_EXT_ATTR_LIST  . . . . . . .  	NUMBER	0002	
GET_EXT_CNTRY_INFO . . . . . . .  	NUMBER	0065	

HANDLECLOSE  . . . . . . . . . .  	NUMBER	003E	
HANDLEOPEN . . . . . . . . . . .  	NUMBER	003D	

INPUT_LEN  . . . . . . . . . . .  	NUMBER	007F	
IN_STAT  . . . . . . . . . . . .  	NUMBER	000B	

KEYB_INPUT . . . . . . . . . . .  	NUMBER	00FF	
KEYB_INP_CLR . . . . . . . . . .  	NUMBER	00C1	
KEYIN  . . . . . . . . . . . . .  	NUMBER	0001	

MAX_0  . . . . . . . . . . . . .  	NUMBER	0000	
MAX_PATH_LEN . . . . . . . . . .  	NUMBER	0040	
MSGNUM_PPARSE  . . . . . . . . .  	V WORD	0000	CSEG	External

NOVALS . . . . . . . . . . . . .  	L BYTE	0022	CSEG
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Symbols-3


NO_ATTR_LIST . . . . . . . . . .  	NUMBER	0000	
NO_SUBS  . . . . . . . . . . . .  	NUMBER	0000	
NUL  . . . . . . . . . . . . . .  	NUMBER	0000	

ONE_PARM . . . . . . . . . . . .  	NUMBER	0001	
ONE_SUBS . . . . . . . . . . . .  	NUMBER	0001	
OPEN_MODE  . . . . . . . . . . .  	NUMBER	0082	
ORDINAL  . . . . . . . . . . . .  	L WORD	0002	CSEG	Global

PAD_BLK  . . . . . . . . . . . .  	NUMBER	0020	
PARMS  . . . . . . . . . . . . .  	L BYTE	0006	CSEG	Global
PARMSX . . . . . . . . . . . . .  	L BYTE	0009	CSEG
PARM_COUNT . . . . . . . . . . .  	L WORD	0004	CSEG	Global
PARSER . . . . . . . . . . . . .  	N PROC	0023	CSEG	Global	Length = 004B
PARSE_ERROR  . . . . . . . . . .  	N PROC	006E	CSEG	Length = 0032
PARSE_FILENAME . . . . . . . . .  	NUMBER	0029	
PATH1  . . . . . . . . . . . . .  	V BYTE	0000	CSEG	External
PATH2  . . . . . . . . . . . . .  	V BYTE	0000	CSEG	External
PE_BX  . . . . . . . . . . . . .  	L NEAR	0078	CSEG
PE_BX_OK . . . . . . . . . . . .  	L NEAR	0084	CSEG
PE_LOOP  . . . . . . . . . . . .  	L NEAR	0088	CSEG
PE_OK  . . . . . . . . . . . . .  	L NEAR	0094	CSEG

READONLYACCESS . . . . . . . . .  	NUMBER	0000	
RESULT1  . . . . . . . . . . . .  	L BYTE	001A	CSEG
RESULT_PTR1  . . . . . . . . . .  	L DWORD	001E	CSEG
RESULT_TAG . . . . . . . . . . .  	L BYTE	001B	CSEG
RET_FN . . . . . . . . . . . . .  	NUMBER	004C	

SEARCHF  . . . . . . . . . . . .  	NUMBER	0011	
SEARCHN  . . . . . . . . . . . .  	NUMBER	0012	
SENDMSG  . . . . . . . . . . . .  	L NEAR	0000	CSEG	External
SETDTA . . . . . . . . . . . . .  	NUMBER	001A	
SETVECTOR  . . . . . . . . . . .  	NUMBER	0025	
SET_CPSW_STATE . . . . . . . . .  	NUMBER	0004	
STDERR . . . . . . . . . . . . .  	NUMBER	0002	
STDOUT . . . . . . . . . . . . .  	NUMBER	0001	
SUBLIST_24 . . . . . . . . . . .  	V WORD	0000	CSEG	External
SYSPARSE . . . . . . . . . . . .  	L NEAR	0000	CSEG	External
SYSPRM_EX_EOL  . . . . . . . . .  	NUMBER	-0001	
SYSPRM_EX_MANY . . . . . . . . .  	NUMBER	0001	
SYSPRM_EX_MISSING  . . . . . . .  	NUMBER	0002	
SYSPRM_EX_NOT_KEYLIST  . . . . .  	NUMBER	0004	
SYSPRM_EX_NOT_SWLIST . . . . . .  	NUMBER	0003	
SYSPRM_EX_OK . . . . . . . . . .  	NUMBER	0000	
SYSPRM_EX_RANGE  . . . . . . . .  	NUMBER	0006	
SYSPRM_EX_STRING . . . . . . . .  	NUMBER	0008	
SYSPRM_EX_SYNTAX . . . . . . . .  	NUMBER	0009	
SYSPRM_EX_VALUE  . . . . . . . .  	NUMBER	0007	

THREE_SUBS . . . . . . . . . . .  	NUMBER	0003	
TRICK_PARM_CT  . . . . . . . . .  	NUMBER	0002	
TWO_SUBS . . . . . . . . . . . .  	NUMBER	0002	

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:53
COMPPAR.SAL - LOOK AT COMMAND LINE PARMS                    Symbols-4


VERSION  . . . . . . . . . . . .  	NUMBER	0000	

WRITE  . . . . . . . . . . . . .  	NUMBER	0040	

YES  . . . . . . . . . . . . . .  	NUMBER	0001	
YESNO_CHECK  . . . . . . . . . .  	NUMBER	0023	

ZERO_CP  . . . . . . . . . . . .  	NUMBER	0000	
ZERO_PARM_CT . . . . . . . . . .  	NUMBER	0000	

$$DO1  . . . . . . . . . . . . .  	L NEAR	0025	CSEG
$$DO6  . . . . . . . . . . . . .  	L NEAR	0050	CSEG
$$IF1  . . . . . . . . . . . . .  	L NEAR	0034	CSEG
$$IF4  . . . . . . . . . . . . .  	L NEAR	004E	CSEG
$$SD6  . . . . . . . . . . . . .  	L NEAR	0051	CSEG
$$SR1  . . . . . . . . . . . . .  	L NEAR	006D	CSEG
$$SS1  . . . . . . . . . . . . .  	L NEAR	0056	CSEG
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  comppar		
@VERSION . . . . . . . . . . . .  	TEXT  510		


    593 Source  Lines
    617 Total   Lines
    145 Symbols

  47062 + 237823 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
