Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-1


					PAGE	,132								;AN000;
					TITLE	DOS GRAPHICS Command  -	Profile Load Modules #2 
														;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
				;; DOS - GRAPHICS Command
				;; (C) Copyright 1988 Microsoft
				;;										;AN000;
				;; File Name:  GRLOAD.ASM							;AN000;
				;; ----------									;AN000;
				;;										;AN000;
				;; Description: 								;AN000;
				;; ------------ 								;AN000;
				;;   This file contains the modules used to load the				;AN000;
				;;   GRAPHICS profile into resident memory.					;AN000;
				;;										;AN000;
				;;   ************* The EGA Dynamic Save Area will be built (by			;AN000;
				;;   **  NOTE	** CHAIN_INTERRUPTS in file GRINST.ASM) over top of these	;AN000;
				;;   ************* modules to avoid having to relocate this save just before	;AN000;
				;;   terminating.  This is safe since the maximum memory used is		;AN000;
				;;   288 bytes and the profile loading modules are MUCH larger than		;AN000;
				;;   this.  So GRLOAD.ASM MUST be linked before GRINST.ASM and after		;AN000;
				;;   GRPRINT.ASM.								;AN000;
				;;										;AN000;
				;;										;AN000;
				;; Documentation Reference:							;AN000;
				;; ------------------------							;AN000;
				;;	 PLACID Functional Specifications					;AN000;
				;;	 OASIS High Level Design						;AN000;
				;;	 OASIS GRAPHICS I1 Overview						;AN000;
				;;										;AN000;
				;; Procedures Contained in This File:						;AN000;
				;; ----------------------------------						;AN000;
				;;	 LOAD_PROFILE - Main module for profile loading 			;AN000;
				;;										;AN000;
				;; Include Files Required:							;AN000;
				;; -----------------------							;AN000;
				;;	 ?????????? - Externals for profile loading modules			;AN000;
				;;										;AN000;
				;; External Procedure References:						;AN000;
				;; ------------------------------						;AN000;
				;;	 None									;AN000;
				;;										;AN000;
				;; Linkage Instructions:							;AN000;
				;; ---------------------							;AN000;
				;;	 Refer to GRAPHICS.ASM							;AN000;
				;;										;AN000;
				;; Change History:								;AN000;
				;; ---------------								;AN000;
				;;										;AN000;
				;;										;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
								       ;;					;AN000;
								       ;;					;AN000;
 0000				CODE	SEGMENT PUBLIC 'CODE'          ;;                                       ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-2


								       ;;					;AN000;
					INCLUDE STRUC.INC	       ;;					;AN000;
			     C	;;STRUC--Stucture Macro Library
			     C	;;Optimizing Version 2.30  03/31/87
			     C	
			     C	else	       ;else for if1
			     C	$Pop	$Temp
			     C	;;if	   $Temp ne $NoType
			     C	.xcref $NoConj,$And,$Or,$Short,$Near,$NearToShort,$AndOr,$Temp,$Temp2,$Dist
			     C	.xcref $NoType,$ConjIfType,$IfType,$ElseType,$WhileType,$ConjWhileType
			     C	.xcref $RepeatType,$ConjUntilType,$ForType,$ConjLeaveType,jncxz
			     C	.xcref $SelectType,$WhenType,$OtherwiseType,$ConjWhenType
			     C	.xcref jeq,jgt,jlt,jneq,jngt,jnlt,jnna,jnnae,jnnb,jnnbe,jnnc,jnncxz
			     C	.xcref jnne,jnng,jnnge,jnnl,jnnle,jnno,jnnp,jnns,jnnz,jnpe,jnpo,$BuildJump
			     C	.xcref $GetConj,$GetDist,$Poke,$Peek,$Push,$Pop,$Label,$CondJump,$CondLoop,$Test
			     C	.xcref $TopTest,$leave2,$until2,$StrucError,j,jn,jand,jnand,jnnand
			     C	.xcref jnnonzero,jnonzero,jnzero,jzero
			     C	.xcref $st,$sn,$OrFound,$LoopEnd,$LeaveFound,$DefDist
			     C	.xcref $LastLabel,$LastLabelOrg,$EquateLabel,$TraceLabel,$CondJump2,$ncxz
			     C	endif
			     C	
			     C	
 = 0000                      C	$st	= 0
 = 0000                      C	$sn	= 0
 = 0000                      C	$OrFound = 0
 = 0000                      C	$LoopEnd = 0
 = 0000                      C	$LeaveFound = 0
 =-0001                      C	$LastLabel = -1
 = 0000                      C	$LastLabelOrg = $
 = 0003                      C	$DefDist= $Short
			     C	$Push	%$NoType
								       ;;					;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
				;;										;AN000;
				;; Public Symbols								;AN000;
				;;										;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
								       ;;					;AN000;
								       ;;					;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
								       ;;					;AN000;
					ASSUME	CS:CODE,DS:CODE        ;;					;AN000;
								       ;;					;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
								       ;;					;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Set assemble switches for parse code that is not required!!			;AN000;
				;-------------------------------------------------------------------------------;AN000;
 = 0000				DateSW	      EQU     0 							;AN000;
 = 0000				TimeSW	      EQU     0 							;AN000;
 = 0000				CmpxSW	      EQU     0 							;AN000;
 = 0000				DrvSW	      EQU     0 							;AN000;
 = 0000				QusSW	      EQU     0 							;AN000;
 = 0000				KeySW	      EQU     0 							;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-3


				;Val1SW        EQU     0							;AN000;
				;Val2SW        EQU     0							;AN000;
														;AN000;
				       PUBLIC  SYSPARSE 	       ;;					;AN000;
				       INCLUDE PARSE.ASM	       ;; parser code				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-4


			     C		PAGE				;AN000;
			     C	;  $SALUT (4,4,8,41)
			     C	;(deleted).XLIST
			     C	;(deleted)INCLUDE   STRUC.INC ;AN020;structured macro definitions for .IF,.ELSE etc.
			     C	;(deleted).LIST
			     C	;
			     C	; NOTE:   basesw must be set properly to allow the PARSER to access psdata.
			     C	;	   - basesw undefined	 means	 CS seg. override for psdata access.
			     C	;	   - basesw = 1 	 means	 DS seg. override for psdata access &
			     C	;					 DS must point to psdata.
			     C	;	   - basesw = 0 	 means	 ES seg. override for psdata access &
			     C	;					 ES must point to psdata.
			     C	;
			     C	;
			     C	IFNDEF basesw				;AN022;
 =                           C	   psdata_seg EQU   CS			;AN022;
			     C	ENDIF					;AN022;
			     C	
			     C	if incsw				;AN000; If incsw = 1 then (tm03)
			     C	   include psdata.inc			;AN000;    include psdata.inc (tm03)
			     C	;*******************************************************************
			     C	; Parser include file
			     C	;*******************************************************************
			     C	;
			     C	;**** Default assemble switches definition *************************
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	;**** Equation field
			     C	;-------- Character code definition
			     C	
 = 0081                      C	$P_DBSP1	   equ	81h		;AN000; 1st byte of DBCS blank
 = 0040                      C	$P_DBSP2	   equ	40h		;AN000; 2nd byte of DBCS blank
 = 002E                      C	$P_Period	   equ	"."             ;AN020;
 = 002F                      C	$P_Slash	   equ	"/"             ;AN020;
 = 0020                      C	$P_Space	   equ	" "             ;AN000; SBCS blank
 = 002C                      C	$P_Comma	   equ	","             ;AN000;
 = 002F                      C	$P_Switch	   equ	"/"             ;AN000;
 = 003D                      C	$P_Keyword	   equ	"="             ;AN000;
 = 003A                      C	$P_Colon	   equ	":"             ;AN000;
 = 002B                      C	$P_Plus 	   equ	"+"             ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-5


 = 002D                      C	$P_Minus	   equ	"-"             ;AN000;
 = 0029                      C	$P_Rparen	   equ	")"             ;AN000;
 = 0028                      C	$P_Lparen	   equ	"("             ;AN000;
			     C	;(deleted ;AN025;) $P_SQuote	      equ  "'"
 = 0022                      C	$P_DQuote	   equ	'"'             ;AN000;
 = 0000                      C	$P_NULL 	   equ	0		;AN000;
 = 0009                      C	$P_TAB		   equ	9		;AN000;
 = 000D                      C	$P_CR		   equ	0Dh		;AN000;
 = 000A                      C	$P_LF		   equ	0Ah		;AN000;
 = 0080                      C	$P_ASCII80	   equ	80h		;AN000; ASCII 80h character code
			     C	
			     C	;-------- Masks
 = 0020                      C	$P_Make_Lower	   equ	20h		;AN000; make lower case character
 = 00DF                      C	$P_Make_Upper	   equ	0ffh-$P_Make_Lower ;AN000; make upper case character
			     C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-6


			     C			   PAGE 		   ;AN000;
			     C	;-------- DOS function call related equs
			     C	
 = 3800                      C	$P_DOS_Get_CDI	   equ	3800h		;AN000; get country dependent information
			     C						; by this call, following information
			     C	$P_CDI		   struc		;AN000; is returned.
 0000  0000                  C	$P_CDI_DateF	   dw	0		;AN000;
 0002  00 00 00 00 00        C	$P_CDI_Money	   db	0,0,0,0,0	;AN000;
 0007  00 00                 C	$P_CDI_1000	   db	0,0		;AN000;
 0009  00 00                 C	$P_CDI_Dec	   db	0,0		;AN000;
 000B  00 00                 C	$P_CDI_DateS	   db	0,0		;AN000;
 000D  00 00                 C	$P_CDI_TimeS	   db	0,0		;AN000;
 000F  00                    C			   db	0		;AN000;
 0010  00                    C			   db	0		;AN000;
 0011  00                    C	$P_CDI_TimeF	   db	0		;AN000;
 0012  0000 0000             C			   dw	0,0		;AN000;
 0016  00 00                 C			   db	0,0		;AN000;
 0018  0005[                 C			   dw	5 dup(0)	;AN000;
	   0000              C	
			 ]   C	
			     C	
 0022                        C	$P_CDI		   ends 		;AN000;
			     C	
 = 0000                      C	$P_Date_MDY	   equ	0		;AN000;
 = 0001                      C	$P_Date_DMY	   equ	1		;AN000;
 = 0002                      C	$P_Date_YMD	   equ	2		;AN000;
			     C	;-------------
 = 6300                      C	$P_DOS_GetEV	   equ	6300h		;AN000; get DBCS EV call
			     C						;AN000; DS:SI will points to DBCS EV
			     C	;-------------
 = 0065                      C	$P_DOS_Get_TBL	   equ	65h		;AN000; get uppercase table call
			     C						;AN000; following parameters are set
			     C						;AN000; to get casemap table.
 =-0001                      C	$P_DOSTBL_Def	   equ	-1		;AN000; get default
 = 0005                      C	$P_DOSTBL_BL	   equ	5		;AN000; buffer length for Tbl pointer
 = 0004                      C	$P_DOSTBL_File	   equ	4		;AN000; get file uppercase table
 = 0002                      C	$P_DOSTBL_Char	   equ	2		;AN000; get character uppercase table
			     C						; By this call following information
			     C						; is returned.
			     C	$P_DOS_TBL	   struc		;AN000;
 0000  00                    C	$P_DOS_InfoID	   db	0		;AN000; information id for the table
 0001  0000                  C	$P_DOS_TBL_Off	   dw	0		;AN000; offset address of the table
 0003  0000                  C	$P_DOS_TBL_Seg	   dw	0		;AN000; segment address of the table
 0005                        C	$P_DOS_TBL	   ends 		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-7


			     C			   PAGE 		;AN000;
			     C	;---------------------------------------------------------------------------------------------------
				------
			     C	; PARMS 	LABEL	BYTE
			     C	;		DW	PARMSX
			     C	;		DB	2			; NUMBER OF STRINGS (0, 1, 2)
			     C	;		DB	length			; LENGTH OF THE NEXT LIST, 0 IF NONE
			     C	;		DB	" .. "                  ; EXTRA DELIMITER LIST,
			     C	;						; TYPICAL ARE ";", "="
			     C	;						; "," & WHITESPACE ALWAYS
			     C	;		DB	length			; LENGTH OF THE NEXT LIST, 0 IF NONE
			     C	;		DB	" .. "                  ; EXTRA END OF LINE LIST, CR, LF OR 0 ALWAYS
			     C	;---------------------------------------------------------------------------------------------------
				------
			     C	
			     C	;-------------------------------- PARMS block structure
			     C	$P_PARMS_Blk	   struc		;AN000;
 0000  0000                  C	$P_PARMSX_Address  dw	0		;AN000; Address of PARMSX
 0002  00                    C	$P_Num_Extra	   db	0		;AN000; Number of extra stuff
 0003  00                    C	$P_Len_Extra_Delim db	0		;AN000; Length of extra delimiter
 0004                        C	$P_PARMS_Blk	   ends 		;AN000;
			     C	
 = 0004                      C	$P_Len_PARMS	   equ	4		;AN000;
 = 0000                      C	$P_I_Use_Default   equ	0		;AN000; no extra stuff specified
 = 0001                      C	$P_I_Have_Delim    equ	1		;AN000; extra delimiter specified
 = 0002                      C	$P_I_Have_EOL	   equ	2		;AN000; extra EOL specified
			     C	
			     C	;---------------------------------------------------------------------------------------------------
				------
			     C	; PARMSX	LABEL	BYTE
			     C	;		DB	minp,maxp		; MIN, MAX POSITIONAL OPERANDS ALLOWED
			     C	;		DW	CONTROL 		; DESCRIPTION OF POSITIONAL 1
			     C	;		:				; REPEATS maxp-1 TIMES
			     C	;		DB	maxs			; # OF SWITCHES
			     C	;		DW	CONTROL 		; DESCRIPTION OF SWITCH 1
			     C	;		:				; REPEATS maxs-1 TIMES
			     C	;		DB	maxk			; # OF KEYWORD
			     C	;		DW	CONTROL 		; DESCRIPTION OF KEYWORD 1
			     C	;		:				; REPEATS maxk-1 TIMES
			     C	;---------------------------------------------------------------------------------------------------
				------
			     C	
			     C	;-------------------------------- PARMSX block structure
			     C	$P_PARMSX_Blk	   struc		;AN000;
 0000  00                    C	$P_MinP 	   db	0		;AN000; Minimum positional number
 0001  00                    C	$P_Maxp 	   db	0		;AN000; Maximum positional number
 0002  0000                  C	$P_1st_Control	   dw	0		;AN000; Address of the 1st CONTROL block
 0004                        C	$P_PARMSX_Blk	   ends 		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-8


			     C			   PAGE 		;AN000;
			     C	;---------------------------------------------------------------------------------------------------
				------
			     C	; << Control field definition  >>
			     C	;
			     C	;
			     C	;CONTROL   LABEL   BYTE
			     C	;	   DW	   MATCH_FLAGS	   ; CONTROLS TYPE MATCHED
			     C	;				   ; 8000H=NUMERIC VALUE, (VALUE LIST WILL BE CHECKED)
			     C	;				   ; 4000H=SIGNED NUMERIC VALUE (VALUE LIST WILL BE CHECKED)
			     C	;				   ; 2000H=SIMPLE STRING(VALUE LIST WILL BE CHECKED)
			     C	;				   ; 1000H=DATE STRING (VALUE LIST WON'T BE CHECKED)
			     C	;				   ; 0800H=TIME STRING (VALUE LIST WON'T BE CHECKED)
			     C	;				   ; 0400H=COMPLEX LIST (VALUE LIST WON'T BE CHECKED)
			     C	;				   ; 0200H=FILE SPEC (VALUE LIST WON'T BE CHECKED)
			     C	;				   ; 0100H=DRIVE ONLY (VALUE LIST WON'T BE CHECKED)
			     C	;				   ; 0080H=QUOTED STRING (VALUE LIST WON'T BE CHECKED)
			     C	;				   ; 0010H=IGNORE ":" AT END IN MATCH
			     C	;				   ; 0002H=REPEATS ALLOWED
			     C	;				   ; 0001H=OPTIONAL
			     C	;	   DW	   FUNCTION_FLAGS
			     C	;				   ; 0001H=CAP RESULT BY FILE TABLE
			     C	;				   ; 0002H=CAP RESULT BY CHAR TABLE
			     C	;				   ; 0010H=REMOVE ":" AT END
			     C	; (tm10)			   ; 0020H=colon is not necessary for switch
			     C	;	   DW	   RESULT	   ; RESULT BUFFER
			     C	;	   DW	   VALUES	   ; VALUE LISTS
			     C	;	   DB	   nid		   ; NUMBER OF KEYWORD/SWITCH SYNONYMS IN FOLLOWING LIST
			     C	;	   DB	   "...",0         ; IF n >0, KEYWORD 1
			     C	;	   :
			     C	;
			     C	;Note:
			     C	;    - The MATCH_FLAG is bit significant. You can set, for example, TIME bit and
			     C	;      DATE bit simalteniously.
			     C	;
			     C	;      The parser examins each bit along with the following priority.
			     C	;
			     C	;      COMPLEX -> DATE -> TIME -> NUMERIC VAL -> SIGNED NUMERIC VAL -> DRIVE ->
			     C	;      FILE SPEC -> SIMPLE STRING.
			     C	;
			     C	;
			     C	;    - When the FUNCTION_FLAG is 0001 or 0002, the STRING pointed to by a pointer
			     C	;      in the result buffer is capitalized.
			     C	;
			     C	;    - Match_Flags 0001H and 0002H have meaning only for the positional.
			     C	;
			     C	;
			     C	;    - The "...",0 (bottom most line) does require '=' or '/'. When you need a
			     C	;      switch, for example, '/A', then STRING points to;
			     C	;
			     C	;			DB    1 	; number of following synonyms
			     C	;			DB   '/A',0
			     C	;
			     C	;      When you need a keyword, for example, 'CODEPAGE=', then "...",0 will be;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-9


			     C	;
			     C	;			DB    1 	; number of following synonyms
			     C	;			DB   'CODEPAGE=',0
			     C	;
			     C	;
			     C	;    - "..." must consist of upper case characters only because the parser
			     C	;      performs pattern matching after converting input to upper case (by
			     C	;      using the current country upper case table)
			     C	;
			     C	;
			     C	;    - One "..." can contain only one switch or keyword. If you need, for
			     C	;      example /A and /B, the format will be;
			     C	;
			     C	;			DB    2 	; number of following synonyms
			     C	;			DB    '/A',0
			     C	;			DB    '/B',0
			     C	;---------------------------------------------------------------------------------------------------
				------
			     C	
			     C	;**** Match_Flags
			     C	
 = 8000                      C	$P_Num_Val	   equ	8000h		;AN000; Numeric Value
 = 4000                      C	$P_SNum_Val	   equ	4000h		;AN000; Signed numeric value
 = 2000                      C	$P_Simple_S	   equ	2000h		;AN000; Simple string
 = 1000                      C	$P_Date_S	   equ	1000h		;AN000; Date string
 = 0800                      C	$P_Time_S	   equ	0800h		;AN000; Time string
 = 0400                      C	$P_Cmpx_S	   equ	0400h		;AN000; Complex string
 = 0200                      C	$P_File_Spc	   equ	0200h		;AN000; File Spec
 = 0100                      C	$P_Drv_Only	   equ	0100h		;AN000; Drive Only
 = 0080                      C	$P_Qu_String	   equ	0080h		;AN000; Quoted string
 = 0010                      C	$P_Ig_Colon	   equ	0010h		;AN000; Ignore colon at end in match
 = 0002                      C	$P_Repeat	   equ	0002h		;AN000; Repeat allowed
 = 0001                      C	$P_Optional	   equ	0001h		;AN000; Optional
			     C	
			     C	;**** Function flags
			     C	
 = 0001                      C	$P_CAP_File	   equ	0001h		;AN000; CAP result by file table
 = 0002                      C	$P_CAP_Char	   equ	0002h		;AN000; CAP result by character table
 = 0010                      C	$P_Rm_Colon	   equ	0010h		;AN000; Remove ":" at the end
 = 0020                      C	$P_colon_is_not_necessary equ 0020h	;AN000;(tm10) /+10 and /+:10
			     C	
			     C	;-------------------------------- Control block structure
			     C	$P_Control_Blk	   struc		;AN000;
 0000  0000                  C	$P_Match_Flag	   dw	0		;AN000; Controls type matched
 0002  0000                  C	$P_Function_Flag   dw	0		;AN000; Function should be taken
 0004  0000                  C	$P_Result_Buf	   dw	0		;AN000; Result buffer address
 0006  0000                  C	$P_Value_List	   dw	0		;AN000; Value list address
 0008  00                    C	$P_nid		   db	0		;AN000; # of keyword/SW synonyms
 0009  00                    C	$P_KeyorSW	   db	0		;AN000; keyword or sw
 000A                        C	$P_Control_Blk	   ends 		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-10


			     C			   PAGE 		;AN000;
			     C	;---------------------------------------------------------------------------------------------------
				------
			     C	; << Value List Definition >>
			     C	;
			     C	;VALUES 	LABEL	BYTE
			     C	;		DB	nval			; NUMBER OF VALUE DEFINITIONS (0 - 3)
			     C	;	     Ú
			     C	;	     ³	DB	nrng			; NUMBER OF RANGES
			     C	;	     ³ ÚDB	ITEM_TAG		; RETURN VALUE IF RANGE MATCHED
			     C	;	     ³ ÀDD	X,Y			; RANGE OF VALUES
			     C	;	     ³	:
			     C	;	     ³	DB	nnval			; NUMBER OF CHOICES
			     C	;	     ³ ÚDB	ITEM_TAG		; RETURN VALUE IF NUMBER CHOICE MATCHED
			     C	;	     ³ ÀDD	VALUE			; SPECIFIC CHOICE IF NUMBER
			     C	;	     ³	:
			     C	;	     ³	DB	nstrval 		; NUMBER OF CHOICES
			     C	;	     ³ ÚDB	ITEM_TAG		; RETURN VALUE IF STRING CHOICE MATCHED
			     C	;	     ³ ÀDW	STRING			; SPECIFIC CHOICE IF STING
			     C	;	     À	:
			     C	;
			     C	;STRING 	DB	"...",0                 ; ASCIIZ STRING IMAGE
			     C	;
			     C	;Note:
			     C	;    - ITEM_TAG must not be 0FFH, which will be used in the result buffer
			     C	;      when no choice lists are provided.
			     C	;
			     C	;    - STRING must consist of upper case characters only because the parser
			     C	;      performs pattern matching after converting input to upper case (by
			     C	;      using the current country upper case table)
			     C	;---------------------------------------------------------------------------------------------------
				------
			     C	
 = 0000                      C	$P_nval_None	   equ	0		;AN000; no value list ID
 = 0001                      C	$P_nval_Range	   equ	1		;AN000; range list ID
 = 0002                      C	$P_nval_Value	   equ	2		;AN000; value list ID
 = 0003                      C	$P_nval_String	   equ	3		;AN000; string list ID
 = 0009                      C	$P_Len_Range	   equ	9		;AN000; Length of a range choice(two DD plus one DB)
 = 0005                      C	$P_Len_Value	   equ	5		;AN000; Length of a value choice(one DD plus one DB)
 = 0003                      C	$P_Len_String	   equ	3		;AN000; Length of a string choice(one DW plus one DB)
 = 0000                      C	$P_No_nrng	   equ	0		;AN000; (tm07) no nrng. nnval must not be 0.
			     C	
			     C	$P_Val_List	   struc		;AN000;
 0000  00                    C	$P_NumofList	   db	0		;AN000; number of following choice
 0001  0000                  C	$P_Val_XL	   dw	0		;AN000; lower word of value
 0003  0000                  C	$P_Val_XH	   dw	0		;AN000; higher word of value
 0005  0000                  C	$P_Val_YL	   dw	0		;AN000; lower word of another value
 0007  0000                  C	$P_Val_YH	   dw	0		;AN000; higher word of another value
 0009                        C	$P_Val_List	   ends 		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-11


			     C			   PAGE 		;AN000;
			     C	;---------------------------------------------------------------------------------------------------
				------
			     C	; << Result Buffer Definition  >>
			     C	;
			     C	;RESULT 	LABEL	BYTE			; BELOW FILLED IN FOR DEFAULTS
			     C	;		DB	type			; TYPE RETURNED: 0=RESERVED,
			     C	;						;	1=NUMBER, 2=LIST INDEX,
			     C	;						;	3=STRING, 4=COMPLEX,
			     C	;						;	5=FILESPEC, 6=DRIVE
			     C	;						;	7=DATE, 8=TIME
			     C	;						;	9=QUOTED STRING
			     C	;		DB	ITEM_TAG		; MATCHED ITEM TAG
			     C	;
			     C	;		dw	synonym@		; es:@ points to found SYNONYM if provided.
			     C	;
			     C	;
			     C	;	    Ú	DD	n			; VALUE IF NUMBER
			     C	;	    ³ or
			     C	;	    ³	DW	i			; INDEX (OFFSET) INTO VALUE LIST
			     C	;	    ³					; (ES presents Segment address)
			     C	;	    ³ or
			     C	;	    ³	DD	STRING			; OFFSET OF STRING VALUE
			     C	;	    ³ or
			     C	;	    ³	DB	drv			; DRIVE NUMBER (1-A, 2-B,..., 26-Z)
			     C	;	    ³ or
			     C	;	    ³	DW	YEAR	   ;(1980-2099)  IN CASE OF DATE
			     C	;	    ³	DB	MONTH	   ;(1-12)	 Note: Range check is not performed.
			     C	;	    ³	DB	DATE	   ;(1-31)	       0 is filled when the corresponding field was 
				not specified.
			     C	;	    ³ or
			     C	;	    ³	DB	HOUR	   ;(0-23)	  IN CASE OF TIME
			     C	;	    ³	DB	MINUTES    ;(0-59)	  Note: Range check is not performed .
			     C	;	    ³	DB	SECONDS    ;(0-59)		0 is filled when the corresponding field was
				 not specified .
			     C	;	    ³	DB	HUNDREDTHS ;(0-99)
			     C	;	    À
			     C	;
			     C	;
			     C	;Note: ITEM_TAG is 0FFH when the caller does not specify the choice
			     C	;      list.
			     C	;
			     C	;      YEAR: If the input value for the year is less than 100, parser
			     C	;	     adds 1900 to it.  For example, when 87 is input to parser for
			     C	;	     the year value, he returns 1987.
			     C	;---------------------------------------------------------------------------------------------------
				------
			     C	
			     C	;-------------------------------- Result block structure
			     C	$P_Result_Blk	   struc		;AN000;
 0000  00                    C	$P_Type 	   db	0		;AN000; Type returned
 0001  00                    C	$P_Item_Tag	   db	0		;AN000; Matched item tag
 0002  0000                  C	$P_SYNONYM_Ptr	   dw	0		;AN000; pointer to Synonym list returned
 0004  00 00 00 00           C	$P_Picked_Val	   db	0,0,0,0 	;AN000; value
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-12


 0008                        C	$P_Result_Blk	   ends 		;AN000;
			     C	;--------------------------------
			     C	;**** values for the type field in the result block
			     C	
 = 0000                      C	$P_EOL		   equ	0		;AN000; End of line
 = 0001                      C	$P_Number	   equ	1		;AN000; Number
 = 0002                      C	$P_List_Idx	   equ	2		;AN000; List Index
 = 0003                      C	$P_String	   equ	3		;AN000; String
 = 0004                      C	$P_Complex	   equ	4		;AN000; Complex
 = 0005                      C	$P_File_Spec	   equ	5		;AN000; File Spec
 = 0006                      C	$P_Drive	   equ	6		;AN000; Drive
 = 0007                      C	$P_Date_F	   equ	7		;AN000; Date
 = 0008                      C	$P_Time_F	   equ	8		;AN000; Time
 = 0009                      C	$P_Quoted_String   equ	9		;AN000; Quoted String
			     C	
 = 00FF                      C	$P_No_Tag	   equ	0FFH		;AN000; No ITEM_TAG found
			     C	;**** Return code
			     C	;
			     C	; following return code will be returned in the AX register.
			     C	
 = 0000                      C	$P_No_Error	   equ	0		;AN000; No error
 = 0001                      C	$P_Too_Many	   equ	1		;AN000; Too many operands
 = 0002                      C	$P_Op_Missing	   equ	2		;AN000; Required operand missing
 = 0003                      C	$P_Not_In_SW	   equ	3		;AN000; Not in switch list provided
 = 0004                      C	$P_Not_In_Key	   equ	4		;AN000; Not in keyword list provided
 = 0006                      C	$P_Out_Of_Range    equ	6		;AN000; Out of range specified
 = 0007                      C	$P_Not_In_Val	   equ	7		;AN000; Not in value list provided
 = 0008                      C	$P_Not_In_Str	   equ	8		;AN000; Not in string list provided
 = 0009                      C	$P_Syntax	   equ	9		;AN000; Syntax error
 =-0001                      C	$P_RC_EOL	   equ	-1		;AN000; End of command line
			     C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-13


			     C			   PAGE 		;AN000;
			     C	;********************** Local Data *************************************
 0000  0000                  C	$P_ORDINAL	   dw	0		;AN000; Operand ordinal save area
 0002  0000                  C	$P_RC		   dw	0		;AN000; Return code from parser
 0004  0000                  C	$P_SI_Save	   dw	0		;AN000; Pointer of command buffer
 0006  0000                  C	$P_DX		   dw	0		;AN000; Return result buffer address
 0008  00                    C	$P_Terminator	   db	0		;AN000; Terminator code (ASCII)
 0009  0000                  C	$P_DBCSEV_OFF	   dw	0		;AN000; Offset of DBCS EV
 000B  0000                  C	$P_DBCSEV_SEG	   dw	0		;AN000; Segment of DBCS EV
 000D  0000                  C	$P_Flags	   dw	0		;AN000; Parser internal flags
 = 000D                      C	$P_Flags1	   equ	byte ptr $P_Flags ;AN038; to reference first byte flags
 = 000E                      C	$P_Flags2	   equ	byte ptr $P_Flags+1 ;AN038; to reference second byte flags only
			     C	
			     C	;in second byte of $P_Flags, referenced as $P_Flags2:
 = 0001                      C	$P_equ		   equ	01h	      ;AN000; "=" packed in string buffet
 = 0002                      C	$P_Neg		   equ	02h	      ;AN000; Negative value
 = 0004                      C	$P_Time12	   equ	04h	      ;AN000; set when PM is specified
 = 0008                      C	$P_Key_Cmp	   equ	08h	      ;AN000; set when keyword compare
 = 0010                      C	$P_SW_Cmp	   equ	10h	      ;AN000; set when switch compare
 = 0020                      C	$P_Extra	   equ	20h	      ;AN000; set when extra delimiter found
 = 0040                      C	$P_SW		   equ	40h	      ;AN000; set when switch found (tm08)
 = 0080                      C	$P_Signed	   equ	80h	      ;AN000; signed numeric specified
			     C	
			     C	;in first byte of $P_Flags, referenced as $P_Flags1:
 = 0001                      C	$P_time12am	   equ	01h	      ;AN038; set when AM is specified on time
 = 0002                      C	$P_TIME_AGAIN	   EQU	02H	      ;AN039; SET WHEN READY TO RE-PARSE TIME
			     C	
 000F  0000                  C	$P_SaveSI_Cmpx	   dw	0		;AN000; save si for later use by complex
 0011  0000                  C	$P_KEYorSW_Ptr	   dw	0		;AN000; points next to "=" or ":" code
 0013  0000                  C	$P_Save_EOB	   dw	0		;AN000; save pointer to EOB
 0015  0000                  C	$P_Found_SYNONYM   dw	0		;AN000; es:@ points to found synonym
			     C	
 0017  0080[                 C	$P_STRING_BUF	   db	128 dup(0)	;AN000; Pick a operand from command line
	   00                C	
			 ]   C	
			     C	
 = 0097                      C	$P_STRING_BUF_END  equ	$		;AN000;
 0097  FF                    C	$P_Char_CAP_Ptr    db	0ffh		;AN000; info id
 0098  0000                  C			   dw	0		;AN000; offset	of char case map table
 009A  0000                  C			   dw	0		;AN000; segment of char case map table
			     C	IF		   CAPSW		;AN000;(Check if uppercase conversion is supported)
 009C  FF                    C	$P_File_CAP_Ptr    db	0ffh		;AN000; info id
 009D  0000                  C			   dw	0		;AN000; offset	of file case map table
 009F  0000                  C			   dw	0		;AN000; segment of file case map table
			     C	ENDIF					;AN000;(of CAPSW)
			     C	; (tm06) IF	   FileSW		;AN000;(Check if file spec is supported)
			     C	IF		   FileSW+DrvSW 	;AN000;(Check if file spec is supported)
 00A1  5B 5D 7C 3C 3E 2B     C	$P_FileSp_Char	   db	'[]|<>+=;"'     ;AN000; delimitter of file spec
       3D 3B 22              C	
 = 0009                      C	$P_FileSp_Len	   equ	$-$P_FileSp_Char ;AN000;
			     C	ENDIF					;AN000;(of FileSW)
			     C	; (tm05) IF	   QusSW		;AN000;(Check if quoted string is supported)
			     C	;(deleted ;AN025;) IF		      QusSW+CmpxSW	   ; (tm05) ;AN000;(Check if quoted string i
				s supported)
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-14


			     C	;(deleted ;AN025;) $P_SorD_Quote      db   0		   ;AN000; keep double or single quote
			     C	;(deleted ;AN025;) ENDIF				   ;AN000;(of QueSW)
			     C	
			     C	; delimiter parsing
 = 0001                      C	$P_colon_period    equ	01		;AN032; check for colon & period
 = 0002                      C	$P_period_only	   equ	02		;AN032; check only for period
			     C	
			     C	;filespec error flag
 00AA  00                    C	$P_err_flag	   db	00		;AN033; flag set if filespec parsing error
			     C						;AN033;  was detected.
 = 0001                      C	$P_error_filespec  equ	01		;AN033; mask to set flag
			     C	;***********************************************************************
			     C	endif					;AN000; endif		  (tm03)
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-15


			     C	   PAGE 				;AN000;
			     C	;***********************************************************************
			     C	; SysParse;
			     C	;
			     C	;  Function : Parser Entry
			     C	;
			     C	;  Input: DS:SI -> command line
			     C	;	  ES:DI -> parameter block
			     C	;	  psdata_seg -> psdata.inc
			     C	;	  CX = operand ordinal
			     C	;
			     C	;	  Note:  ES is the segment containing all the control blocks defined
			     C	;		 by the caller, except for the DOS COMMAND line parms, which
			     C	;		 is in DS.
			     C	;
			     C	;  Output: CY = 1   error of caller, means invalid parameter block or
			     C	;		    invalid value list. But this parser does NOT implement
			     C	;		    this feature. Therefore CY always zero.
			     C	;
			     C	;	   CY = 0   AX = return code
			     C	;		    BL = terminated delimiter code
			     C	;		    CX = new operand ordinal
			     C	;		    SI = set past scaned operand
			     C	;		    DX = selected result buffer
			     C	;
			     C	; Use:	$P_Skip_Delim, $P_Chk_EOL, $P_Chk_Delim, $P_Chk_DBCS
			     C	;	$P_Chk_Swtch, $P_Chk_Pos_Control, $P_Chk_Key_Control
			     C	;	$P_Chk_Sw_Control, $P_Fill_Result
			     C	;
			     C	; Vars: $P_Ordinal(RW), $P_RC(RW), $P_SI_Save(RW), $P_DX(R), $P_Terminator(R)
			     C	;	$P_SaveSI_Cmpx(W), $P_Flags(RW), $P_Found_SYNONYM(R), $P_Save_EOB(W)
			     C	;
			     C	;-------- Modification History -----------------------------------------
			     C	;
			     C	;  4/04/87 : Created by K. K,
			     C	;  4/28/87 : $P_Val_YH assemble error (tm01)
			     C	;	   : JMP SHORT assemble error (tm02)
			     C	;  5/14/87 : Someone doesn't want to include psdata (tm03)
			     C	;  6/12/87 : $P_Bridge is missing when TimeSw equ 0 and (CmpxSw equ 1 or
			     C	;	     DateSW equ 1)	      (tm04)
			     C	;  6/12/87 : $P_SorD_Quote is missing when QusSw equ 0 and CmpxSW equ 1
			     C	;				      (tm05) in PSDATA.INC
			     C	;  6/12/87 : $P_FileSp_Char and $P_FileSP_Len are missing
			     C	;	     when FileSW equ 0 and DrvSW equ 1 (tm06) in PSDATA.INC
			     C	;  6/18/87 : $VAL1 and $VAL3, $VAL2 and $VAL3 can be used in the same
			     C	;	     value-list block	      (tm07)
			     C	;  6/20/87 : Add $P_SW to check if there's an omiting parameter after
			     C	;	     switch (keyword) or not. If there is, backup si for next call
			     C	;	     (tm08)
			     C	;  6/24/87 : Complex Item checking does not work correctly when CmpSW equ 1
			     C	;	     and DateSW equ 0 and TimeSW equ 0 (tm09)
			     C	;  6/24/87 : New function flag $P_colon_is_not_necessary for switch
			     C	;	     /+15 and /+:15 are allowed for user (tm10)
			     C	;  6/29/87 : ECS call changes DS register but it causes the address problem
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-16


			     C	;	     in user's routines. $P_Chk_DBCS (tm11)
			     C	;  7/10/87 : Switch with no_match flag (0x0000H) does not work correctly
			     C	;					  (tm12)
			     C	;  7/10/87 : Invalid switch/keyword does not work correctly
			     C	;					  (tm13)
			     C	;  7/10/87 : Drive_only breaks 3 bytes after the result buffer
			     C	;					  (tm14)
			     C	;  7/12/87 : Too_Many_Operands sets DX=0 as the PARSE result
			     C	;					  (tm15)
			     C	;  7/24/87 : Negative lower bound on numeric ranges cause trouble
			     C	
			     C	;  7/24/87 : Quoted strings being returned with quotes.
			     C	
			     C	;  7/28/87 : Kerry S (;AN018;)
			     C	;	     Non optional value on switch (match flags<>0 and <>1) not flagged
			     C	;	     as an error when missing.	Solution: return error 2.  Modules
			     C	;	     affected: $P_Chk_SW_Control.
			     C	
			     C	;  7/29/87 : Kerry S (;AN019;)
			     C	;	     Now allow the optional bit in match flags for switches.  This
			     C	;	     allows the switch to be encountered with a value or without a
			     C	;	     value and no error is returned.
			     C	;
			     C	
			     C	;  8/28/87 : Ed K, Kerry S (;AN020;)
			     C	;  9/14/87   In PROC $P_Get_DecNum, when checking for field separators
			     C	;	     within a date response, instead of checking just for the one
			     C	;	     character defined by the COUNTRY DEPENDENT INFO, check for
			     C	;	     all three chars, "-", "/", and ".". Change $P_Chk_Switch to allow
			     C	;	     slashes in date strings when DateSw (assembler switch) is set.
			     C	
			     C	;  9/1/87  : Kerry S (;AN021)
			     C	;	     In PROC $P_String_Comp, when comparing the switch or keyword on
			     C	;	     the command line with the string in the control block the
			     C	;	     comparing was stopping at a colon (switch) or equal (keyword)
			     C	;	     on the command line and assuming a match.	This allowed a shorter
			     C	;	     string on the command line than in the synonym list in the control
			     C	;	     block.  I put in a test for a null in the control block so the
			     C	;	     string in the control block must be the same length as the string
			     C	;	     preceeding the colon or equal on the command line.
			     C	
			     C	;  8/28/87 : Kerry S (;AN022;)
			     C	;	     All references to data in PSDATA.INC had CS overrides.  This caused
			     C	;	     problems for people who included it themselves in a segment other
			     C	;	     than CS.  Added switch to allow including PSDATA.INC in any
			     C	;	     segment.
			     C	
			     C	;  9/16/87 : Ed K (;AN023;) PTM1040
			     C	;	     in $p_set_cdi PROC, it assumes CS points to psdata. Change Push CS
			     C	;	     into PUSH PSDATA_SEG.  In $P_Get_DecNum PROC, fix AN020
			     C	;	     forced both TIME and DATE to use the delims, "-","/",".".
			     C	;	     Created FLag, in $P_time_Format PROC, to request the delim in
			     C	;	     BL be used if TIME is being parsed.
			     C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-17


			     C	;  9/24/87 : Ed K
			     C	;	     Removed the include to STRUC.INC.	Replaced the STRUC macro
			     C	;	     invocations with their normally expanded code; made comments
			     C	;	     out of the STRUC macro invocation statements to maintain readability.
			     C	
			     C	;  9/24/87 : Ed K (;AN024;) PTM1222
			     C	;	     When no CONTROL for a keyword found, tried to fill in RESULT
			     C	;	     pointed to by non-existant CONTROL.
			     C	
			     C	; 10/15/87 : Ed K (;AN025;) PTM1672
			     C	;	     A quoted text string can be framed only by double quote.  Remove
			     C	;	     support to frame quoted text string with single quote.
			     C	;	     (apostrophe) $P_SorD_Quote is removed from PSDATA.INC.
			     C	;	     $P_SQuote EQU also removed from PSDATA.INC.  Any references to
			     C	;	     single quote in PROC prologues are left as is for history reasons.
			     C	
			     C	;	     This fixes another bug, not mentioned in p1672, in that two
			     C	;	     quote chars within a quoted string is supposed to be reported as
			     C	;	     one quote character, but is reported as two quotes.  This changed
			     C	;	     two instructions in PROC $P_Quoted_Str.
			     C	
			     C	;	     Also fixed are several JMP that caused a NOP, these changed to
			     C	;	     have the SHORT operator to avoid the unneeded NOP.
			     C	
			     C	;	     The code and PSDATA.INC have been aligned for ease of reading.
			     C	
			     C	; 10/26/87 : Ed K (;AN026;) PTM2041, DATE within SWITCH, BX reference to
			     C	;	     psdata buffer should have psdata_seg.
			     C	
			     C	; 10/27/87 : Ed K (;AN027;) PTM2042 comma between keywords implies
			     C	;	     positional missing.
			     C	
			     C	; 11/06/87 : Ed K (;AN028;) PTM 2315 Parser should not use line feed
			     C	;	     as a line delimiter, should use carriage return.
			     C	;	     Define switch: LFEOLSW, if on, accept LF as end of line char.
			     C	
			     C	; 11/11/87 : Ed K (;AN029;) PTM 1651 GET RID OF WHITESPACE AROUND "=".
			     C	
			     C	; 11/18/87 : Ed K (;AN030;) PTM 2551 If filename is just "", then
			     C	;	     endless loop since SI is returned still pointing to start
			     C	;	     of that parm.
			     C	
			     C	; 11/19/87 : Ed K (;AN031;) PTM 2585 date & time getting bad values.
			     C	;	     Vector to returned string has CS instead of Psdata_Seg, but
			     C	;	     when tried to fix it on previous version, changed similar
			     C	;	     but wrong place.
			     C	
			     C	; 12/09/87 : Bill L (;AN032;) PTM 2772 colon and period are now valid
			     C	;	     delimiters between hours, minutes, seconds for time. And period
			     C	;	     and comma are valid delimiters between seconds and 100th second.
			     C	
			     C	; 12/14/87 : Bill L (;AN033;) PTM 2722 if illegal delimiter characters
			     C	;	     in a filespec, then flag an error.
			     C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-18


			     C	; 12/22/87 : Bill L (;AN034;)	    All local data to parser is now
			     C	;	     indexed off of the psdata_seg equate instead of the DS register.
			     C	;	     Using this method, DS can point to the segment of PSP or to psdata
			     C	;  -->	     local parser data. Why were some references to local data changed
			     C	;	     to do this before, but not all ?????
			     C	
			     C	; 02/02/88 : Ed K (;AC035;) INSPECT utility, suggests optimizations.
			     C	
			     C	; 02/05/88 : Ed K (;AN036;) P3372-UPPERCASE TRANSLATION, PSDATA_SEG HOSED.
			     C	;
			     C	; 02/08/88 : Ed K (;AN037;) P3410-AVOID POP OF CS, CHECK BASESW FIRST.
			     C	
			     C	; 02/19/88 : Ed K (;AN038;) p3524 above noon and "am" should be error
			     C	
			     C	; 02/23/88 : Ed K (;AN039;) p3518 accept "comma" and "period" as decimal
			     C	;	     separator in TIME before hundredths field.
			     C	;
			     C	;***********************************************************************
			     C	ELSE					;AN000;
 00AB                        C	SysParse proc near			;AN000;
			     C	ENDIF					;AN000;(of FarSW)
			     C	;	$SALUT	(4,9,17,41)
 00AB  2E: C7 06 000D R 0000 C		mov	psdata_seg:$P_Flags,0	;AC034; Clear all internal flags
 00B2  FC                    C		cld				      ;AN000; confirm forward direction
 00B3  2E: 89 0E 0000 R      C		mov	psdata_seg:$P_ordinal,cx      ;AC034; save operand ordinal
 00B8  2E: C7 06 0002 R 0000 C		mov	psdata_seg:$P_RC,$P_No_Error  ;AC034; Assume no error
 00BF  2E: C7 06 0015 R 0000 C		mov	psdata_seg:$P_Found_SYNONYM,0 ;AC034; initalize synonym pointer
			     C	
 00C6  2E: C7 06 0006 R 0000 C		mov	word ptr psdata_seg:$P_DX,0   ;AC034; (tm15)
 00CD  E8 076F R             C		call	$P_Skip_Delim		;AN000; Move si to 1st non white space
 00D0  73 13                 C		jnc	$P_Start		;AN000; If EOL is not encountered, do parse
			     C	
			     C	;--------------------------- End of Line
 00D2  B8 FFFF               C		mov	ax,$P_RC_EOL		;AN000; set exit code to -1
 00D5  53                    C		push	bx			;AN000;
 00D6  26: 8B 1D             C		mov	bx,es:[di].$P_PARMSX_Address ;AN000; Get the PARMSX address to
 00D9  26: 3A 0F             C		cmp	cl,es:[bx].$P_MinP	;AN000; check ORDINAL to see if the minimum
 00DC  73 03                 C		jae	$P_Fin			;AN000; positional found.
			     C	
 00DE  B8 0002               C		mov	ax,$P_Op_Missing	;AN000; If no, set exit code to missing operand
 00E1                        C	$P_Fin: 				;AN000;
 00E1  5B                    C		pop	bx			;AN000;
 00E2  E9 0202 R             C		jmp	$P_Single_Exit		;AN000; return to the caller
			     C	
			     C	;---------------------------
 00E5                        C	$P_Start:				;AN000;
 00E5  2E: 89 36 000F R      C		mov	psdata_seg:$P_SaveSI_Cmpx,si ;AN000;AC034;  save ptr to command line for later use b
				y complex,
 00EA  53                    C		push	bx			;AN000; quoted string or file spec.
 00EB  57                    C		push	di			;AN000;
 00EC  55                    C		push	bp			;AN000;
 00ED  8D 1E 0017 R          C		lea	bx,psdata_seg:$P_STRING_BUF ;AC034; set buffer to copy from command string
 00F1  2E: F6 06 000E R 20   C		test	psdata_seg:$P_Flags2,$P_Extra ;AC034; 3/9 extra delimiter encountered ?
 00F7  75 43                 C		jne	$P_Pack_End		;AN000; 3/9 if yes, no need to copy
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-19


			     C	
 00F9                        C	$P_Pack_Loop:				;AN000;
 00F9  AC                    C		lodsb				;AN000; Pick a operand from buffer
 00FA  E8 082C R             C		call	$P_Chk_Switch		;AN000; Check switch character
 00FD  72 3C                 C		jc	$P_Pack_End_BY_EOL	;AN020; if carry set found delimiter type slash, need backup
				 si, else continue
			     C	
 00FF  E8 0795 R             C		call	$P_Chk_EOL		;AN000; Check EOL character
 0102  74 37                 C		je	$P_Pack_End_BY_EOL	;AN000; need backup si
			     C	
 0104  E8 07CB R             C		call	$P_Chk_Delim		;AN000; Check delimiter
 0107  75 18                 C		jne	$P_PL01 		;AN000; If no, process next byte
			     C	
 0109  2E: F6 06 000E R 20   C		test	psdata_seg:$P_Flags2,$P_Extra ;AC034; 3/9 If yes and white spec,
			     C	; (tm08)jne	$P_Pack_End		;AN000; 3/9 then
 010F  75 05                 C		jne	$P_Pack_End_backup_si	;AN000; (tm08)
			     C	
 0111  E8 076F R             C		call	$P_Skip_Delim		;AN000; skip subsequent white space,too
 0114  EB 26                 C		jmp	short $P_Pack_End	;AN000; finish copy by placing NUL at end
			     C	
 0116                        C	$P_PAck_End_backup_si:			;AN000; (tm08)
 0116  2E: F6 06 000E R 41   C		test	psdata_seg:$P_Flags2,$P_SW+$P_equ ;AN000;AC034;  (tm08)
 011C  74 1E                 C		je	$P_Pack_End		;AN000; (tm08)
			     C	
 011E  4E                    C		dec	si			;AN000; (tm08)
 011F  EB 1B                 C		jmp	short $P_Pack_End	;AN025; (tm08)
			     C	
 0121                        C	$P_PL01:				;AN000;
 0121  2E: 88 07             C		mov	psdata_seg:[bx],al	;AN000; move byte to STRING_BUF
 0124  3C 3D                 C		cmp	al,$P_Keyword		;AN000; if it is equal character,
 0126  75 06                 C		jne	$P_PL00 		;AN000; then
			     C	
 0128  2E: 80 0E 000E R 01   C		or	psdata_seg:$P_Flags2,$P_equ ;AC034; remember it in flag
 012E                        C	$P_PL00:				;AN000;
 012E  43                    C		inc	bx			;AN000; ready to see next byte
 012F  E8 084A R             C		call	$P_Chk_DBCS		;AN000; was it 1st byte of DBCS ?
 0132  73 C5                 C		jnc	$P_Pack_Loop		;AN000; if no, process to next byte
			     C	
 0134  AC                    C		lodsb				;AN000; if yes, store
 0135  2E: 88 07             C		mov	psdata_seg:[bx],al	;AN000;    2nd byte of DBCS
 0138  43                    C		inc	bx			;AN000; update pointer
 0139  EB BE                 C		jmp	short $P_Pack_Loop	;AN000; process to next byte
			     C	
 013B                        C	$P_Pack_End_BY_EOL:			;AN000;
 013B  4E                    C		dec	si			;AN000; backup si pointer
 013C                        C	$P_Pack_End:				;AN000;
 013C  2E: 89 36 0004 R      C		mov	psdata_seg:$P_SI_Save,si     ;AC034; save next pointer, SI
 0141  2E: C6 07 00          C		mov	byte ptr psdata_seg:[bx],$P_NULL ;AN000; put NULL at the end
 0145  2E: 89 1E 0013 R      C		mov	psdata_seg:$P_Save_EOB,bx    ;AC034; 3/17/87 keep the address for later use of compl
				ex
 014A  26: 8B 1D             C		mov	bx,es:[di].$P_PARMSX_Address ;AN000; get PARMSX address
 014D  8D 36 0017 R          C		lea	si,psdata_seg:$P_STRING_BUF  ;AC034;
 0151  2E: 80 3C 2F          C		cmp	byte ptr psdata_seg:[si],$P_Switch ;AN000; the operand begins w/ switch char ?
 0155  74 30                 C		je	$P_SW_Manager		     ;AN000; if yes, process as switch
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-20


			     C	
 0157  2E: F6 06 000E R 01   C		test	psdata_seg:$P_Flags2,$P_equ   ;AC034; the operand includes equal char ?
 015D  75 54                 C		jne	$P_Key_manager		     ;AN000; if yes, process as keyword
			     C	
 015F                        C	$P_Positional_Manager:			;AN000; else process as positional
 015F  26: 8A 47 01          C		mov	al,es:[bx].$P_MaxP	;AN000; get maxp
 0163  32 E4                 C		xor	ah,ah			;AN000; ax = maxp
 0165  2E: 39 06 0000 R      C		cmp	psdata_seg:$P_ORDINAL,ax ;AC034; too many positional ?
 016A  73 12                 C		jae	$P_Too_Many_Error	;AN000; if yes, set exit code to too many
			     C	
 016C  2E: A1 0000 R         C		mov	ax,psdata_seg:$P_ORDINAL ;AC034; see what the current ordinal
 0170  D1 E0                 C		shl	ax,1			;AN000; ax = ax*2
 0172  43                    C		inc	bx			;AC035; add '2' to
 0173  43                    C		inc	bx			;AC035;  BX reg
			     C						;AN000; now bx points to 1st CONTROL
			     C	;(changed ;AC035;) add	   bx,2 	;AN000; now bx points to 1st CONTROL
 0174  03 D8                 C		add	bx,ax			;AN000; now bx points to specified CONTROL address
 0176  26: 8B 1F             C		mov	bx,es:[bx]		;AN000; now bx points to specified CONTROL itself
 0179  E8 0204 R             C		call	$P_Chk_Pos_Control	;AN000; Do process for positional
 017C  EB 69                 C		jmp	short $P_Return_to_Caller ;AN000; and return to the caller
			     C	
 017E                        C	$P_Too_Many_Error:			;AN000;
 017E  2E: C7 06 0002 R 0001 C		mov	psdata_seg:$P_RC,$P_Too_Many ;AC034; set exit code
 0185  EB 60                 C		jmp	short $P_Return_to_Caller ;AN000; and return to the caller
			     C	;
 0187                        C	$P_SW_Manager:				;AN000;
 0187  26: 8A 47 01          C		mov	al,es:[bx].$P_MaxP	;AN000; get maxp
 018B  32 E4                 C		xor	ah,ah			;AN000; ax = maxp
 018D  40                    C		inc	ax			;AN000;
 018E  D1 E0                 C		shl	ax,1			;AN000; ax = (ax+1)*2
 0190  03 D8                 C		add	bx,ax			;AN000; now bx points to maxs
 0192  26: 8A 0F             C		mov	cl,es:[bx]		;AN000;
 0195  32 ED                 C		xor	ch,ch			;AN000; cx = maxs
 0197  0B C9                 C		or	cx,cx			;AN000; at least one switch ?
 0199  74 0F                 C		je	$P_SW_Not_Found 	;AN000;
			     C	
 019B  43                    C		inc	bx			;AN000; now bx points to 1st CONTROL address
			     C	
 019C                        C	$P_SW_Mgr_Loop: 			;AN000;
 019C  53                    C		push	bx			;AN000;
 019D  26: 8B 1F             C		mov	bx,es:[bx]		;AN000; bx points to Switch CONTROL itself
 01A0  E8 0269 R             C		call	$P_Chk_SW_Control	;AN000; do process for switch
 01A3  5B                    C		pop	bx			;AN000;
 01A4  73 41                 C		jnc	$P_Return_to_Caller	;AN000; if the CONTROL is for the switch, exit
			     C	
 01A6  43                    C		inc	bx			;AC035; add '2' to
 01A7  43                    C		inc	bx			;AC035;  BX reg
			     C						;AN000; else bx points to the next CONTROL
			     C	;(changed ;AC035;)  add     bx,2	;AN000; else bx points to the next CONTROL
 01A8  E2 F2                 C		loop	$P_SW_Mgr_Loop		;AN000; and loop
			     C	
 01AA                        C	$P_SW_Not_Found:			;AN000;
 01AA  2E: C7 06 0002 R 0003 C		mov	psdata_seg:$P_RC,$P_Not_In_SW ;AC034; here no CONTROL for the switch has
 01B1  EB 34                 C		jmp	short $P_Return_to_Caller0    ;AN000; not been found, means error.
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-21


			     C	;
 01B3                        C	$P_Key_Manager: 			;AN000;
 01B3  26: 8A 47 01          C		mov	al,es:[bx].$P_MaxP	;AN000; get maxp
 01B7  32 E4                 C		xor	ah,ah			;AN000; ax = maxp
 01B9  40                    C		inc	ax			;AN000;
 01BA  D1 E0                 C		shl	ax,1			;AN000; ax = (ax+1)*2
 01BC  03 D8                 C		add	bx,ax			;AN000; now bx points to maxs
 01BE  26: 8A 07             C		mov	al,es:[bx]		;AN000;
 01C1  32 E4                 C		xor	ah,ah			;AN000; ax = maxs
 01C3  D1 E0                 C		shl	ax,1			;AN000;
 01C5  40                    C		inc	ax			;AN000; ax = ax*2+1
 01C6  03 D8                 C		add	bx,ax			;AN000; now bx points to maxk
 01C8  26: 8A 0F             C		mov	cl,es:[bx]		;AN000;
 01CB  32 ED                 C		xor	ch,ch			;AN000; cx = maxk
 01CD  0B C9                 C		or	cx,cx			;AN000; at least one keyword ?
 01CF  74 0F                 C		je	$P_Key_Not_Found	;AN000;
			     C	
 01D1  43                    C		inc	bx			;AN000; now bx points to 1st CONTROL
			     C	
 01D2                        C	$P_Key_Mgr_Loop:			;AN000;
 01D2  53                    C		push	bx			;AN000;
 01D3  26: 8B 1F             C		mov	bx,es:[bx]		;AN000; bx points to keyword CONTROL itself
 01D6  E8 0236 R             C		call	$P_Chk_Key_Control	;AN000; do process for keyword
 01D9  5B                    C		pop	bx			;AN000;
 01DA  73 0B                 C		jnc	$P_Return_to_Caller	;AN000; if the CONTROL is for the keyword, exit
			     C	
 01DC  43                    C		inc	bx			;AC035; add '2' to
 01DD  43                    C		inc	bx			;AC035;  BX reg
			     C						;AN000; else bx points to the next CONTROL
			     C	;(changed ;AC035;)  add     bx,2	;AN000; else bx points to the next CONTROL
 01DE  E2 F2                 C		loop	$P_Key_Mgr_Loop 	;AN000; and loop
			     C	
 01E0                        C	$P_Key_Not_Found:			;AN000;
 01E0  2E: C7 06 0002 R 0004 C		mov	psdata_seg:$P_RC,$P_Not_In_Key ;AC034; here no CONTROL for the keyword has
 01E7                        C	$P_Return_to_Caller0:			;AN000; not been found, means error.
			     C	
			     C	;(deleted ;AN024;)	 mov	 bx,es:[bx-2]		 ;AN000; (tm13) backup bx
			     C	
			     C	;(deleted ;AN024;)	 mov	 al,$P_String		 ;AN000; Set
			     C	;(deleted ;AN024;)	 mov	 ah,$P_No_Tag		 ;AN000;     result
			     C	;(deleted ;AN024;)	 call	 $P_Fill_Result 	 ;AN000;	    buffer
			     C	
 01E7                        C	$P_Return_to_Caller:			;AN000;
 01E7  5D                    C		pop	bp			;AN000;
 01E8  5F                    C		pop	di			;AN000;
 01E9  5B                    C		pop	bx			;AN000;
 01EA  2E: 8B 0E 0000 R      C		mov	cx,psdata_seg:$P_Ordinal    ;AC034; return next ordinal
 01EF  2E: A1 0002 R         C		mov	ax,psdata_seg:$P_RC	    ;AC034; return exit code
 01F3  2E: 8B 36 0004 R      C		mov	si,psdata_seg:$P_SI_Save    ;AC034; return next operand pointer
 01F8  2E: 8B 16 0006 R      C		mov	dx,psdata_seg:$P_DX	    ;AC034; return result buffer address
 01FD  2E: 8A 1E 0008 R      C		mov	bl,psdata_seg:$P_Terminator ;AC034; return delimiter code found
 0202                        C	$P_Single_Exit: 			;AN000;
 0202  F8                    C		clc				;AN000;
 0203  C3                    C		ret				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-22


 0204                        C	SysParse endp				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-23


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Chk_Pos_Control
			     C	;
			     C	; Function: Parse CONTROL block for a positional
			     C	;
			     C	; Input:     ES:BX -> CONTROL block
			     C	;	     psdata_seg:SI -> $P_STRING_BUF
			     C	;
			     C	; Output:    None
			     C	;
			     C	; Use:	 $P_Fill_Result, $P_Check_Match_Flags
			     C	;
			     C	; Vars: $P_Ordinal(W), $P_RC(W)
			     C	;***********************************************************************
 0204                        C	$P_Chk_Pos_Control proc 		;AN000;
 0204  50                    C		push	ax			;AN000;
 0205  26: 8B 07             C		mov	ax,es:[bx].$P_Match_Flag ;AN000;
 0208  A9 0002               C		test	ax,$P_Repeat		;AN000; repeat allowed ?
 020B  75 05                 C		jne	$P_CPC00		;AN000; then do not increment ORDINAL
			     C	
 020D  2E: FF 06 0000 R      C		inc	psdata_seg:$P_ORDINAL	;AC034; update the ordinal
 0212                        C	$P_CPC00:				;AN000;
 0212  2E: 80 3C 00          C		cmp	byte ptr psdata_seg:[si],$P_NULL ;AN000; no data ?
 0216  75 19                 C		jne	$P_CPC01		;AN000;
			     C	
 0218  A9 0001               C		test	ax,$P_Optional		;AN000; yes, then is it optional ?
 021B  75 09                 C		jne	$P_CPC02		;AN000;
			     C	
 021D  2E: C7 06 0002 R 0002 C		mov	psdata_seg:$P_RC,$P_Op_Missing ;AC034; no, then error	     3/17/87
 0224  EB 0E                 C		jmp	short $P_CPC_Exit	;AN000;
			     C	
 0226                        C	$P_CPC02:				;AN000;
 0226  50                    C		push	ax			;AN000;
 0227  B0 03                 C		mov	al,$P_String		;AN000; if it is optional return NULL
 0229  B4 FF                 C		mov	ah,$P_No_Tag		;AN000; no item tag indication
 022B  E8 02CC R             C		call	$P_Fill_Result		;AN000;
 022E  58                    C		pop	ax			;AN000;
 022F  EB 03                 C		jmp	short $P_CPC_Exit	;AN000;
			     C	
 0231                        C	$P_CPC01:				;AN000;
 0231  E8 0351 R             C		call	$P_Check_Match_Flags	;AN000;
 0234                        C	$P_CPC_Exit:				;AN000;
 0234  58                    C		pop	ax			;AN000;
 0235  C3                    C		ret				;AN000;
 0236                        C	$P_Chk_Pos_Control endp 		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-24


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Chk_Key_Control
			     C	;
			     C	; Function: Parse CONTROL block for a keyword
			     C	;
			     C	; Input:     ES:BX -> CONTROL block
			     C	;	     psdata_seg:SI -> $P_STRING_BUF
			     C	;
			     C	; Output:    CY = 1 : not match
			     C	;
			     C	; Use:	 $P_Fill_Result, $P_Search_KEYorSW, $P_Check_Match_Flags
			     C	;
			     C	; Vars: $P_RC(W), $P_SaveSI_Cmpx(W), $P_KEYorSW_Ptr(R), $P_Flags(W)
			     C	;***********************************************************************
 0236                        C	$P_Chk_Key_Control proc 		;AN000;
			     C	ELSE					;AN000;(of IF KeySW)
 0236  F9                    C		stc				;AN000;this logic works when the KeySW
 0237  C3                    C		ret				;AN000;is reset.
			     C	ENDIF					;AN000;(of KeySW)
 0238                        C	$P_Chk_Key_Control endp 		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-25


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	IF	KeySW+SwSW			;AN000;(Check if keyword or switch is supported)
			     C	; $P_Search_KEYorSW:
			     C	;
			     C	; Function: Seach specified keyword or switch from CONTROL
			     C	;
			     C	; Input:     ES:BX -> CONTROL block
			     C	;	     psdata_seg:SI -> $P_STRING_BUF
			     C	;
			     C	; Output:    CY = 1 : not match
			     C	;
			     C	; Use:	 $P_String_Comp, $P_MoveBP_NUL, $P_Found_SYNONYM
			     C	;***********************************************************************
 0238                        C	$P_Search_KEYorSW proc			;AN000;
 0238  55                    C		push	bp			;AN000;
 0239  51                    C		push	cx			;AN000;
 023A  26: 8A 4F 08          C		mov	cl,es:[bx].$P_nid	;AN000; Get synonym count
 023E  32 ED                 C		xor	ch,ch			;AN000; and set it to cx
 0240  0B C9                 C		or	cx,cx			;AN000; No synonyms specified ?
 0242  74 0D                 C		je	$P_KEYorSW_Not_Found	;AN000; then indicate not found by CY
			     C	
 0244  8D 6F 09              C		lea	bp,es:[bx].$P_KEYorSW	;AN000; BP points to the 1st synonym
 0247                        C	$P_KEYorSW_Loop:			;AN000;
 0247  E8 0646 R             C		call	$P_String_Comp		;AN000; compare string in buffer w/ the synonym
 024A  73 08                 C		jnc	$P_KEYorSW_Found	;AN000; If match, set it to synonym pointer
			     C	
 024C  E8 025D R             C		call	$P_MoveBP_NUL		;AN000; else, bp points to the next string
 024F  E2 F6                 C		loop	$P_KEYorSW_Loop 	;AN000; loop nid times
 0251                        C	$P_KEYorSW_Not_Found:			;AN000;
 0251  F9                    C		stc				;AN000; indicate not found in synonym list
 0252  EB 06                 C		jmp	short $P_KEYorSW_Exit	;AN000; and exit
			     C	
 0254                        C	$P_KEYorSW_Found:			;AN000;
 0254  2E: 89 2E 0015 R      C		mov	psdata_seg:$P_Found_SYNONYM,bp ;AC034; set synonym pointer
 0259  F8                    C		clc				;AN000; indicate found
 025A                        C	$P_KEYorSW_Exit:			;AN000;
 025A  59                    C		pop	cx			;AN000;
 025B  5D                    C		pop	bp			;AN000;
 025C  C3                    C		ret				;AN000;
 025D                        C	$P_Search_KEYorSW endp			;AN000;
			     C	;***********************************************************************
			     C	; $P_MoveBP_NUL
			     C	;***********************************************************************
 025D                        C	$P_MoveBP_NUL proc			;AN000;
 025D                        C	$P_MBP_Loop:				;AN000;
 025D  26: 80 7E 00 00       C		cmp	byte ptr es:[bp],$P_NULL ;AN000; Increment BP that points
 0262  74 03                 C		je	$P_MBP_Exit		;AN000; to the synomym list
			     C	
 0264  45                    C		inc	bp			;AN000; until
 0265  EB F6                 C		jmp	short $P_MBP_Loop	;AN000; NULL encountered.
			     C	
 0267                        C	$P_MBP_Exit:				;AN000;
 0267  45                    C		inc	bp			;AN000; bp points to next to NULL
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-26


 0268  C3                    C		ret				;AN000;
 0269                        C	$P_MoveBP_NUL endp			;AN000;
			     C	ENDIF					;AN000;(of KeySW+SwSW)
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-27


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Chk_SW_Control
			     C	;
			     C	; Function: Parse CONTROL block for a switch
			     C	;
			     C	; Input:     ES:BX -> CONTROL block
			     C	;	     psdata_seg:SI -> $P_STRING_BUF
			     C	;
			     C	; Output:    CY = 1 : not match
			     C	;
			     C	; Use:	 $P_Fill_Result, $P_Search_KEYorSW, $P_Check_Match_Flags
			     C	;
			     C	; Vars:  $P_SaveSI_Cmpx(W), $P_KEYorSW_Ptr(R), $P_Flags(W)
			     C	;***********************************************************************
 0269                        C	$P_Chk_SW_Control proc			;AN000;
			     C	
			     C	
			     C	IF	SwSW				;AN000;(Check if switch is supported)
 0269  2E: 80 0E 000E R 10   C		or	psdata_seg:$P_Flags2,$P_Sw_Cmp ;AC034; Indicate switch for later string comparison
 026F  E8 0238 R             C		call	$P_Search_KEYorSW	;AN000; Search the switch in the CONTROL block
 0272  72 4A                 C		jc	$P_Chk_SW_Err0		;AN000; not found, then try next CONTROL
			     C	
 0274  2E: 80 26 000E R EF   C		and	psdata_seg:$P_Flags2,0ffh-$P_Sw_Cmp ;AC034; reset the indicator previously set
			     C	;
 027A  50                    C		push	ax			;AN000; 	      /switch:
 027B  2E: A1 0011 R         C		mov	ax,psdata_seg:$P_KEYorSW_Ptr ;AC034;	      ^       ^
 027F  2B C6                 C		sub	ax,si			;AN000;  SI	KEYorSW
 0281  2E: 01 06 000F R      C		add	psdata_seg:$P_SaveSI_Cmpx,ax ;AC034; update for complex list
 0286  58                    C		pop	ax			;AN000;
			     C	;
 0287  2E: 8B 36 0011 R      C		mov	si,psdata_seg:$P_KEYorSW_Ptr ;AC034; set si at the end or colon
 028C  2E: 80 3C 00          C		cmp	byte ptr psdata_seg:[si],$P_NULL ;AN000; any data after colon
 0290  75 26                 C		jne	$P_CSW00		;AN000; if yes, process match flags
			     C	
 0292  2E: 80 7C FF 3A       C		cmp	byte ptr psdata_seg:[si-1],$P_Colon ;AN000; if no, the switch terminated by colon ?
 0297  75 09                 C		jne	$P_Chk_if_data_required ;AN000; if yes,
			     C	
 0299  2E: C7 06 0002 R 0009 C		mov	psdata_seg:$P_RC,$P_Syntax ;AC034; return syntax error
 02A0  EB 1F                 C		jmp	short $P_Chk_SW_Exit	;AN000;
			     C	
 02A2                        C	$P_Chk_if_data_required:		;AN018; no data, no colon
 02A2  26: 83 3F 00          C		cmp	es:[bx].$P_Match_Flag,0 ;AN018; should have data? zero match flag means switch follo
				wed by nothing is OK
 02A6  74 19                 C		je	$P_Chk_SW_Exit		;AN018; match flags not zero so should have something if opt
				ional bit is not on
			     C	
 02A8  26: F7 07 0001        C		test	es:[bx].$P_Match_Flag,$P_Optional ;AN019; see if no value is valid
 02AD  75 12                 C		jnz	$P_Chk_SW_Exit		;AN019; if so, then leave, else yell
			     C	
 02AF  2E: C7 06 0002 R 0002 C		mov	psdata_seg:$P_RC,$P_Op_Missing ;AC034; return required operand missing
 02B6  EB 09                 C		jmp	short $P_Chk_SW_Exit	;AN018;
			     C	
 02B8                        C	$P_CSW00:				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-28


 02B8  E8 0351 R             C		call	$P_Check_Match_Flags	;AN000; process match flag
 02BB  F8                    C		clc				;AN000; indicate match
 02BC  EB 0D                 C		jmp	short $P_Chk_SW_Single_Exit ;AN000;
			     C	
 02BE                        C	$P_Chk_SW_Err0: 			;AN000;
 02BE  F9                    C		stc				;AN000; not found in switch synonym list
 02BF  EB 0A                 C		jmp	short $P_Chk_SW_Single_Exit ;AN000;
			     C	
 02C1                        C	$P_Chk_SW_Exit: 			;AN000;
 02C1  50                    C		push	ax			;AN000;
 02C2  B0 03                 C		mov	al,$P_String		;AN000; set
 02C4  B4 FF                 C		mov	ah,$P_No_Tag		;AN000;    result
 02C6  E8 02CC R             C		call	$P_Fill_Result		;AN000; 	 buffer
 02C9  58                    C		pop	ax			;AN000;
 02CA  F8                    C		clc				;AN000;
 02CB                        C	$P_Chk_SW_Single_Exit:			;AN000;
 02CB  C3                    C		ret				;AN000;
			     C	ENDIF					;AN000;(of SwSW)
 02CC                        C	$P_Chk_SW_Control endp			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-29


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Fill_Result
			     C	;
			     C	; Function: Fill the result buffer
			     C	;
			     C	; Input:    AH = Item tag
			     C	;	    AL = type
			     C	;		  AL = 1: CX,DX has 32bit number (CX = high)
			     C	;		  AL = 2: DX has index(offset) into value list
			     C	;		  AL = 6: DL has driver # (1-A, 2-B, ... , 26 - Z)
			     C	;		  AL = 7: DX has year, CL has month and CH has date
			     C	;		  AL = 8: DL has hours, DH has minutes, CL has secondsn,
			     C	;			  amd CH has hundredths
			     C	;		  AL = else: psdata_seg:SI points to returned string buffer
			     C	;	    ES:BX -> CONTROL block
			     C	;
			     C	; Output:   None
			     C	;
			     C	; Use:	$P_Do_CAPS_String, $P_Remove_Colon, $P_Found_SYNONYM
			     C	;
			     C	; Vars: $P_DX(W)
			     C	;***********************************************************************
 02CC                        C	$P_Fill_Result proc			;AN000;
 02CC  57                    C		push	di			;AN000;
 02CD  26: 8B 7F 04          C		mov	di,es:[bx].$P_Result_Buf ;AN000; di points to result buffer
 02D1  2E: 89 3E 0006 R      C		mov	psdata_seg:$P_DX,di	;AC034; set returned result address
 02D6  26: 88 05             C		mov	es:[di].$P_Type,al	;AN000; store type
 02D9  26: 88 65 01          C		mov	es:[di].$P_Item_Tag,ah	;AN000; store item tag
 02DD  50                    C		push	ax			;AN000;
 02DE  2E: A1 0015 R         C		mov	ax,psdata_seg:$P_Found_SYNONYM ;AC034; if yes,
 02E2  26: 89 45 02          C		mov	es:[di].$P_SYNONYM_Ptr,ax ;AN000;   then set it to the result
 02E6  58                    C		pop	ax			;AN000;
 02E7                        C	$P_RLT04:				;AN000;
 02E7  3C 01                 C		cmp	al,$P_Number		;AN000; if number
 02E9  75 0A                 C		jne	$P_RLT00		;AN000;
			     C	
 02EB                        C	$P_RLT02:				;AN000;
 02EB  26: 89 55 04          C		mov	word ptr es:[di].$P_Picked_Val,dx ;AN000; then store 32bit
 02EF  26: 89 4D 06          C		mov	word ptr es:[di+2].$P_Picked_Val,cx ;AN000;	number
 02F3  EB 5A                 C		jmp	short $P_RLT_Exit	;AN000;
			     C	
 02F5                        C	$P_RLT00:				;AN000;
 02F5  3C 02                 C		cmp	al,$P_List_Idx		;AN000; if list index
 02F7  75 06                 C		jne	$P_RLT01		;AN000;
			     C	
 02F9  26: 89 55 04          C		mov	word ptr es:[di].$P_Picked_Val,dx ;AN000; then store list index
 02FD  EB 50                 C		jmp	short $P_RLT_Exit	;AN000;
			     C	
 02FF                        C	$P_RLT01:				;AN000;
 02FF  3C 07                 C		cmp	al,$P_Date_F		;AN000; Date format ?
 0301  74 E8                 C		je	$P_RLT02		;AN000;
			     C	
 0303  3C 08                 C		cmp	al,$P_Time_F		;AN000; Time format ?
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-30


 0305  74 E4                 C		je	$P_RLT02		;AN000;
			     C	;
 0307  3C 06                 C		cmp	al,$P_Drive		;AN000; drive format ?
 0309  75 06                 C		jne	$P_RLT03		;AN000;
			     C	
 030B  26: 88 55 04          C		mov	byte ptr es:[di].$P_Picked_Val,dl ;AN000; store drive number
 030F  EB 3E                 C		jmp	short $P_RLT_Exit	;AN000;
			     C	
 0311                        C	$P_RLT03:				;AN000;
 0311  3C 04                 C		cmp	al,$P_Complex		;AN000; complex format ?
 0313  75 0F                 C		jne	$P_RLT05		;AN000;
			     C	
 0315  2E: A1 000F R         C		mov	ax,psdata_seg:$P_SaveSI_Cmpx ;AC034; then get pointer in command buffer
 0319  40                    C		inc	ax			;AN000; skip left Parentheses
 031A  26: 89 45 04          C		mov	word ptr es:[di].$P_Picked_Val,ax ;AN000; store offset
 031E  26: 8C 5D 06          C		mov	word ptr es:[di+2].$P_Picked_Val,ds ;AN000; store segment
 0322  EB 2B                 C		jmp	short $P_RLT_Exit	;AN000;
			     C	
 0324                        C	$P_RLT05:				;AN000;
			     C	;------------------------  AL = 3, 5, or 9
 0324  26: 89 75 04          C		mov	word ptr es:[di].$P_Picked_Val,si ;AN000; store offset of STRING_BUF
			     C	;(replaced ;AN031;)  mov word ptr es:[di+word].$P_Picked_Val,cs ;AN000; store segment of STRING_BUF
 0328  26: 8C 4D 06          C		mov	word ptr es:[di+2].$P_Picked_Val,Psdata_Seg ;AN031; store segment of STRING_BUF
			     C	;
 032C  50                    C		push	ax			;AN000;
 032D  26: F6 47 02 01       C		test	byte ptr es:[bx].$P_Function_Flag,$P_CAP_File ;AN000; need CAPS by file table?
 0332  74 04                 C		je	$P_RLT_CAP00		;AN000;
			     C	
 0334  B0 04                 C		mov	al,$P_DOSTBL_File	;AN000; use file upper case table
 0336  EB 09                 C		jmp	short $P_RLT_CAP02	;AN000;
			     C	
 0338                        C	$P_RLT_CAP00:				;AN000;
 0338  26: F6 47 02 02       C		test	byte ptr es:[bx].$P_Function_Flag,$P_CAP_Char ;AN000; need CAPS by char table ?
 033D  74 05                 C		je	$P_RLT_CAP01		;AN000;
			     C	
 033F  B0 02                 C		mov	al,$P_DOSTBL_Char	;AN000; use character upper case table
 0341                        C	$P_RLT_CAP02:				;AN000;
 0341  E8 040F R             C		call	$P_Do_CAPS_String	;AN000;  process CAPS along the table
 0344                        C	$P_RLT_CAP01:				;AN000;
 0344  58                    C		pop	ax			;AN000;
 0345  26: F6 47 02 10       C		test	byte ptr es:[bx].$P_Function_Flag,$P_Rm_Colon ;AN000; removing colon at end ?
 034A  74 03                 C		je	$P_RLT_Exit		;AN000;
			     C	
 034C  E8 03E9 R             C		call	$P_Remove_Colon 	;AN000; then process it.
 034F                        C	$P_RLT_Exit:				;AN000;
 034F  5F                    C		pop	di			;AN000;
 0350  C3                    C		ret				;AN000;
 0351                        C	$P_Fill_Result endp			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-31


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Check_Match_Flags
			     C	;
			     C	; Function:  Check the mutch_flags and make the exit code and set the
			     C	;	     result buffer
			     C	;
			     C	;	    Check for types in this order:
			     C	;		Complex
			     C	;		Date
			     C	;		Time
			     C	;		Drive
			     C	;		Filespec
			     C	;		Quoted String
			     C	;		Simple String
			     C	;
			     C	; Input:     psdata_seg:SI -> $P_STRING_BUF
			     C	;	     ES:BX -> CONTROL block
			     C	;
			     C	; Output:    None
			     C	;
			     C	; Use:	     $P_Value, P$_SValue, $P_Simple_String, $P_Date_Format
			     C	;	     $P_Time_Format, $P_Complex_Format, $P_File_Foemat
			     C	;	     $P_Drive_Format
			     C	;***********************************************************************
 0351                        C	$P_Check_Match_Flags proc		;AN000;
 0351  2E: C6 06 00AA R 00   C		mov	psdata_seg:$P_err_flag,$P_NULL ;AN033;AC034;; clear filespec error flag.
 0357  50                    C		push	ax			;AN000;
 0358  26: 8B 07             C		mov	ax,es:[bx].$P_Match_Flag ;AN000; load match flag(16bit) to ax
			     C	
 035B  0B C0                 C		or	ax,ax			;AC035; test ax for zero
			     C	;(changed ;AC035;)  cmp     ax,0	;AN000; (tm12)
 035D  75 18                 C		jne	$P_Mat			;AN000; (tm12)
			     C	
 035F  50                    C		push	ax			;AN000; (tm12)
 0360  53                    C		push	bx			;AN000; (tm12)
 0361  52                    C		push	dx			;AN000; (tm12)
 0362  57                    C		push	di			;AN000; (tm12)
 0363  2E: C7 06 0002 R 0009 C		mov	psdata_seg:$P_RC,$P_Syntax ;AC034; (tm12)
 036A  B4 FF                 C		mov	ah,$P_No_Tag		;AN000; (tm12)
 036C  B0 03                 C		mov	al,$P_String		;AN000; (tm12)
 036E  E8 02CC R             C		call	$P_Fill_Result		;AN000; (tm12)
 0371  5F                    C		pop	di			;AN000; (tm12)
 0372  5A                    C		pop	dx			;AN000; (tm12)
 0373  5B                    C		pop	bx			;AN000; (tm12)
 0374  58                    C		pop	ax			;AN000; (tm12)
 0375  EB 02                 C		jmp	short $P_Bridge 	;AC035; (tm12)
			     C	
 0377                        C	$P_Mat: 				;AN000; (tm12)
			     C	
 0377  EB 03                 C		jmp	short $P_Match03	;AN025; (tm09)
			     C	
 0379                        C	$P_Bridge:				;AN000;
			     C	;	jmp	short $P_Match_Exit (tm02)
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-32


			     C	
 0379  EB 55 90              C		jmp	$P_Match_Exit		;AN000; (tm02)
			     C	
 037C                        C	$P_Match03:				;AN000;
			     C	; ENDIF ;AN000;(of TimeSW) (tm04)
			     C	IF	NumSW				;AN000;(Check if numeric value is supported)
 037C  A9 8000               C		test	ax,$P_Num_Val		;AN000; Numeric value
 037F  74 12                 C		je	$P_Match04		;AN000;
			     C	
 0381  2E: C7 06 0002 R 0000 C		mov	psdata_seg:$P_RC,$P_No_Error ;AC034; assume no error
 0388  E8 04A0 R             C		call	$P_Value		;AN000; do process
 038B  2E: 83 3E 0002 R 09   C		cmp	psdata_seg:$P_RC,$P_Syntax ;AC034; if error, examine the next type
 0391  75 3D                 C		jne	$P_Match_Exit		;AN000;
			     C	
 0393                        C	$P_Match04:				;AN000;
 0393  A9 4000               C		test	ax,$P_SNUM_Val		;AN000; Signed numeric value
 0396  74 12                 C		je	$P_Match05		;AN000;
			     C	
 0398  2E: C7 06 0002 R 0000 C		mov	psdata_seg:$P_RC,$P_No_Error ;AC034; assume no error
 039F  E8 047C R             C		call	$P_SValue		;AN000; do process
 03A2  2E: 83 3E 0002 R 09   C		cmp	psdata_seg:$P_RC,$P_Syntax ;AC034; if error, examine the next type
 03A8  75 26                 C		jne	$P_Match_Exit		;AN000;
			     C	
 03AA                        C	$P_Match05:				;AN000;
			     C	ENDIF					;AN000;(of NumSW)
			     C	IF	FileSW				;AN000;(Check if file spec is supported)
 03AA  A9 0200               C		test	ax,$P_File_Spc		;AN000; File spec
 03AD  74 12                 C		je	$P_Match07		;AN000;
			     C	
 03AF  2E: C7 06 0002 R 0000 C		mov	psdata_seg:$P_RC,$P_No_Error ;AC034; assume no error
 03B6  E8 06E9 R             C		call	$P_File_Format		;AN000; do process
 03B9  2E: 83 3E 0002 R 09   C		cmp	psdata_seg:$P_RC,$P_Syntax ;AC034; if error, examine the next type
 03BF  75 0F                 C		jne	$P_Match_Exit		;AN000;
			     C	
 03C1                        C	$P_Match07:				;AN000;
			     C	ENDIF					;AN000;(of FileSW)
 03C1  A9 2000               C		test	ax,$P_Simple_S		;AN000; Simple string
 03C4  74 0A                 C		je	$P_Match09		;AN000;
			     C	
 03C6  2E: C7 06 0002 R 0000 C		mov	psdata_seg:$P_RC,$P_No_Error ;AC034; assume no error
 03CD  E8 05DD R             C		call	$P_Simple_String	;AN000; do process
			     C	;;;;	cmp	psdata_seg:$P_RC,$P_Syntax ;AC034; These two lines will be alive
			     C	;;;;	jne	$P_Match_Exit			   ;when extending the match_flags.
 03D0                        C	$P_Match09:				;AN000;
 03D0                        C	$P_Match_Exit:				;AN000;
 03D0  2E: 80 3E 00AA R 01   C		cmp	psdata_seg:$P_err_flag,$P_error_filespec ;AC034; bad filespec ?
 03D6  75 0F                 C		jne	$P_Match2_Exit		;AN033; no, continue
 03D8  2E: 83 3E 0002 R 00   C		cmp	psdata_seg:$P_RC,$P_No_Error ;AN033;AC034;; check for other errors ?
 03DE  75 07                 C		jne	$P_Match2_Exit		;AN033; no, continue
 03E0  2E: C7 06 0002 R 0009 C		mov	psdata_seg:$P_RC,$P_Syntax ;AN033;AC034;; set error flag
 03E7                        C	$P_Match2_Exit: 			;AN033;
 03E7  58                    C		pop	ax			;AN000;
 03E8  C3                    C		ret				;AN000;
 03E9                        C	$P_Check_Match_Flags endp		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-33


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Remove_Colon;
			     C	;
			     C	; Function: Remove colon at end
			     C	;
			     C	; Input:    psdata_seg:SI points to string buffer to be examineed
			     C	;
			     C	; Output:   None
			     C	;
			     C	; Use:	$P_Chk_DBCS
			     C	;***********************************************************************
 03E9                        C	$P_Remove_Colon proc			;AN000;
 03E9  50                    C		push	ax			;AN000;
 03EA  56                    C		push	si			;AN000;
 03EB                        C	$P_RCOL_Loop:				;AN000;
 03EB  2E: 8A 04             C		mov	al,psdata_seg:[si]	;AN000; get character
 03EE  0A C0                 C		or	al,al			;AN000; end of string ?
 03F0  74 1A                 C		je	$P_RCOL_Exit		;AN000; if yes, just exit
			     C	
 03F2  3C 3A                 C		cmp	al,$P_Colon		;AN000; is it colon ?
 03F4  75 0D                 C		jne	$P_RCOL00		;AN000;
			     C	
 03F6  2E: 80 7C 01 00       C		cmp	byte ptr psdata_seg:[si+byte],$P_NULL ;AN000; if so, next is NULL ?
 03FB  75 06                 C		jne	$P_RCOL00		;AN000; no, then next char
			     C	
 03FD  2E: C6 04 00          C		mov	byte ptr psdata_seg:[si],$P_NULL ;AN000; yes, remove colon
 0401  EB 09                 C		jmp	short $P_RCOL_Exit	;AN000; and exit.
			     C	
 0403                        C	$P_RCOL00:				;AN000;
 0403  E8 084A R             C		call	$P_Chk_DBCS		;AN000; if not colon, then check if
 0406  73 01                 C		jnc	$P_RCOL01		;AN000; DBCS leading byte.
			     C	
 0408  46                    C		inc	si			;AN000; if yes, skip trailing byte
 0409                        C	$P_RCOL01:				;AN000;
 0409  46                    C		inc	si			;AN000; si points to next byte
 040A  EB DF                 C		jmp	short $P_RCOL_Loop	;AN000; loop until NULL encountered
			     C	
 040C                        C	$P_RCOL_Exit:				;AN000;
 040C  5E                    C		pop	si			;AN000;
 040D  58                    C		pop	ax			;AN000;
 040E  C3                    C		ret				;AN000;
 040F                        C	$P_Remove_Colon endp			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-34


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Do_CAPS_String;
			     C	;
			     C	; Function: Perform capitalization along with the file case map table
			     C	;	    or character case map table.
			     C	;
			     C	; Input:    AL = 2 : Use character table
			     C	;	    AL = 4 : Use file table
			     C	;	    psdata_seg:SI points to string buffer to be capitalized
			     C	;
			     C	; Output:   None
			     C	;
			     C	; Use:	$P_Do_CAPS_Char, $P_Chk_DBCS
			     C	;***********************************************************************
 040F                        C	$P_Do_CAPS_String proc			;AN000;
 040F  56                    C		push	si			;AN000;
 0410  52                    C		push	dx			;AN000;
 0411  8A D0                 C		mov	dl,al			;AN000; save info id
			     C	
 0413                        C	$P_DCS_Loop:				;AN000;
 0413  2E: 8A 04             C		mov	al,psdata_seg:[si]	;AN000; load charater and
 0416  E8 084A R             C		call	$P_Chk_DBCS		;AN000; check if DBCS leading byte
 0419  72 0C                 C		jc	$P_DCS00		;AN000; if yes, do not need CAPS
			     C	
 041B  0A C0                 C		or	al,al			;AN000; end of string ?
 041D  74 0C                 C		je	$P_DCS_Exit		;AN000; then exit.
			     C	
 041F  E8 042E R             C		call	$P_Do_CAPS_Char 	;AN000; Here a SBCS char need to be CAPS
 0422  2E: 88 04             C		mov	psdata_seg:[si],al	;AN000; stored upper case char to buffer
 0425  EB 01                 C		jmp	short $P_DCS01		;AN000; process nexit
 0427                        C	$P_DCS00:				;AN000;
 0427  46                    C		inc	si			;AN000; skip DBCS leading and trailing byte
 0428                        C	$P_DCS01:				;AN000;
 0428  46                    C		inc	si			;AN000; si point to next byte
 0429  EB E8                 C		jmp	short $P_DCS_Loop	;AN000; loop until NULL encountered
 042B                        C	$P_DCS_Exit:				;AN000;
 042B  5A                    C		pop	dx			;AN000;
 042C  5E                    C		pop	si			;AN000;
 042D  C3                    C		ret				;AN000;
 042E                        C	$P_Do_CAPS_String endp			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-35


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Do_CAPS_Char;
			     C	;
			     C	; Function: Perform capitalization along with the file case map table
			     C	;	    or character case map table.
			     C	;
			     C	; Input:    DL = 2 : Use character table
			     C	;	    DL = 4 : Use file table
			     C	;	    AL = character to be capitalized
			     C	;
			     C	; Output:   None
			     C	;
			     C	; Use:	INT 21h /w AH=65h
			     C	;***********************************************************************
 042E                        C	$P_Do_CAPS_Char proc			;AN000;
 042E  3C 80                 C		cmp	al,$P_ASCII80		;AN000; need upper case table ?
 0430  73 0C                 C		jae	$P_DCC_Go		;AN000;
			     C	
 0432  3C 61                 C		cmp	al,"a"                  ;AN000; if no,
 0434  72 45                 C		jb	$P_CAPS_Ret		;AN000;   check if  "a" <= AL <= "z"
			     C	
 0436  3C 7A                 C		cmp	al,"z"                  ;AN000;
 0438  77 41                 C		ja	$P_CAPS_Ret		;AN000;   if yes, make CAPS
			     C	
 043A  24 DF                 C		and	al,$P_Make_Upper	;AN000;   else do nothing.
 043C  EB 3D                 C		jmp	short $P_CAPS_Ret	;AN000;
			     C	
 043E                        C	$P_DCC_Go:				;AN000;
 043E  53                    C		push	bx			;AN000;
 043F  06                    C		push	es			;AN000;
 0440  57                    C		push	di			;AN000;
			     C	IF	CAPSW				;AN000;(Check if uppercase conversion is supported)
 0441  8D 3E 009C R          C		lea	di,psdata_seg:$P_File_CAP_Ptr ;AC034;
 0445  80 FA 04              C		cmp	dl,$P_DOSTBL_File	;AN000; Use file CAPS table ?
 0448  74 04                 C		je	$P_DCC00		;AN000;
			     C	
			     C	ENDIF					;AN000;(of CAPSW)
 044A  8D 3E 0097 R          C		lea	di,psdata_seg:$P_Char_CAP_Ptr ;AC034; or use char CAPS table ?
 044E                        C	$P_DCC00:				;AN000;
 044E  2E: 38 15             C		cmp	psdata_seg:[di],dl	;AN000; already got table address ?
 0451  74 17                 C		je	$P_DCC01		;AN000; if no,
			     C	
			     C	;In this next section, ES will be used to pass a 5 byte workarea to INT 21h,
			     C	; the GET COUNTYRY INFO call.  This usage of ES is required by the function
			     C	; call, regardless of what base register is currently be defined as PSDATA_SEG.
			     C	;BASESW EQU 0 means that ES is the psdata_seg reg.
			     C	
			     C	
 0453  50                    C		push	ax			;AN000; get CAPS table thru DOS call
 0454  51                    C		push	cx			;AN000;
 0455  52                    C		push	dx			;AN000;
			     C	
			     C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-36


 0456  0E                    C		push	PSDATA_SEG		;AC036; pass current base seg into
			     C						;(Note: this used to push CS.  BUG...
 0457  07                    C		pop	es			;AN000;   ES reg, required for
			     C						;get extended country information
 0458  B4 65                 C		mov	ah,$P_DOS_Get_TBL	;AN000; get extended CDI
 045A  8A C2                 C		mov	al,dl			;AN000; upper case table
 045C  BB FFFF               C		mov	bx,$P_DOSTBL_Def	;AN000; get active CON
 045F  B9 0005               C		mov	cx,$P_DOSTBL_BL 	;AN000; buffer length
 0462  BA FFFF               C		mov	dx,$P_DOSTBL_Def	;AN000; get for default code page
			     C						;DI already set to point to buffer
 0465  CD 21                 C		int	21h			;AN000; es:di point to buffer that
			     C						;now has been filled in with info
 0467  5A                    C		pop	dx			;AN000;
 0468  59                    C		pop	cx			;AN000;
 0469  58                    C		pop	ax			;AN000;
 046A                        C	$P_DCC01:				;AN000;
			     C	
			     C	;In this next section, ES will be used as the base of the XLAT table, provided
			     C	; by the previous GET COUNTRY INFO DOS call.  This usage of ES is made
			     C	; regardless of which base reg is currently the PSDATA_SEG reg.
			     C	
 046A  2E: 8B 5D 01          C		mov	bx,psdata_seg:[di+$P_DOS_TBL_Off] ;AN000; get offset of table
 046E  2E: 8E 45 03          C		mov	es,psdata_seg:[di+$P_DOS_TBL_Seg] ;AN000; get segment of table
 0472  43                    C		inc	bx			;AC035; add '2' to
 0473  43                    C		inc	bx			;AC035;  BX reg
			     C						;AN000; skip length field
			     C	;(changed ;AN035;) add	   bx,word	;AN000; skip length field
 0474  2C 80                 C		sub	al,$P_ASCII80		;AN000; make char to index
 0476  26: D7                C		xlat	es:[bx] 		;AN000; perform case map
			     C	
 0478  5F                    C		pop	di			;AN000;
 0479  07                    C		pop	es			;AN000;
 047A  5B                    C		pop	bx			;AN000;
 047B                        C	$P_CAPS_Ret:				;AN000;
 047B  C3                    C		ret				;AN000;
 047C                        C	$P_Do_CAPS_Char endp			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-37


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	IF	NumSW				;AN000;(Check if numeric value is supported)
			     C	; $P_Value / $P_SValue
			     C	;
			     C	; Function:  Make 32bit value from psdata_seg:SI and see value list
			     C	;	     and make result buffer.
			     C	;	     $P_SValue is an entry point for the signed value
			     C	;	     and this will simply call $P_Value after the handling
			     C	;	     of the sign character, "+" or "-"
			     C	;
			     C	; Input:     psdata_seg:SI -> $P_STRING_BUF
			     C	;	     ES:BX -> CONTROL block
			     C	;
			     C	; Output:    None
			     C	;
			     C	; Use:	$P_Fill_Result, $P_Check_OVF
			     C	;
			     C	; Vars: $P_RC(W), $P_Flags(RW)
			     C	;***********************************************************************
 047C                        C	$P_SValue proc				;AN000; when signed value here
 047C  50                    C		push	ax			;AN000;
 047D  2E: 80 0E 000E R 80   C		or	psdata_seg:$P_Flags2,$P_Signed	    ;AC034; indicate a signed numeric
 0483  2E: 80 26 000E R FD   C		and	psdata_seg:$P_Flags2,0ffh-$P_Neg  ;AC034; assume positive value
 0489  2E: 8A 04             C		mov	al,psdata_seg:[si]	;AN000; get sign
 048C  3C 2B                 C		cmp	al,$P_Plus		;AN000; "+" ?
 048E  74 0A                 C		je	$P_SVal00		;AN000;
			     C	
 0490  3C 2D                 C		cmp	al,$P_Minus		;AN000; "-" ?
 0492  75 07                 C		jne	$P_Sval01		;AN000; else
			     C	
 0494  2E: 80 0E 000E R 02   C		or	psdata_seg:$P_Flags2,$P_Neg ;AC034; set this is negative value
 049A                        C	$P_SVal00:				;AN000;
 049A  46                    C		inc	si			;AN000; skip sign char
 049B                        C	$P_Sval01:				;AN000;
 049B  E8 04A0 R             C		call	$P_Value		;AN000; and process value
 049E  58                    C		pop	ax			;AN000;
 049F  C3                    C		ret				;AN000;
 04A0                        C	$P_SValue endp				;AN000;
			     C	;***********************************************************************
 04A0                        C	$P_Value proc				;AN000;
 04A0  50                    C		push	ax			;AN000;
 04A1  51                    C		push	cx			;AN000;
 04A2  52                    C		push	dx			;AN000;
 04A3  56                    C		push	si			;AN000;
 04A4  33 C9                 C		xor	cx,cx			;AN000; cx = higher 16 bits
 04A6  33 D2                 C		xor	dx,dx			;AN000; dx = lower 16 bits
 04A8  53                    C		push	bx			;AN000; save control pointer
 04A9                        C	$P_Value_Loop:				;AN000;
 04A9  2E: 8A 04             C		mov	al,psdata_seg:[si]	;AN000; get character
 04AC  0A C0                 C		or	al,al			;AN000; end of line ?
 04AE  74 42                 C		je	$P_Value00		;AN000;
			     C	
 04B0  E8 05CF R             C		call	$P_0099 		;AN000; make asc(0..9) to bin(0..9)
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-38


 04B3  72 39                 C		jc	$P_Value_Err0		;AN000;
			     C	
 04B5  32 E4                 C		xor	ah,ah			;AN000;
 04B7  8B E8                 C		mov	bp,ax			;AN000; save binary number
 04B9  D1 E2                 C		shl	dx,1			;AN000; to have 2*x
 04BB  D1 D1                 C		rcl	cx,1			;AN000; shift left w/ carry
 04BD  E8 05BD R             C		call	$P_Check_OVF		;AN000; Overflow occurred ?
 04C0  72 2C                 C		jc	$P_Value_Err0		;AN000; then error, exit
			     C	
 04C2  8B DA                 C		mov	bx,dx			;AN000; save low(2*x)
 04C4  8B C1                 C		mov	ax,cx			;AN000; save high(2*x)
 04C6  D1 E2                 C		shl	dx,1			;AN000; to have 4*x
 04C8  D1 D1                 C		rcl	cx,1			;AN000; shift left w/ carry
 04CA  E8 05BD R             C		call	$P_Check_OVF		;AN000; Overflow occurred ?
 04CD  72 1F                 C		jc	$P_Value_Err0		;AN000; then error, exit
			     C	
 04CF  D1 E2                 C		shl	dx,1			;AN000; to have 8*x
 04D1  D1 D1                 C		rcl	cx,1			;AN000; shift left w/ carry
 04D3  E8 05BD R             C		call	$P_Check_OVF		;AN000; Overflow occurred ?
 04D6  72 16                 C		jc	$P_Value_Err0		;AN000; then error, exit
			     C	
 04D8  03 D3                 C		add	dx,bx			;AN000; now have 10*x
 04DA  13 C8                 C		adc	cx,ax			;AN000; 32bit ADD
 04DC  E8 05BD R             C		call	$P_Check_OVF		;AN000; Overflow occurred ?
 04DF  72 0D                 C		jc	$P_Value_Err0		;AN000; then error, exit
			     C	
 04E1  03 D5                 C		add	dx,bp			;AN000; Add the current one degree decimal
 04E3  83 D1 00              C		adc	cx,0			;AN000; if carry, add 1 to high 16bit
 04E6  E8 05BD R             C		call	$P_Check_OVF		;AN000; Overflow occurred ?
 04E9  72 03                 C		jc	$P_Value_Err0		;AN000; then error, exit
			     C	
 04EB  46                    C		inc	si			;AN000; update pointer
 04EC  EB BB                 C		jmp	short $P_Value_Loop	;AN000; loop until NULL encountered
			     C	;
 04EE                        C	$P_Value_Err0:				;AN000;
 04EE  5B                    C		pop	bx			;AN000;
 04EF  E9 05AA R             C		jmp	$P_Value_Err		;AN000; Bridge
			     C	;
 04F2                        C	$P_Value00:				;AN000;
 04F2  5B                    C		pop	bx			;AN000; restore control pointer
 04F3  2E: F6 06 000E R 02   C		test	psdata_seg:$P_Flags2,$P_Neg ;AC034; here cx,dx = 32bit value
 04F9  74 0A                 C		je	$P_Value01		;AN000; was it negative ?
			     C	
 04FB  F7 D1                 C		not	cx			;AN000; +
 04FD  F7 D2                 C		not	dx			;AN000; |- Make 2's complement
 04FF  83 C2 01              C		add	dx,1			;AN000; |
 0502  83 D1 00              C		adc	cx,0			;AN000; +
 0505                        C	$P_Value01:				;AN000; / nval =0
 0505  26: 8B 77 06          C		mov	si,es:[bx].$P_Value_List ;AN000; si points to value list
 0509  26: 8A 04             C		mov	al,es:[si]		;AN000; get nval
 050C  3C 00                 C		cmp	al,$P_nval_None 	;AN000; no value list ?
 050E  75 07                 C		jne	$P_Value02		;AN000;
			     C	
 0510  B0 01                 C		mov	al,$P_Number		;AN000; Set type
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-39


 0512  B4 FF                 C		mov	ah,$P_No_Tag		;AN000; No ITEM_TAG set
 0514  E9 05B5 R             C		jmp	$P_Value_Exit		;AN000;
			     C	
 0517                        C	$P_Value02:				;AN000; / nval = 1
			     C	IF	Val1SW				;AN000;(Check if value list id #1 is supported)
			     C	;(tm07) cmp	al,$P_nval_Range	;AN000; have range list ?
			     C	;(tm07) jne	$P_Value03		;AN000;
			     C	
 0517  46                    C		inc	si			;AN000;
 0518  26: 8A 04             C		mov	al,es:[si]		;AN000; al = number of range
 051B  3C 00                 C		cmp	al,$P_No_nrng		;AN000; (tm07)
 051D  74 60                 C		je	$P_Value03		;AN000; (tm07)
			     C	
 051F  46                    C		inc	si			;AN000; si points to 1st item_tag
 0520                        C	$P_Val02_Loop:				;AN000;
 0520  2E: F6 06 000E R 80   C		test	psdata_seg:$P_Flags2,$P_Signed ;AC034;
 0526  75 1E                 C		jne	$P_Val02_Sign		;AN000;
			     C	
 0528  26: 3B 4C 03          C		cmp	cx,es:[si+$P_Val_XH]	;AN000; comp cx with XH
 052C  72 36                 C		jb	$P_Val02_Next		;AN000;
			     C	
 052E  77 06                 C		ja	$P_Val_In		;AN000;
			     C	
 0530  26: 3B 54 01          C		cmp	dx,es:[si+$P_Val_XL]	;AN000; comp dx with XL
 0534  72 2E                 C		jb	$P_Val02_Next		;AN000;
			     C	
 0536                        C	$P_Val_In:				;AN000;
			     C	;;;;;;	cmp	cx,es:$P_Val_YH]	; comp cx with YH (tm01)
 0536  26: 3B 4C 07          C		cmp	cx,es:[si+$P_Val_YH]	;AN000; comp cx with YH (tm01)
 053A  77 28                 C		ja	$P_Val02_Next		;AN000;
			     C	
 053C  72 3A                 C		jb	$P_Val_Found		;AN000;
			     C	
 053E  26: 3B 54 05          C		cmp	dx,es:[si+$P_Val_YL]	;AN000; comp dx with YL
 0542  77 20                 C		ja	$P_Val02_Next		;AN000;
			     C	
 0544  EB 32                 C		jmp	short $P_Val_Found	;AN000;
			     C	
 0546                        C	$P_Val02_Sign:				;AN000;
 0546  26: 3B 4C 03          C		cmp	cx,es:[si+$P_Val_XH]	;AN000; comp cx with XH
 054A  7C 18                 C		jl	$P_Val02_Next		;AN000;
			     C	
 054C  7F 06                 C		jg	$P_SVal_In		;AN000;
			     C	
 054E  26: 3B 54 01          C		cmp	dx,es:[si+$P_Val_XL]	;AN000; comp dx with XL
 0552  7C 10                 C		jl	$P_Val02_Next		;AN000;
			     C	
 0554                        C	$P_SVal_In:				;AN000;
 0554  26: 3B 4C 07          C		cmp	cx,es:[si+$P_Val_YH]	;AN000; comp cx with YH
 0558  7F 0A                 C		jg	$P_Val02_Next		;AN000;
			     C	
 055A  7C 1C                 C		jl	$P_Val_Found		;AN000;
			     C	
 055C  26: 3B 54 05          C		cmp	dx,es:[si+$P_Val_YL]	;AN000; comp dx with YL
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-40


 0560  7F 02                 C		jg	$P_Val02_Next		;AN000;
			     C	
 0562  EB 14                 C		jmp	short $P_Val_Found	;AN000;
			     C	
 0564                        C	$P_Val02_Next:				;AN000;
 0564  83 C6 09              C		add	si,$P_Len_Range 	;AN000;
 0567  FE C8                 C		dec	al			;AN000; loop nrng times in AL
 0569  75 B5                 C		jne	$P_Val02_Loop		;AN000;
			     C						; / Not found
 056B  2E: C7 06 0002 R 0006 C		mov	psdata_seg:$P_RC,$P_Out_of_Range ;AC034;
 0572  B0 01                 C		mov	al,$P_Number		;AN000;
 0574  B4 FF                 C		mov	ah,$P_No_Tag		;AN000; No ITEM_TAG set
 0576  EB 3D                 C		jmp	short $P_Value_Exit	;AN000;
			     C	
			     C	ENDIF					;AN000;(of Val1SW)
			     C	IF	Val1SW+Val2SW			;AN000;(Check if value list id #1 or #2 is supported)
 0578                        C	$P_Val_Found:				;AN000;
 0578  B0 01                 C		mov	al,$P_Number		;AN000;
 057A  26: 8A 24             C		mov	ah,es:[si]		;AN000; found ITEM_TAG set
 057D  EB 36                 C		jmp	short $P_Value_Exit	;AN000;
			     C	
			     C	ENDIF					;AN000;(of Val1SW+Val2SW)
 057F                        C	$P_Value03:				;AN000; / nval = 2
			     C	IF	Val2SW				;AN000;(Check if value list id #2 is supported)
			     C	;;;;	cmp	al,$P_nval_Value	; have match list ? ASSUME nval=2,
			     C	;;;;	jne	$P_Value04		; even if it is 3 or more.
			     C	;(tm07) inc	si			;AN000;
			     C	;(tm07) mov	al,es:[si]		;AN000; al = nrng
 057F  B4 09                 C		mov	ah,$P_Len_Range 	;AN000;
 0581  F6 E4                 C		mul	ah			;AN000;  Skip nrng field
 0583  40                    C		inc	ax			;AN000;
 0584  03 F0                 C		add	si,ax			;AN000; si points to nnval
 0586  26: 8A 04             C		mov	al,es:[si]		;AN000; get nnval
 0589  46                    C		inc	si			;AN000; si points to 1st item_tag
 058A                        C	$P_Val03_Loop:				;AN000;
 058A  26: 3B 4C 03          C		cmp	cx,es:[si+$P_Val_XH]	;AN000; comp cx with XH
 058E  75 06                 C		jne	$P_Val03_Next		;AN000;
			     C	
 0590  26: 3B 54 01          C		cmp	dx,es:[si+$P_Val_XL]	;AN000; comp dx with XL
 0594  74 E2                 C		je	$P_Val_Found		;AN000;
			     C	
 0596                        C	$P_Val03_Next:				;AN000;
 0596  83 C6 05              C		add	si,$P_Len_Value 	;AN000; points to next value choice
 0599  FE C8                 C		dec	al			;AN000; loop nval times in AL
 059B  75 ED                 C		jne	$P_Val03_Loop		;AN000;
			     C						;AN000; / Not found
 059D  2E: C7 06 0002 R 0007 C		mov	psdata_seg:$P_RC,$P_Not_in_Val ;AC034;
 05A4  B0 01                 C		mov	al,$P_Number		;AN000;
 05A6  B4 FF                 C		mov	ah,$P_No_Tag		;AN000; No ITEM_TAG set
 05A8  EB 0B                 C		jmp	short $P_Value_Exit	;AN000;
			     C	
			     C	ENDIF					;AN000;(of Val2SW)
 05AA                        C	$P_Value04:				;AN000; / nval = 3 or else
 05AA                        C	$P_Value_Err:				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-41


 05AA  2E: C7 06 0002 R 0009 C		mov	psdata_seg:$P_RC,$P_Syntax ;AC034;
 05B1  B0 03                 C		mov	al,$P_String		;AN000; Set type
 05B3  B4 FF                 C		mov	ah,$P_No_Tag		;AN000; No ITEM_TAG set
 05B5                        C	$P_Value_Exit:				;AN000;
 05B5  E8 02CC R             C		call	$P_Fill_Result		;AN000;
 05B8  5E                    C		pop	si			;AN000;
 05B9  5A                    C		pop	dx			;AN000;
 05BA  59                    C		pop	cx			;AN000;
 05BB  58                    C		pop	ax			;AN000;
 05BC  C3                    C		ret				;AN000;
 05BD                        C	$P_Value endp				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-42


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Check_OVF
			     C	;
			     C	; Function:  Check if overflow is occurred with consideration of
			     C	;	     signed or un-signed numeric value
			     C	;
			     C	; Input:     Flag register
			     C	;
			     C	; Output:    CY = 1  :	Overflow
			     C	;
			     C	; Vars:     $P_Flags(R)
			     C	;***********************************************************************
 05BD                        C	$P_Check_OVF proc			;AN000;
 05BD  9C                    C		pushf				;AN000;
 05BE  2E: F6 06 000E R 02   C		test	psdata_seg:$P_Flags2,$P_Neg ;AC034; is it negative value ?
 05C4  75 02                 C		jne	$P_COVF 		;AN000; if no, check overflow
			     C	
 05C6  9D                    C		popf				;AN000; by the CY bit
 05C7  C3                    C		ret				;AN000;
			     C	
 05C8                        C	$P_COVF:				;AN000;
 05C8  9D                    C		popf				;AN000; else,
 05C9  70 02                 C		jo	$P_COVF00		;AN000; check overflow by the OF
			     C	
 05CB  F8                    C		clc				;AN000; indicate it with CY bit
 05CC  C3                    C		ret				;AN000; CY=0 means no overflow
			     C	
 05CD                        C	$P_COVF00:				;AN000;
 05CD  F9                    C		stc				;AN000; and CY=1 means overflow
 05CE  C3                    C		ret				;AN000;
 05CF                        C	$P_Check_OVF endp			;AN000;
			     C	ENDIF					;AN000;(of FarSW)
			     C	;***********************************************************************
			     C	; $P_0099;
			     C	;
			     C	; Function:  Make ASCII 0-9 to Binary 0-9
			     C	;
			     C	; Input:     AL = character code
			     C	;
			     C	; Output:    CY = 1 : AL is not number
			     C	;	     CY = 0 : AL contains binary value
			     C	;***********************************************************************
 05CF                        C	$P_0099 proc				;AN000;
 05CF  3C 30                 C		cmp	al,"0"                  ;AN000;
 05D1  72 08                 C		jb	$P_0099Err		;AN000;  must be 0 =< al =< 9
			     C	
 05D3  3C 39                 C		cmp	al,"9"                  ;AN000;
 05D5  77 04                 C		ja	$P_0099Err		;AN000;  must be 0 =< al =< 9
			     C	
 05D7  2C 30                 C		sub	al,"0"                  ;AN000; make char -> bin
 05D9  F8                    C		clc				;AN000; indicate no error
 05DA  C3                    C		ret				;AN000;
			     C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-43


 05DB                        C	$P_0099Err:				;AN000;
 05DB  F9                    C		stc				;AN000; indicate error
 05DC  C3                    C		ret				;AN000;
 05DD                        C	$P_0099 endp				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-44


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Simple_String
			     C	;
			     C	; Function:  See value list for the simple string
			     C	;	     and make result buffer.
			     C	;
			     C	; Input:     psdata_seg:SI -> $P_STRING_BUF
			     C	;	     ES:BX -> CONTROL block
			     C	;
			     C	; Output:    None
			     C	;
			     C	; Use:	$P_Fill_Result, $P_String_Comp
			     C	;
			     C	; Vars: $P_RC(W)
			     C	;***********************************************************************
 05DD                        C	$P_Simple_String proc			;AN000;
 05DD  50                    C		push	ax			;AN000;
 05DE  53                    C		push	bx			;AN000;
 05DF  52                    C		push	dx			;AN000;
 05E0  57                    C		push	di			;AN000;
 05E1  26: 8B 7F 06          C		mov	di,es:[bx].$P_Value_List ;AN000; di points to value list
 05E5  26: 8A 05             C		mov	al,es:[di]		;AN000; get nval
 05E8  0A C0                 C		or	al,al			;AN000; no value list ?
 05EA  75 04                 C		jne	$P_Sim00		;AN000; then
			     C	
 05EC  B4 FF                 C		mov	ah,$P_No_Tag		;AN000; No ITEM_TAG set
 05EE  EB 4C                 C		jmp	short $P_Sim_Exit	;AN000; and set result buffer
			     C	
 05F0                        C	$P_Sim00:				;AN000;
			     C	IF	Val3SW+KeySW			;AN000;(Check if keyword or value list id #3 is supported)
 05F0  3C 03                 C		cmp	al,$P_nval_String	;AN000; String choice list provided ?
 05F2  75 3F                 C		jne	$P_Sim01		;AN000; if no, syntax error
			     C	
 05F4  47                    C		inc	di			;AN000;
 05F5  26: 8A 05             C		mov	al,es:[di]		;AN000; al = nrng
 05F8  B4 09                 C		mov	ah,$P_Len_Range 	;AN000;
 05FA  F6 E4                 C		mul	ah			;AN000;  Skip nrng field
 05FC  40                    C		inc	ax			;AN000; ax = (nrng*9)+1
 05FD  03 F8                 C		add	di,ax			;AN000; di points to nnval
 05FF  26: 8A 05             C		mov	al,es:[di]		;AN000; get nnval
 0602  B4 05                 C		mov	ah,$P_Len_Value 	;AN000;
 0604  F6 E4                 C		mul	ah			;AN000; Skip nnval field
 0606  40                    C		inc	ax			;AN000; ax = (nnval*5)+1
 0607  03 F8                 C		add	di,ax			;AN000; di points to nstrval
 0609  26: 8A 05             C		mov	al,es:[di]		;AN000; get nstrval
 060C  47                    C		inc	di			;AC035; add '2' to
 060D  47                    C		inc	di			;AC035;  DI reg
			     C						;AN000; di points to 1st string in list
			     C	;(replaced ;AC035;) add     di,2	;AN000; di points to 1st string in list
 060E                        C	$P_Sim_Loop:				;AN000;
 060E  26: 8B 2D             C		mov	bp,es:[di]		;AN000; get string pointer
 0611  E8 0646 R             C		call	$P_String_Comp		;AN000; compare it with operand
 0614  73 12                 C		jnc	$P_Sim_Found		;AN000; found on list ?
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-45


			     C	
 0616  83 C7 03              C		add	di,$P_Len_String	;AN000; if no, point to next choice
 0619  FE C8                 C		dec	al			;AN000; loop nstval times in AL
 061B  75 F1                 C		jne	$P_Sim_Loop		;AN000;
			     C						;AN000; / Not found
 061D  2E: C7 06 0002 R 0008 C		mov	psdata_seg:$P_RC,$P_Not_In_Str ;AC034;
 0624  B4 FF                 C		mov	ah,$P_No_Tag		;AN000; No ITEM_TAG set
 0626  EB 14                 C		jmp	short $P_Sim_Exit	;AN000;
			     C	
 0628                        C	$P_Sim_Found:				;AN000;
 0628  26: 8A 65 FF          C		mov	ah,es:[di-1]		;AN000; set item_tag
 062C  B0 02                 C		mov	al,$P_List_Idx		;AN000;
 062E  26: 8B 15             C		mov	dx,es:[di]		;AN000; get address of STRING
 0631  EB 0B                 C		jmp	short $P_Sim_Exit0	;AN000;
			     C	ENDIF					;AN000;(of Val3SW+KeySW)
 0633                        C	$P_Sim01:				;AN000;
 0633  2E: C7 06 0002 R 0009 C		mov	psdata_seg:$P_RC,$P_Syntax ;AC034;
 063A  B4 FF                 C		mov	ah,$P_No_Tag		;AN000; No ITEM_TAG set
 063C                        C	$P_Sim_Exit:				;AN000;
 063C  B0 03                 C		mov	al,$P_String		;AN000; Set type
 063E                        C	$P_Sim_Exit0:				;AN000;
 063E  E8 02CC R             C		call	$P_Fill_Result		;AN000;
 0641  5F                    C		pop	di			;AN000;
 0642  5A                    C		pop	dx			;AN000;
 0643  5B                    C		pop	bx			;AN000;
 0644  58                    C		pop	ax			;AN000;
 0645  C3                    C		ret				;AN000;
 0646                        C	$P_Simple_String endp			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-46


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_String_Comp:
			     C	;
			     C	; Function:  Compare two string
			     C	;
			     C	; Input:     psdata_seg:SI -> 1st string
			     C	;	     ES:BP -> 2nd string  (Must be upper case)
			     C	;	     ES:BX -> CONTROL block
			     C	;
			     C	; Output:    CY = 1 if not match
			     C	;
			     C	; Use:	$P_Chk_DBCS, $P_Do_CAPS_Char
			     C	;
			     C	; Vars: $P_KEYor_SW_Ptr(W), $P_Flags(R). $P_KEYorSW_Ptr
			     C	;***********************************************************************
 0646                        C	$P_String_Comp proc			;AN000;
 0646  50                    C		push	ax			;AN000;
 0647  55                    C		push	bp			;AN000;
 0648  52                    C		push	dx			;AN000;
 0649  56                    C		push	si			;AN000;
 064A  B2 02                 C		mov	dl,$P_DOSTBL_Char	;AN000; use character case map table
 064C                        C	$P_SCOM_Loop:				;AN000;
 064C  2E: 8A 04             C		mov	al,psdata_seg:[si]	;AN000; get command character
 064F  E8 084A R             C		call	$P_Chk_DBCS		;AN000; DBCS ?
 0652  72 3C                 C		jc	$P_SCOM00		;AN000; yes,DBCS
			     C	
 0654  E8 042E R             C		call	$P_Do_CAPS_Char 	;AN000; else, upper case map before comparison
			     C	IF	KeySW+SwSW			;AN000;(Check if keyword or switch is supported)
 0657  2E: F6 06 000E R 08   C		test	psdata_seg:$P_Flags2,$P_Key_Cmp ;AC034; keyword search ?
 065D  74 0D                 C		je	$P_SCOM04		;AN000;
			     C	
 065F  3C 3D                 C		cmp	al,$P_Keyword		;AN000; "=" is delimiter
 0661  75 1F                 C		jne	$P_SCOM03		;AN000;IF "=" on command line AND  (bp+1=> char after the "=
				" in synonym list)
			     C	
 0663  26: 80 7E 01 00       C		cmp	byte ptr es:[bp+1],$P_NULL ;AN021;   at end of keyword string in the control block T
				HEN
 0668  75 71                 C		jne	$P_SCOM_DIFFER		;AN021;
			     C	
 066A  EB 13                 C		jmp	short $P_SCOM05 	;AN000;   keyword found in synonym list
			     C	
 066C                        C	$P_SCOM04:				;AN000;
 066C  2E: F6 06 000E R 10   C		test	psdata_seg:$P_Flags2,$P_SW_Cmp ;AC034; switch search ?
 0672  74 0E                 C		je	$P_SCOM03		;AN000;
			     C	
 0674  3C 3A                 C		cmp	al,$P_Colon		;AN000; ":" is delimiter, at end of switch on command line
 0676  75 0A                 C		jne	$P_SCOM03		;AN000; continue compares
			     C	
 0678  26: 80 7E 00 00       C		cmp	byte ptr es:[bp],$P_NULL ;AN021; IF at end of switch on command AND
 067D  75 5C                 C		jne	$P_SCOM_DIFFER		;AN021;   at end of switch string in the control block THEN
			     C	
 067F                        C	$P_SCOM05:				;AN000;   found a match
 067F  46                    C		inc	si			;AN000; si points to just after "=" or ":"
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-47


 0680  EB 5C                 C		jmp	short $P_SCOM_Same	;AN000; exit
			     C	
 0682                        C	$P_SCOM03:				;AN000;
			     C	ENDIF					;AN000;(of KeySW+SwSW)
 0682  26: 3A 46 00          C		cmp	al,es:[bp]		;AN000; compare operand w/ a synonym
 0686  75 1D                 C		jne	$P_SCOM_Differ0 	;AN000; if different, check ignore colon option
			     C	
 0688  0A C0                 C		or	al,al			;AN000; end of line
 068A  74 52                 C		je	$P_SCOM_Same		;AN000; if so, exit
			     C	
 068C  46                    C		inc	si			;AN000; update operand pointer
 068D  45                    C		inc	bp			;AN000; 	   and synonym pointer
 068E  EB 13                 C		jmp	short $P_SCOM01 	;AN000; loop until NULL or "=" or ":" found in case
			     C	
 0690                        C	$P_SCOM00:				;AN000; Here al is DBCS leading byte
 0690  26: 3A 46 00          C		cmp	al,es:[bp]		;AN000; compare leading byte
 0694  75 45                 C		jne	$P_SCOM_Differ		;AN000; if not match, say different
			     C	
 0696  46                    C		inc	si			;AN000; else, load next byte
 0697  2E: 8A 04             C		mov	al,psdata_seg:[si]	;AN000; and
 069A  45                    C		inc	bp			;AN000;
 069B  26: 3A 46 00          C		cmp	al,es:[bp]		;AN000; compare 2nd byte
 069F  75 3A                 C		jne	$P_SCOM_Differ		;AN000; if not match, say different, too
			     C	
 06A1  46                    C		inc	si			;AN000; else update operand pointer
 06A2  45                    C		inc	bp			;AN000; 		and synonym pointer
 06A3                        C	$P_SCOM01:				;AN000;
 06A3  EB A7                 C		jmp	short $P_SCOM_Loop	;AN000; loop until NULL or "=" or "/" found in case
			     C	
 06A5                        C	$P_SCOM_Differ0:			;AN000;
			     C	
			     C	IF	SwSW				;AN000;(tm10)
 06A5  2E: F6 06 000E R 40   C		test	psdata_seg:$P_Flags2,$P_SW ;AC034;(tm10)
 06AB  74 0F                 C		je	$P_not_applicable	;AN000;(tm10)
			     C	
 06AD  26: F7 47 02 0020     C		test	es:[bx].$P_Function_Flag,$P_colon_is_not_necessary ;AN000;(tm10)
 06B3  74 07                 C		je	$P_not_applicable	;AN000;(tm10)
			     C	
 06B5  26: 80 7E 00 00       C		cmp	byte ptr es:[bp],$P_NULL ;AN000;(tm10)
			     C	;(deleted ;AN025;) jne $P_not_applicable ;AN000;(tm10)
 06BA  74 22                 C		je	$P_SCOM_Same		;AN025;(tm10)
			     C	
 06BC                        C	$P_not_applicable:			;AN000;(tm10)
			     C	ENDIF					;AN000;(tm10)
			     C	
 06BC  26: F7 07 0010        C		test	es:[bx].$P_Match_Flag,$P_Ig_Colon ;AN000; ignore colon option specified ?
 06C1  74 18                 C		je	$P_SCOM_Differ		;AN000; if no, say different.
			     C	
 06C3  3C 3A                 C		cmp	al,$P_Colon		;AN000; End up with ":" and
 06C5  75 09                 C		jne	$P_SCOM02		;AN000;    subseqently
			     C	
 06C7  26: 80 7E 00 00       C		cmp	byte ptr es:[bp],$P_NULL ;AN000;       NULL ?
 06CC  75 0D                 C		jne	$P_SCOM_Differ		;AN000; if no, say different
			     C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-48


 06CE  EB 0E                 C		jmp	short $p_SCOM_Same	;AN000; else, say same
			     C	
 06D0                        C	$P_SCOM02:				;AN000;
 06D0  3C 00                 C		cmp	al,$P_NULL		;AN000; end up NULL and :
 06D2  75 07                 C		jne	$P_SCOM_Differ		;AN000;
			     C	
 06D4  26: 80 7E 00 3A       C		cmp	byte ptr es:[bp],$P_Colon ;AN000; if no, say different
 06D9  74 03                 C		je	$p_SCOM_Same		;AN000; else, say same
			     C	
 06DB                        C	$P_SCOM_Differ: 			;AN000;
 06DB  F9                    C		stc				;AN000; indicate not found
 06DC  EB 06                 C		jmp	short $P_SCOM_Exit	;AN000;
			     C	
 06DE                        C	$P_SCOM_Same:				;AN000;
 06DE  2E: 89 36 0011 R      C		mov	psdata_seg:$P_KEYorSW_Ptr,si ;AC034; for later use by keyword or switch
 06E3  F8                    C		clc				;AN000; indicate found
 06E4                        C	$P_SCOM_Exit:				;AN000;
 06E4  5E                    C		pop	si			;AN000;
 06E5  5A                    C		pop	dx			;AN000;
 06E6  5D                    C		pop	bp			;AN000;
 06E7  58                    C		pop	ax			;AN000;
 06E8  C3                    C		ret				;AN000;
 06E9                        C	$P_String_Comp endp			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-49


			     C	PAGE					;AN000;
			     C	;***********************************************************************
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-50


			     C	PAGE					;AN000;
			     C	;***********************************************************************
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-51


			     C	PAGE					;AN000;
			     C	;***********************************************************************
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-52


			     C	PAGE					;AN000;
			     C	;***********************************************************************
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-53


			     C	PAGE					;AN000;
			     C	;***********************************************************************
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-54


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Chk_DSQuote;
			     C	;
			     C	; Function: Check if AL is double quotation or single quotation
			     C	;
			     C	; Input:    AL = byte to be examineed
			     C	;
			     C	; Output:   ZF on if AL is single or double quotetaion
			     C	;
			     C	; Vars:  $P_SorD_Quote(W)
			     C	;***********************************************************************
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-55


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	IF	FileSW+DrvSW			;AN000;(Check if file spec or drive only is supported)
			     C	; $P_File_Format;
			     C	;
			     C	; Function:  Check if the input string is valid file spec format.
			     C	;	     And set the result buffer.
			     C	;
			     C	; Input:     psdata_seg:SI -> $P_STRING_BUF
			     C	;	     ES:BX -> CONTROL block
			     C	;
			     C	; Output:    None
			     C	;
			     C	; Use:	$P_Fill_Result, $P_Chk_DBCS, $P_FileSp_Chk
			     C	;
			     C	; Vars: $P_RC(W), $P_SI_Save(W), $P_Terminator(W), $P_SaveSI_Cmpx(R)
			     C	;	$P_SaveSI_Cmpx(R)
			     C	;***********************************************************************
 06E9                        C	$P_File_Format proc			;AN000;
 06E9  50                    C		push	ax			;AN000;
 06EA  57                    C		push	di			;AN000;
 06EB  56                    C		push	si			;AN000;
 06EC  2E: 8B 3E 000F R      C		mov	di,psdata_seg:$P_SaveSI_cmpx ;AC034; get user buffer address
 06F1                        C	$P_FileF_Loop0: 			;AN000; / skip special characters
 06F1  2E: 8A 04             C		mov	al,psdata_seg:[si]	;AN000; load character
 06F4  0A C0                 C		or	al,al			;AN000; end of line ?
 06F6  74 13                 C		je	$P_FileF_Err		;AN000; if yes, error exit
			     C	
 06F8  E8 075A R             C		call	$P_FileSp_Chk		;AN000; else, check if file special character
 06FB  75 24                 C		jne	$P_FileF03		;AN000; if yes,
			     C	
			     C	;AN033; deleted   inc	  di			  ;skip
			     C	;AN033; deleted   inc	  si			  ;   the
			     C	;AN033; deleted   jmp	  short $P_FileF_Loop0	  ;	  character
 06FD  2E: C6 06 00AA R 01   C		mov	psdata_seg:$P_err_flag,$P_error_filespec ;AN033;AC034;; set error flag- bad char.
 0703  5E                    C		pop	si			;AN033;
 0704  2E: C6 04 00          C		mov	byte ptr psdata_seg:[si],$P_NULL ;AN033;
 0708  5F                    C		pop	di			;AN033;
 0709  EB 3F                 C		jmp	short $P_FileF02	;AN033;
			     C	
			     C	
 070B                        C	$P_FileF_Err:				;AN000;
 070B  5E                    C		pop	si			;AN000;
 070C  2E: C6 04 00          C		mov	byte ptr psdata_seg:[si],$P_NULL ;AN000;
			     C	;(deleted ;AN030;) mov di,$P_SaveSI_cmpx ;AN000; get user buffer address
			     C	;(deleted ;AN030;) mov $P_SI_Save,di	 ;AN000; update pointer to user buffer
 0710  5F                    C		pop	di			;AN000;
 0711  26: F7 07 0001        C		test	es:[bx].$P_Match_Flag,$P_Optional ;AN000; is it optional ?
 0716  75 32                 C		jne	$P_FileF02		;AN000;
			     C	
 0718  2E: C7 06 0002 R 0002 C		mov	psdata_seg:$P_RC,$P_Op_Missing ;AC034; 3/17/87
 071F  EB 29                 C		jmp	short $P_FileF02	;AN000;
			     C	
 0721                        C	$P_FileF03:				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-56


 0721  58                    C		pop	ax			;AN000; discard save si
 0722  56                    C		push	si			;AN000; save new si
 0723                        C	$P_FileF_Loop1: 			;AN000;
 0723  2E: 8A 04             C		mov	al,psdata_seg:[si]	;AN000; load character (not special char)
 0726  0A C0                 C		or	al,al			;AN000; end of line ?
 0728  74 1E                 C		je	$P_FileF_RLT		;AN000;
			     C	
 072A  E8 075A R             C		call	$P_FileSp_Chk		;AN000; File special character ?
 072D  74 0B                 C		je	$P_FileF00		;AN000;
			     C	
 072F  E8 084A R             C		call	$P_Chk_DBCS		;AN000; no, then DBCS ?
 0732  73 02                 C		jnc	$P_FileF01		;AN000;
 0734  47                    C		inc	di			;AN000; if yes, skip next byte
 0735  46                    C		inc	si			;AN000;
 0736                        C	$P_FileF01:				;AN000;
 0736  47                    C		inc	di			;AN000;
 0737  46                    C		inc	si			;AN000;
 0738  EB E9                 C		jmp	short $P_FileF_Loop1	;AN000;
			     C	;
 073A                        C	$P_FileF00:				;AN000;
 073A  2E: A2 0008 R         C		mov	psdata_seg:$P_Terminator,al ;AC034;
 073E  2E: C6 04 00          C		mov	byte ptr psdata_seg:[si],$P_NULL ;AN000; update end of string
 0742  47                    C		inc	di			;AN000;
 0743  2E: 89 3E 0004 R      C		mov	psdata_seg:$P_SI_Save,di ;AC034; update next pointer in command line
 0748                        C	$P_FileF_RLT:				;AN000;
 0748  5E                    C		pop	si			;AN000;
 0749  5F                    C		pop	di			;AN000;
 074A                        C	$P_FileF02:				;AN000;
			     C	
 074A  58                    C		pop	ax			;AN000; (tm14)
 074B  A9 0200               C		test	ax,$P_File_Spc		;AN000; (tm14)
 074E  74 09                 C		je	$P_Drv_Only_Exit	;AN000; (tm14)
			     C	
 0750  50                    C		push	ax			;AN000;  (tm14)
			     C	
 0751  B4 FF                 C		mov	ah,$P_No_Tag		;AN000; set
 0753  B0 05                 C		mov	al,$P_File_Spec 	;AN000;    result
 0755  E8 02CC R             C		call	$P_Fill_Result		;AN000; 	 buffer to file spec
 0758  58                    C		pop	ax			;AN000;
			     C	
 0759                        C	$P_Drv_Only_Exit:			;AN000; (tm14)
			     C	
 0759  C3                    C		ret				;AN000;
 075A                        C	$P_File_Format endp			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-57


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_FileSp_Chk
			     C	;
			     C	; Function:  Check if the input byte is one of file special characters
			     C	;
			     C	; Input:     psdata_seg:SI -> $P_STRING_BUF
			     C	;	     AL = character code to be examineed
			     C	;
			     C	; Output:    ZF = 1 , AL is one of special characters
			     C	;***********************************************************************
 075A                        C	$P_FileSp_Chk proc			;AN000;
 075A  53                    C		push	bx			;AN000;
 075B  51                    C		push	cx			;AN000;
 075C  8D 1E 00A1 R          C		lea	bx,psdata_seg:$P_FileSp_Char ;AC034; special character table
 0760  B9 0009               C		mov	cx,$P_FileSp_Len	;AN000; load length of it
 0763                        C	$P_FileSp_Loop: 			;AN000;
 0763  2E: 3A 07             C		cmp	al,psdata_seg:[bx]	;AN000; is it one of special character ?
 0766  74 04                 C		je	$P_FileSp_Exit		;AN000;
			     C	
 0768  43                    C		inc	bx			;AN000;
 0769  E2 F8                 C		loop	$P_FileSp_Loop		;AN000;
			     C	
 076B  41                    C		inc	cx			;AN000; reset ZF
 076C                        C	$P_FileSp_Exit: 			;AN000;
 076C  59                    C		pop	cx			;AN000;
 076D  5B                    C		pop	bx			;AN000;
 076E  C3                    C		ret				;AN000;
 076F                        C	$P_FileSp_Chk endp			;AN000;
			     C	ENDIF					;AN000;(of FileSW+DrvSW)
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-58


			     C	PAGE					;AN000;
			     C	;***********************************************************************
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-59


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Skip_Delim;
			     C	;
			     C	; Function: Skip delimiters specified in the PARMS list, white space
			     C	;	    and comma.
			     C	;
			     C	; Input:    DS:SI -> Command String
			     C	;	    ES:DI -> Parameter List
			     C	;
			     C	; Output:   CY = 1 if the end of line encounterd
			     C	;	    CY = 0 then SI move to 1st non-delimiter character
			     C	;	    AL = Last examineed character
			     C	;
			     C	; Use:	    $P_Chk_EOL, $P_Chk_Delim,
			     C	;
			     C	; Vars:     $P_Flags(R)
			     C	;***********************************************************************
 076F                        C	$P_Skip_Delim proc			;AN000;
 076F                        C	$P_Skip_Delim_Loop:			;AN000;
 076F  AC                    C		LODSB				;AN000;
 0770  E8 0795 R             C		call	$P_Chk_EOL		;AN000; is it EOL character ?
 0773  74 18                 C		je	$P_Skip_Delim_CY	;AN000; if yes, exit w/ CY on
			     C	
 0775  E8 07CB R             C		call	$P_Chk_Delim		;AN000; is it one of delimiters ?
 0778  75 16                 C		jne	$P_Skip_Delim_NCY	;AN000; if no, exit w/ CY off
			     C	
 077A  2E: F6 06 000E R 20   C		test	psdata_seg:$P_Flags2,$P_Extra ;AC034; extra delim or comma found ?
 0780  74 ED                 C		je	$P_Skip_Delim_Loop	;AN000; if no, loop
			     C	
 0782  2E: F6 06 000E R 41   C		test	psdata_seg:$P_Flags2,$P_SW+$P_equ ;AC034; /x , or xxx=zzz , (tm08)
 0788  74 09                 C		je	short $P_Exit_At_Extra	;AN000; no switch, no keyword (tm08)
			     C	
 078A  4E                    C		dec	si			;AN000; backup si for next call (tm08)
 078B  EB 06                 C		jmp	short $P_Exit_At_Extra	;AN000; else exit w/ CY off
			     C	
 078D                        C	$P_Skip_Delim_CY:			;AN000;
 078D  F9                    C		stc				;AN000; indicate EOL
 078E  EB 01                 C		jmp	short $P_Skip_Delim_Exit ;AN000;
			     C	
 0790                        C	$P_Skip_Delim_NCY:			;AN000;
 0790  F8                    C		clc				;AN000; indicate non delim
 0791                        C	$P_Skip_Delim_Exit:			;AN000; in this case, need
 0791  4E                    C		dec	si			;AN000;  backup index pointer
 0792  C3                    C		ret				;AN000;
			     C	
 0793                        C	$P_Exit_At_Extra:			;AN000;
 0793  F8                    C		clc				;AN000; indicate extra delim
 0794  C3                    C		ret				;AN000;
 0795                        C	$P_Skip_Delim endp			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-60


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Chk_EOL;
			     C	;
			     C	; Function: Check if AL is one of End of Line characters.
			     C	;
			     C	; Input:    AL = character code
			     C	;	    ES:DI -> Parameter List
			     C	;
			     C	; Output:   ZF = 1 if one of End of Line characters
			     C	;**********************************************************************
 0795                        C	$P_Chk_EOL proc 			;AN000;
 0795  53                    C		push	bx			;AN000;
 0796  51                    C		push	cx			;AN000;
 0797  3C 0D                 C		cmp	al,$P_CR		;AN000; Carriage return ?
 0799  74 2D                 C		je	$P_Chk_EOL_Exit 	;AN000;
			     C	
 079B  3C 00                 C		cmp	al,$P_NULL		;AN000; zero ?
 079D  74 29                 C		je	$P_Chk_EOL_Exit 	;AN000;
			     C	
			     C	IF LFEOLSW				;AN028; IF LF TO BE ACCEPTED AS EOL
 079F  3C 0A                 C		cmp	al,$P_LF		;AN000; Line feed ?
 07A1  74 25                 C		je	$P_Chk_EOL_Exit 	;AN000;
			     C	ENDIF					;AN028;
			     C	
 07A3  26: 80 7D 02 02       C		cmp	byte ptr es:[di].$P_Num_Extra,$P_I_Have_EOL ;AN000; EOL character specified ?
 07A8  72 1E                 C		jb	$P_Chk_EOL_Exit 	;AN000;
			     C	
 07AA  33 DB                 C		xor	bx,bx			;AN000;
 07AC  26: 8A 5D 03          C		mov	bl,es:[di].$P_Len_Extra_Delim ;AN000; get length of delimiter list
 07B0  83 C3 04              C		add	bx,$P_Len_PARMS 	;AN000; skip it
 07B3  26: 80 39 00          C		cmp	byte ptr es:[bx+di],$P_I_Use_Default ;AN000; No extra EOL character ?
 07B7  74 0D                 C		je	$P_Chk_EOL_NZ		;AN000;
			     C	
 07B9  33 C9                 C		xor	cx,cx			;AN000; Get number of extra chcracter
 07BB  26: 8A 09             C		mov	cl,es:[bx+di]		;AN000;
 07BE                        C	$P_Chk_EOL_Loop:			;AN000;
 07BE  43                    C		inc	bx			;AN000;
 07BF  26: 3A 01             C		cmp	al,es:[bx+di]		;AN000; Check extra EOL character
 07C2  74 04                 C		je	$P_Chk_EOL_Exit 	;AN000;
			     C	
 07C4  E2 F8                 C		loop	$P_Chk_EOL_Loop 	;AN000;
			     C	
 07C6                        C	$P_Chk_EOL_NZ:				;AN000;
 07C6  3C 0D                 C		cmp	al,$P_CR		;AN000; reset ZF
 07C8                        C	$P_Chk_EOL_Exit:			;AN000;
 07C8  59                    C		pop	cx			;AN000;
 07C9  5B                    C		pop	bx			;AN000;
 07CA  C3                    C		ret				;AN000;
 07CB                        C	$P_Chk_EOL endp 			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-61


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Chk_Delim;
			     C	;
			     C	; Function: Check if AL is one of delimiter characters.
			     C	;	    if AL+[si] is DBCS blank, it is replaced with two SBCS
			     C	;	    blanks.
			     C	;
			     C	; Input:    AL = character code
			     C	;	    DS:SI -> Next Character
			     C	;	    ES:DI -> Parameter List
			     C	;
			     C	; Output:   ZF = 1 if one of delimiter characters
			     C	;	    SI points to the next character
			     C	; Vars:  $P_Terminator(W), $P_Flags(W)
			     C	;***********************************************************************
 07CB                        C	$P_Chk_Delim proc			;AN000;
 07CB  53                    C		push	bx			;AN000;
 07CC  51                    C		push	cx			;AN000;
 07CD  2E: C6 06 0008 R 20   C		mov	psdata_seg:$P_Terminator,$P_Space   ;AC034; Assume terminated by space
 07D3  2E: 80 26 000E R DF   C		and	psdata_seg:$P_Flags2,0ffh-$P_Extra ;AC034;
 07D9  3C 20                 C		cmp	al,$P_Space		;AN000; Space ?
 07DB  74 36                 C		je	$P_Chk_Delim_Exit	;AN000;
			     C	
 07DD  3C 09                 C		cmp	al,$P_TAB		;AN000; TAB ?
 07DF  74 32                 C		je	$P_Chk_Delim_Exit	;AN000;
			     C	
 07E1  3C 2C                 C		cmp	al,$P_Comma		;AN000; Comma ?
 07E3  74 31                 C		je	$P_Chk_Delim_Exit0	;AN000;
			     C	
 07E5                        C	$P_Chk_Delim00: 			;AN000;
 07E5  3C 81                 C		cmp	al,$P_DBSP1		;AN000; 1st byte of DBCS Space ?
 07E7  75 0C                 C		jne	$P_Chk_Delim01		;AN000;
			     C	
 07E9  80 3C 40              C		cmp	byte ptr [si],$P_DBSP2	;AN000; 2nd byte of DBCS Space ?
 07EC  75 07                 C		jne	$P_Chk_Delim01		;AN000;
			     C	
 07EE  B0 20                 C		mov	al,$P_Space		;AN000;
 07F0  46                    C		inc	si			;AN000; make si point to next character
 07F1  3A C0                 C		cmp	al,al			;AN000; Set ZF
 07F3  EB 1E                 C		jmp	short $P_Chk_Delim_Exit ;AN000;
			     C	
 07F5                        C	$P_Chk_Delim01: 			;AN000;
 07F5  26: 80 7D 02 01       C		cmp	byte ptr es:[di].$P_Num_Extra,$P_I_Have_Delim ;AN000; delimiter character specified 
				?
 07FA  72 17                 C		jb	$P_Chk_Delim_Exit	;AN000;
			     C	
 07FC  33 C9                 C		xor	cx,cx			;AN000;
 07FE  26: 8A 4D 03          C		mov	cl,es:[di].$P_Len_Extra_Delim ;AN000; get length of delimiter list
 0802  0B C9                 C		or	cx,cx			;AN000; No extra Delim character ?
 0804  74 0B                 C		je	$P_Chk_Delim_NZ 	;AN000;
			     C	
 0806  BB 0003               C		mov	bx,$P_Len_PARMS-1	;AN000; set bx to 1st extra delimiter
 0809                        C	$P_Chk_Delim_Loop:			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-62


 0809  43                    C		inc	bx			;AN000;
 080A  26: 3A 01             C		cmp	al,es:[bx+di]		;AN000; Check extra Delim character
 080D  74 07                 C		je	$P_Chk_Delim_Exit0	;AN000;
			     C	
 080F  E2 F8                 C		loop	$P_Chk_Delim_Loop	;AN000; examine all extra delimiter
			     C	
 0811                        C	$P_Chk_Delim_NZ:			;AN000;
 0811  3C 20                 C		cmp	al,$P_Space		;AN000; reset ZF
 0813                        C	$P_Chk_Delim_Exit:			;AN000;
			     C	;;;;	jne	$P_ChkDfin
			     C	;;;;	mov	psdata_seg:$P_Terminator,al ;AN034;
 0813                        C	$P_ChkDfin:				;AN000;
 0813  59                    C		pop	cx			;AN000;
 0814  5B                    C		pop	bx			;AN000;
 0815  C3                    C		ret				;AN000;
			     C	
 0816                        C	$P_Chk_Delim_Exit0:			;AN000;
 0816  2E: A2 0008 R         C		mov	psdata_seg:$P_Terminator,al ;AC034; keep terminated delimiter
 081A  2E: F6 06 000E R 01   C		test	psdata_seg:$P_Flags2,$P_Equ  ;AN027;AC034;; if terminating a key=
 0820  75 06                 C		jnz	$P_No_Set_Extra 	;AN027; then do not set the EXTRA bit
			     C	
 0822  2E: 80 0E 000E R 20   C		or	psdata_seg:$P_Flags2,$P_Extra ;AC034; flag terminated extra delimiter or comma
 0828                        C	$P_No_Set_Extra:			;AN027;
 0828  3A C0                 C		cmp	al,al			;AN000; set ZF
 082A  EB E7                 C		jmp	short $P_Chk_Delim_Exit ;AN000;
			     C	
 082C                        C	$P_Chk_Delim endp			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-63


			     C	PAGE					;AN000;
			     C	;***********************************************************************
			     C	; $P_Chk_Switch;
			     C	;
			     C	; Function: Check if AL is the switch character not in first position of
			     C	;	    $P_STRING_BUF
			     C	;
			     C	; Input:    AL = character code
			     C	;	    BX = current pointer within $P_String_Buf
			     C	;	    SI =>next char on command line (following the one in AL)
			     C	;
			     C	; Output:   CF = 1 (set)if AL is switch character, and not in first
			     C	;		 position, and has no chance of being part of a date string,
			     C	;		 i.e. should be treated as a delimiter.
			     C	
			     C	;	    CF = 0 (reset, cleared) if AL is not a switch char, is in the first
			     C	;		 position, or is a slash but may be part of a date string, i.e.
			     C	;		 should not be treated as a delimiter.
			     C	;
			     C	; Vars:  $P_Terminator(W)
			     C	
			     C	; Use:	 $P_0099
			     C	;***********************************************************************
 082C                        C	$P_Chk_Switch proc			;AN000;
			     C	
			     C	;AN020;; Function: Check if AL is the switch character from 2nd position of $P_STRING_BUF
			     C	;AN020;; Output:   ZF = 1 if switch character
			     C	;AN020;;	lea	bp,$P_STRING_BUF ;AN000;
			     C	;AN020;;	cmp	bx,bp		 ;AN000; 1st position ?
			     C	;AN020;;	je	$P_Chk_S_Exit_1  ;AN000;
			     C	;AN020;;	cmp	al,$P_Switch	 ;AN000;
			     C	;AN020;;	jmp	short $P_Chk_S_Exit_0  ;AN000;
			     C	;AN020;;$P_Chk_S_Exit_1:		       ;AN000;
			     C	;AN020;;	cmp	al,$P_Switch	 ;AN000; (tm08)
			     C	;AN020;;	jne	$P_Nop		;AN000; (tm08)
			     C	;AN020;;	or	$P_Flags2,$P_SW  ;AN000; (tm08) It could be valid switch
			     C	;AN020;;$P_Nop: 			;AN000; (tm08)
			     C	;AN020;;	inc	bp		       ;AN000;
			     C	;AN020;;	cmp	bx,bp		       ;AN000; reset ZF
			     C	;AN020;;$P_Chk_S_Exit_0:		       ;AN000;
			     C	;AN020;;	jne	$P_Chk_S_Exit	       ;AN000;
			     C	;AN020;;	mov	   $P_Terminator,al    ;AN000; store switch character
			     C	;AN020;;$P_Chk_S_Exit:			       ;AN000;
			     C	
 082C  8D 2E 0017 R          C		LEA	BP,psdata_seg:$P_String_Buf ;AN020;AC034; BP=OFFSET of $P_String_Buf even in group a
				ddressing
			     C	;	.IF <BX NE BP> THEN		;AN020;IF not first char THEN
 0830  3B DD                 C		cmp	BX,BP			;AN000;
 0832  74 0A                 C		je	$P_STRUC_L2		;AN000;
			     C	
			     C	;	    .IF <AL EQ $P_Switch> THEN	;AN020;otherwise see if a slash
 0834  3C 2F                 C		    cmp     AL,$P_Switch	;AN000;
 0836  75 03                 C		    jne     $P_STRUC_L5 	;AN000;
			     C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-64


 0838  F9                    C			STC			;AN020;not in first position and is slash, now see if might 
				be in date string
			     C	;	    .ELSE			;AN020;
 0839  EB 0E                 C		    jmp     short $P_STRUC_L1	;AN000;
			     C	
 083B                        C	$P_STRUC_L5:				;AN000;
 083B  F8                    C			CLC			;AN020;not a slash
			     C	;	    .ENDIF			;AN020;
			     C	;	.ELSE				;AN020;is first char in the buffer, ZF=0
 083C  EB 0B                 C		jmp	short $P_STRUC_L1	;AN000;
			     C	
 083E                        C	$P_STRUC_L2:				;AN000;
			     C	;	    .IF <AL EQ $P_Switch> THEN	;AN020;
 083E  3C 2F                 C		    cmp     AL,$P_Switch	;AN000;
 0840  75 06                 C		    jne     $P_STRUC_L12	;AN000;
			     C	
 0842  2E: 80 0E 000E R 40   C			OR	psdata_seg:$P_Flags2,$P_SW ;AN020;AC034;;could be valid switch, first char a
				nd is slash
			     C	;	    .ENDIF			;AN020;
 0848                        C	$P_STRUC_L12:				;AN000;
 0848  F8                    C		    CLC 			;AN020;CF=0 indicating first char
			     C	;	.ENDIF				;AN020;
 0849                        C	$P_STRUC_L1:				;AN000;
			     C	
 0849  C3                    C		ret				;AN000;
 084A                        C	$P_Chk_Switch endp			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-65


			     C		PAGE				;AN000;
			     C	;**************************************************************************
			     C	; $P_Chk_DBCS:
			     C	;
			     C	;  Function: Check if a specified byte is in ranges of the DBCS lead bytes
			     C	;
			     C	;  Input:
			     C	;	  AL	= Code to be examineed
			     C	;
			     C	;  Output:
			     C	;	  If CF is on then a lead byte of DBCS
			     C	;
			     C	; Use: INT 21h w/AH=63
			     C	;
			     C	; Vars:  $P_DBCSEV_Seg(RW), $P_DBCSEV_Off(RW)
			     C	;***************************************************************************
 084A                        C	$P_Chk_DBCS PROC			;AN000;
			     C	;
 084A  1E                    C		PUSH	DS			;AN000;
 084B  56                    C		PUSH	SI			;AN000;
 084C  53                    C		PUSH	bx			;AN000; (tm11)
 084D  2E: 83 3E 000B R 00   C		CMP	psdata_seg:$P_DBCSEV_SEG,0 ;AC034; ALREADY SET ?
 0853  75 27                 C		JNE	$P_DBCS00		;AN000;
			     C	
 0855  50                    C		PUSH	AX			;AN000;
			     C	;	PUSH	BX			;AN000; (tm11)
 0856  1E                    C		PUSH	ds			;AN000; (tm11)
 0857  51                    C		PUSH	CX			;AN000;
 0858  52                    C		PUSH	DX			;AN000;
 0859  57                    C		PUSH	DI			;AN000;
 085A  55                    C		PUSH	BP			;AN000;
 085B  06                    C		PUSH	ES			;AN000;
 085C  33 F6                 C		XOR	SI,SI			;AN000;
 085E  8E DE                 C		MOV	DS,SI			;AN000;
 0860  B8 6300               C		MOV	AX,$P_DOS_GetEV 	;AN000; GET DBCS EV CALL
 0863  CD 21                 C		INT	21H			;AN000;
			     C	
			     C	;	MOV	AX,DS			;AN000; (tm11)
			     C	;	OR	AX,AX			;AN000; (tm11)
 0865  8C DB                 C		MOV	bx,DS			;AN000; (tm11)
 0867  0B DB                 C		OR	bx,bx			;AN000; (tm11)
 0869  07                    C		POP	ES			;AN000;
 086A  5D                    C		POP	BP			;AN000;
 086B  5F                    C		POP	DI			;AN000;
 086C  5A                    C		POP	DX			;AN000;
 086D  59                    C		POP	CX			;AN000;
			     C	;	POP	BX			;AN000; (tm11)
 086E  1F                    C		POP	ds			;AN000; (tm11)
 086F  58                    C		POP	AX			;AN000;
 0870  74 29                 C		JE	$P_NON_DBCS		;AN000;
			     C	
 0872                        C	$P_DBCS02:				;AN000;
 0872  2E: 89 36 0009 R      C		MOV	psdata_seg:$P_DBCSEV_OFF,SI ;AC034; save EV offset
			     C	;	MOV	psdata_seg:$P_DBCSEV_SEG,DS ;AC034; save EV segment
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Page     1-66


 0877  2E: 89 1E 000B R      C		MOV	psdata_seg:$P_DBCSEV_SEG,bx ;AC034; save EV segment (tm11)
 087C                        C	$P_DBCS00:				;AN000;
 087C  2E: 8B 36 0009 R      C		MOV	SI,psdata_seg:$P_DBCSEV_OFF ;AC034; load EV offset
 0881  2E: 8E 1E 000B R      C		MOV	DS,psdata_seg:$P_DBCSEV_SEG ;AC034; and segment
			     C	
 0886                        C	$P_DBCS_LOOP:				;AN000;
 0886  83 3C 00              C		CMP	WORD PTR [SI],0 	;AN000; zero vector ?
 0889  74 10                 C		JE	$P_NON_DBCS		;AN000; then exit
			     C	
 088B  3A 04                 C		CMP	AL,[SI] 		;AN000;
 088D  72 08                 C		JB	$P_DBCS01		;AN000; Check if AL is in
			     C	
 088F  3A 44 01              C		CMP	AL,[SI+BYTE]		;AN000;   range of
 0892  77 03                 C		JA	$P_DBCS01		;AN000;      the vector
			     C	
 0894  F9                    C		STC				;AN000; if yes, indicate DBCS and exit
 0895  EB 05                 C		JMP	short $P_DBCS_EXIT	;AN000;
			     C	
 0897                        C	$P_DBCS01:				;AN000;
 0897  46                    C		INC	SI			;AC035; add '2' to
 0898  46                    C		INC	SI			;AC035;  SI reg
			     C						;AN000; get next vector
			     C	;(changed ;AC035;) ADD	   SI,2 	;AN000; get next vector
 0899  EB EB                 C		JMP	short $P_DBCS_LOOP	;AN000; loop until zero vector found
			     C	
 089B                        C	$P_NON_DBCS:				;AN000;
 089B  F8                    C		CLC				;AN000; indicate SBCS
 089C                        C	$P_DBCS_EXIT:				;AN000;
 089C  5B                    C		POP	bx			;AN000; (tm11)
 089D  5E                    C		POP	SI			;AN000;
 089E  1F                    C		POP	DS			;AN000;
 089F  C3                    C		RET				;AN000;
 08A0                        C	$P_Chk_DBCS ENDP			;AN000;
								       ;;					;AN000;
 08A0				CODE	ENDS			       ;;					;AN000;
					END									;AN000;

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Symbols-1


Macros:

		N a m e			Lines

.ELSE  . . . . . . . . . . . . .  	  21
.ELSEIF  . . . . . . . . . . . .  	  16
.ENDIF . . . . . . . . . . . . .  	  11
.ENDSELECT . . . . . . . . . . .  	  15
.ENDWHILE  . . . . . . . . . . .  	  10
.FOR . . . . . . . . . . . . . .  	  23
.IF  . . . . . . . . . . . . . .  	  13
.LEAVE . . . . . . . . . . . . .  	   1
.LOOP  . . . . . . . . . . . . .  	  12
.NEXT  . . . . . . . . . . . . .  	  20
.OTHERWISE . . . . . . . . . . .  	  21
.REPEAT  . . . . . . . . . . . .  	   9
.SELECT  . . . . . . . . . . . .  	   4
.THEN  . . . . . . . . . . . . .  	   6
.UNTIL . . . . . . . . . . . . .  	   1
.WHEN  . . . . . . . . . . . . .  	  24
.WHILE . . . . . . . . . . . . .  	  14

Structures and Records:

                N a m e                 Width   # fields
                                        Shift   Width   Mask    Initial

$P_CDI . . . . . . . . . . . . .  	0022	000C
  $P_CDI_DATEF . . . . . . . . .  	0000
  $P_CDI_MONEY . . . . . . . . .  	0002
  $P_CDI_1000  . . . . . . . . .  	0007
  $P_CDI_DEC . . . . . . . . . .  	0009
  $P_CDI_DATES . . . . . . . . .  	000B
  $P_CDI_TIMES . . . . . . . . .  	000D
  $P_CDI_TIMEF . . . . . . . . .  	0011
$P_CONTROL_BLK . . . . . . . . .  	000A	0006
  $P_MATCH_FLAG  . . . . . . . .  	0000
  $P_FUNCTION_FLAG . . . . . . .  	0002
  $P_RESULT_BUF  . . . . . . . .  	0004
  $P_VALUE_LIST  . . . . . . . .  	0006
  $P_NID . . . . . . . . . . . .  	0008
  $P_KEYORSW . . . . . . . . . .  	0009
$P_DOS_TBL . . . . . . . . . . .  	0005	0003
  $P_DOS_INFOID  . . . . . . . .  	0000
  $P_DOS_TBL_OFF . . . . . . . .  	0001
  $P_DOS_TBL_SEG . . . . . . . .  	0003
$P_PARMSX_BLK  . . . . . . . . .  	0004	0003
  $P_MINP  . . . . . . . . . . .  	0000
  $P_MAXP  . . . . . . . . . . .  	0001
  $P_1ST_CONTROL . . . . . . . .  	0002
$P_PARMS_BLK . . . . . . . . . .  	0004	0003
  $P_PARMSX_ADDRESS  . . . . . .  	0000
  $P_NUM_EXTRA . . . . . . . . .  	0002
  $P_LEN_EXTRA_DELIM . . . . . .  	0003
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Symbols-2


$P_RESULT_BLK  . . . . . . . . .  	0008	0004
  $P_TYPE  . . . . . . . . . . .  	0000
  $P_ITEM_TAG  . . . . . . . . .  	0001
  $P_SYNONYM_PTR . . . . . . . .  	0002
  $P_PICKED_VAL  . . . . . . . .  	0004
$P_VAL_LIST  . . . . . . . . . .  	0009	0005
  $P_NUMOFLIST . . . . . . . . .  	0000
  $P_VAL_XL  . . . . . . . . . .  	0001
  $P_VAL_XH  . . . . . . . . . .  	0003
  $P_VAL_YL  . . . . . . . . . .  	0005
  $P_VAL_YH  . . . . . . . . . .  	0007

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

CODE . . . . . . . . . . . . . .  	08A0	PARA	PUBLIC	'CODE'

Symbols:            

                N a m e         	Type	 Value	 Attr

CAPSW  . . . . . . . . . . . . .  	NUMBER	0001	
CMPXSW . . . . . . . . . . . . .  	NUMBER	0000	

DATESW . . . . . . . . . . . . .  	NUMBER	0000	
DRVSW  . . . . . . . . . . . . .  	NUMBER	0000	

FARSW  . . . . . . . . . . . . .  	NUMBER	0000	
FILESW . . . . . . . . . . . . .  	NUMBER	0001	

INCSW  . . . . . . . . . . . . .  	NUMBER	0001	

KEYSW  . . . . . . . . . . . . .  	NUMBER	0000	

LFEOLSW  . . . . . . . . . . . .  	NUMBER	0001	

NUMSW  . . . . . . . . . . . . .  	NUMBER	0001	

PSDATA_SEG . . . . . . . . . . .  	ALIAS	 CS		

QUSSW  . . . . . . . . . . . . .  	NUMBER	0000	

SWSW . . . . . . . . . . . . . .  	NUMBER	0001	
SYSPARSE . . . . . . . . . . . .  	N PROC	00AB	CODE	Global	Length = 0159

TIMESW . . . . . . . . . . . . .  	NUMBER	0000	

VAL1SW . . . . . . . . . . . . .  	NUMBER	0001	
VAL2SW . . . . . . . . . . . . .  	NUMBER	0001	
VAL3SW . . . . . . . . . . . . .  	NUMBER	0001	

$P_0099  . . . . . . . . . . . .  	N PROC	05CF	CODE	Length = 000E
$P_0099ERR . . . . . . . . . . .  	L NEAR	05DB	CODE
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Symbols-3


$P_ASCII80 . . . . . . . . . . .  	NUMBER	0080	
$P_BRIDGE  . . . . . . . . . . .  	L NEAR	0379	CODE
$P_CAPS_RET  . . . . . . . . . .  	L NEAR	047B	CODE
$P_CAP_CHAR  . . . . . . . . . .  	NUMBER	0002	
$P_CAP_FILE  . . . . . . . . . .  	NUMBER	0001	
$P_CHAR_CAP_PTR  . . . . . . . .  	L BYTE	0097	CODE
$P_CHECK_MATCH_FLAGS . . . . . .  	N PROC	0351	CODE	Length = 0098
$P_CHECK_OVF . . . . . . . . . .  	N PROC	05BD	CODE	Length = 0012
$P_CHKDFIN . . . . . . . . . . .  	L NEAR	0813	CODE
$P_CHK_DBCS  . . . . . . . . . .  	N PROC	084A	CODE	Length = 0056
$P_CHK_DELIM . . . . . . . . . .  	N PROC	07CB	CODE	Length = 0061
$P_CHK_DELIM00 . . . . . . . . .  	L NEAR	07E5	CODE
$P_CHK_DELIM01 . . . . . . . . .  	L NEAR	07F5	CODE
$P_CHK_DELIM_EXIT  . . . . . . .  	L NEAR	0813	CODE
$P_CHK_DELIM_EXIT0 . . . . . . .  	L NEAR	0816	CODE
$P_CHK_DELIM_LOOP  . . . . . . .  	L NEAR	0809	CODE
$P_CHK_DELIM_NZ  . . . . . . . .  	L NEAR	0811	CODE
$P_CHK_EOL . . . . . . . . . . .  	N PROC	0795	CODE	Length = 0036
$P_CHK_EOL_EXIT  . . . . . . . .  	L NEAR	07C8	CODE
$P_CHK_EOL_LOOP  . . . . . . . .  	L NEAR	07BE	CODE
$P_CHK_EOL_NZ  . . . . . . . . .  	L NEAR	07C6	CODE
$P_CHK_IF_DATA_REQUIRED  . . . .  	L NEAR	02A2	CODE
$P_CHK_KEY_CONTROL . . . . . . .  	N PROC	0236	CODE	Length = 0002
$P_CHK_POS_CONTROL . . . . . . .  	N PROC	0204	CODE	Length = 0032
$P_CHK_SWITCH  . . . . . . . . .  	N PROC	082C	CODE	Length = 001E
$P_CHK_SW_CONTROL  . . . . . . .  	N PROC	0269	CODE	Length = 0063
$P_CHK_SW_ERR0 . . . . . . . . .  	L NEAR	02BE	CODE
$P_CHK_SW_EXIT . . . . . . . . .  	L NEAR	02C1	CODE
$P_CHK_SW_SINGLE_EXIT  . . . . .  	L NEAR	02CB	CODE
$P_CMPX_S  . . . . . . . . . . .  	NUMBER	0400	
$P_COLON . . . . . . . . . . . .  	NUMBER	003A	
$P_COLON_IS_NOT_NECESSARY  . . .  	NUMBER	0020	
$P_COLON_PERIOD  . . . . . . . .  	NUMBER	0001	
$P_COMMA . . . . . . . . . . . .  	NUMBER	002C	
$P_COMPLEX . . . . . . . . . . .  	NUMBER	0004	
$P_COVF  . . . . . . . . . . . .  	L NEAR	05C8	CODE
$P_COVF00  . . . . . . . . . . .  	L NEAR	05CD	CODE
$P_CPC00 . . . . . . . . . . . .  	L NEAR	0212	CODE
$P_CPC01 . . . . . . . . . . . .  	L NEAR	0231	CODE
$P_CPC02 . . . . . . . . . . . .  	L NEAR	0226	CODE
$P_CPC_EXIT  . . . . . . . . . .  	L NEAR	0234	CODE
$P_CR  . . . . . . . . . . . . .  	NUMBER	000D	
$P_CSW00 . . . . . . . . . . . .  	L NEAR	02B8	CODE
$P_DATE_DMY  . . . . . . . . . .  	NUMBER	0001	
$P_DATE_F  . . . . . . . . . . .  	NUMBER	0007	
$P_DATE_MDY  . . . . . . . . . .  	NUMBER	0000	
$P_DATE_S  . . . . . . . . . . .  	NUMBER	1000	
$P_DATE_YMD  . . . . . . . . . .  	NUMBER	0002	
$P_DBCS00  . . . . . . . . . . .  	L NEAR	087C	CODE
$P_DBCS01  . . . . . . . . . . .  	L NEAR	0897	CODE
$P_DBCS02  . . . . . . . . . . .  	L NEAR	0872	CODE
$P_DBCSEV_OFF  . . . . . . . . .  	L WORD	0009	CODE
$P_DBCSEV_SEG  . . . . . . . . .  	L WORD	000B	CODE
$P_DBCS_EXIT . . . . . . . . . .  	L NEAR	089C	CODE
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Symbols-4


$P_DBCS_LOOP . . . . . . . . . .  	L NEAR	0886	CODE
$P_DBSP1 . . . . . . . . . . . .  	NUMBER	0081	
$P_DBSP2 . . . . . . . . . . . .  	NUMBER	0040	
$P_DCC00 . . . . . . . . . . . .  	L NEAR	044E	CODE
$P_DCC01 . . . . . . . . . . . .  	L NEAR	046A	CODE
$P_DCC_GO  . . . . . . . . . . .  	L NEAR	043E	CODE
$P_DCS00 . . . . . . . . . . . .  	L NEAR	0427	CODE
$P_DCS01 . . . . . . . . . . . .  	L NEAR	0428	CODE
$P_DCS_EXIT  . . . . . . . . . .  	L NEAR	042B	CODE
$P_DCS_LOOP  . . . . . . . . . .  	L NEAR	0413	CODE
$P_DOSTBL_BL . . . . . . . . . .  	NUMBER	0005	
$P_DOSTBL_CHAR . . . . . . . . .  	NUMBER	0002	
$P_DOSTBL_DEF  . . . . . . . . .  	NUMBER	-0001	
$P_DOSTBL_FILE . . . . . . . . .  	NUMBER	0004	
$P_DOS_GETEV . . . . . . . . . .  	NUMBER	6300	
$P_DOS_GET_CDI . . . . . . . . .  	NUMBER	3800	
$P_DOS_GET_TBL . . . . . . . . .  	NUMBER	0065	
$P_DO_CAPS_CHAR  . . . . . . . .  	N PROC	042E	CODE	Length = 004E
$P_DO_CAPS_STRING  . . . . . . .  	N PROC	040F	CODE	Length = 001F
$P_DQUOTE  . . . . . . . . . . .  	NUMBER	0022	
$P_DRIVE . . . . . . . . . . . .  	NUMBER	0006	
$P_DRV_ONLY  . . . . . . . . . .  	NUMBER	0100	
$P_DRV_ONLY_EXIT . . . . . . . .  	L NEAR	0759	CODE
$P_DX  . . . . . . . . . . . . .  	L WORD	0006	CODE
$P_EOL . . . . . . . . . . . . .  	NUMBER	0000	
$P_EQU . . . . . . . . . . . . .  	NUMBER	0001	
$P_ERROR_FILESPEC  . . . . . . .  	NUMBER	0001	
$P_ERR_FLAG  . . . . . . . . . .  	L BYTE	00AA	CODE
$P_EXIT_AT_EXTRA . . . . . . . .  	L NEAR	0793	CODE
$P_EXTRA . . . . . . . . . . . .  	NUMBER	0020	
$P_FILEF00 . . . . . . . . . . .  	L NEAR	073A	CODE
$P_FILEF01 . . . . . . . . . . .  	L NEAR	0736	CODE
$P_FILEF02 . . . . . . . . . . .  	L NEAR	074A	CODE
$P_FILEF03 . . . . . . . . . . .  	L NEAR	0721	CODE
$P_FILEF_ERR . . . . . . . . . .  	L NEAR	070B	CODE
$P_FILEF_LOOP0 . . . . . . . . .  	L NEAR	06F1	CODE
$P_FILEF_LOOP1 . . . . . . . . .  	L NEAR	0723	CODE
$P_FILEF_RLT . . . . . . . . . .  	L NEAR	0748	CODE
$P_FILESP_CHAR . . . . . . . . .  	L BYTE	00A1	CODE
$P_FILESP_CHK  . . . . . . . . .  	N PROC	075A	CODE	Length = 0015
$P_FILESP_EXIT . . . . . . . . .  	L NEAR	076C	CODE
$P_FILESP_LEN  . . . . . . . . .  	NUMBER	0009	
$P_FILESP_LOOP . . . . . . . . .  	L NEAR	0763	CODE
$P_FILE_CAP_PTR  . . . . . . . .  	L BYTE	009C	CODE
$P_FILE_FORMAT . . . . . . . . .  	N PROC	06E9	CODE	Length = 0071
$P_FILE_SPC  . . . . . . . . . .  	NUMBER	0200	
$P_FILE_SPEC . . . . . . . . . .  	NUMBER	0005	
$P_FILL_RESULT . . . . . . . . .  	N PROC	02CC	CODE	Length = 0085
$P_FIN . . . . . . . . . . . . .  	L NEAR	00E1	CODE
$P_FLAGS . . . . . . . . . . . .  	L WORD	000D	CODE
$P_FLAGS1  . . . . . . . . . . .  	BYTE	000D	CODE
$P_FLAGS2  . . . . . . . . . . .  	BYTE	000E	CODE
$P_FOUND_SYNONYM . . . . . . . .  	L WORD	0015	CODE
$P_IG_COLON  . . . . . . . . . .  	NUMBER	0010	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Symbols-5


$P_I_HAVE_DELIM  . . . . . . . .  	NUMBER	0001	
$P_I_HAVE_EOL  . . . . . . . . .  	NUMBER	0002	
$P_I_USE_DEFAULT . . . . . . . .  	NUMBER	0000	
$P_KEYORSW_EXIT  . . . . . . . .  	L NEAR	025A	CODE
$P_KEYORSW_FOUND . . . . . . . .  	L NEAR	0254	CODE
$P_KEYORSW_LOOP  . . . . . . . .  	L NEAR	0247	CODE
$P_KEYORSW_NOT_FOUND . . . . . .  	L NEAR	0251	CODE
$P_KEYORSW_PTR . . . . . . . . .  	L WORD	0011	CODE
$P_KEYWORD . . . . . . . . . . .  	NUMBER	003D	
$P_KEY_CMP . . . . . . . . . . .  	NUMBER	0008	
$P_KEY_MANAGER . . . . . . . . .  	L NEAR	01B3	CODE
$P_KEY_MGR_LOOP  . . . . . . . .  	L NEAR	01D2	CODE
$P_KEY_NOT_FOUND . . . . . . . .  	L NEAR	01E0	CODE
$P_LEN_PARMS . . . . . . . . . .  	NUMBER	0004	
$P_LEN_RANGE . . . . . . . . . .  	NUMBER	0009	
$P_LEN_STRING  . . . . . . . . .  	NUMBER	0003	
$P_LEN_VALUE . . . . . . . . . .  	NUMBER	0005	
$P_LF  . . . . . . . . . . . . .  	NUMBER	000A	
$P_LIST_IDX  . . . . . . . . . .  	NUMBER	0002	
$P_LPAREN  . . . . . . . . . . .  	NUMBER	0028	
$P_MAKE_LOWER  . . . . . . . . .  	NUMBER	0020	
$P_MAKE_UPPER  . . . . . . . . .  	NUMBER	00DF	
$P_MAT . . . . . . . . . . . . .  	L NEAR	0377	CODE
$P_MATCH03 . . . . . . . . . . .  	L NEAR	037C	CODE
$P_MATCH04 . . . . . . . . . . .  	L NEAR	0393	CODE
$P_MATCH05 . . . . . . . . . . .  	L NEAR	03AA	CODE
$P_MATCH07 . . . . . . . . . . .  	L NEAR	03C1	CODE
$P_MATCH09 . . . . . . . . . . .  	L NEAR	03D0	CODE
$P_MATCH2_EXIT . . . . . . . . .  	L NEAR	03E7	CODE
$P_MATCH_EXIT  . . . . . . . . .  	L NEAR	03D0	CODE
$P_MBP_EXIT  . . . . . . . . . .  	L NEAR	0267	CODE
$P_MBP_LOOP  . . . . . . . . . .  	L NEAR	025D	CODE
$P_MINUS . . . . . . . . . . . .  	NUMBER	002D	
$P_MOVEBP_NUL  . . . . . . . . .  	N PROC	025D	CODE	Length = 000C
$P_NEG . . . . . . . . . . . . .  	NUMBER	0002	
$P_NON_DBCS  . . . . . . . . . .  	L NEAR	089B	CODE
$P_NOT_APPLICABLE  . . . . . . .  	L NEAR	06BC	CODE
$P_NOT_IN_KEY  . . . . . . . . .  	NUMBER	0004	
$P_NOT_IN_STR  . . . . . . . . .  	NUMBER	0008	
$P_NOT_IN_SW . . . . . . . . . .  	NUMBER	0003	
$P_NOT_IN_VAL  . . . . . . . . .  	NUMBER	0007	
$P_NO_ERROR  . . . . . . . . . .  	NUMBER	0000	
$P_NO_NRNG . . . . . . . . . . .  	NUMBER	0000	
$P_NO_SET_EXTRA  . . . . . . . .  	L NEAR	0828	CODE
$P_NO_TAG  . . . . . . . . . . .  	NUMBER	00FF	
$P_NULL  . . . . . . . . . . . .  	NUMBER	0000	
$P_NUMBER  . . . . . . . . . . .  	NUMBER	0001	
$P_NUM_VAL . . . . . . . . . . .  	NUMBER	8000	
$P_NVAL_NONE . . . . . . . . . .  	NUMBER	0000	
$P_NVAL_RANGE  . . . . . . . . .  	NUMBER	0001	
$P_NVAL_STRING . . . . . . . . .  	NUMBER	0003	
$P_NVAL_VALUE  . . . . . . . . .  	NUMBER	0002	
$P_OPTIONAL  . . . . . . . . . .  	NUMBER	0001	
$P_OP_MISSING  . . . . . . . . .  	NUMBER	0002	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Symbols-6


$P_ORDINAL . . . . . . . . . . .  	L WORD	0000	CODE
$P_OUT_OF_RANGE  . . . . . . . .  	NUMBER	0006	
$P_PACK_END  . . . . . . . . . .  	L NEAR	013C	CODE
$P_PACK_END_BACKUP_SI  . . . . .  	L NEAR	0116	CODE
$P_PACK_END_BY_EOL . . . . . . .  	L NEAR	013B	CODE
$P_PACK_LOOP . . . . . . . . . .  	L NEAR	00F9	CODE
$P_PERIOD  . . . . . . . . . . .  	NUMBER	002E	
$P_PERIOD_ONLY . . . . . . . . .  	NUMBER	0002	
$P_PL00  . . . . . . . . . . . .  	L NEAR	012E	CODE
$P_PL01  . . . . . . . . . . . .  	L NEAR	0121	CODE
$P_PLUS  . . . . . . . . . . . .  	NUMBER	002B	
$P_POSITIONAL_MANAGER  . . . . .  	L NEAR	015F	CODE
$P_QUOTED_STRING . . . . . . . .  	NUMBER	0009	
$P_QU_STRING . . . . . . . . . .  	NUMBER	0080	
$P_RC  . . . . . . . . . . . . .  	L WORD	0002	CODE
$P_RCOL00  . . . . . . . . . . .  	L NEAR	0403	CODE
$P_RCOL01  . . . . . . . . . . .  	L NEAR	0409	CODE
$P_RCOL_EXIT . . . . . . . . . .  	L NEAR	040C	CODE
$P_RCOL_LOOP . . . . . . . . . .  	L NEAR	03EB	CODE
$P_RC_EOL  . . . . . . . . . . .  	NUMBER	-0001	
$P_REMOVE_COLON  . . . . . . . .  	N PROC	03E9	CODE	Length = 0026
$P_REPEAT  . . . . . . . . . . .  	NUMBER	0002	
$P_RETURN_TO_CALLER  . . . . . .  	L NEAR	01E7	CODE
$P_RETURN_TO_CALLER0 . . . . . .  	L NEAR	01E7	CODE
$P_RLT00 . . . . . . . . . . . .  	L NEAR	02F5	CODE
$P_RLT01 . . . . . . . . . . . .  	L NEAR	02FF	CODE
$P_RLT02 . . . . . . . . . . . .  	L NEAR	02EB	CODE
$P_RLT03 . . . . . . . . . . . .  	L NEAR	0311	CODE
$P_RLT04 . . . . . . . . . . . .  	L NEAR	02E7	CODE
$P_RLT05 . . . . . . . . . . . .  	L NEAR	0324	CODE
$P_RLT_CAP00 . . . . . . . . . .  	L NEAR	0338	CODE
$P_RLT_CAP01 . . . . . . . . . .  	L NEAR	0344	CODE
$P_RLT_CAP02 . . . . . . . . . .  	L NEAR	0341	CODE
$P_RLT_EXIT  . . . . . . . . . .  	L NEAR	034F	CODE
$P_RM_COLON  . . . . . . . . . .  	NUMBER	0010	
$P_RPAREN  . . . . . . . . . . .  	NUMBER	0029	
$P_SAVESI_CMPX . . . . . . . . .  	L WORD	000F	CODE
$P_SAVE_EOB  . . . . . . . . . .  	L WORD	0013	CODE
$P_SCOM00  . . . . . . . . . . .  	L NEAR	0690	CODE
$P_SCOM01  . . . . . . . . . . .  	L NEAR	06A3	CODE
$P_SCOM02  . . . . . . . . . . .  	L NEAR	06D0	CODE
$P_SCOM03  . . . . . . . . . . .  	L NEAR	0682	CODE
$P_SCOM04  . . . . . . . . . . .  	L NEAR	066C	CODE
$P_SCOM05  . . . . . . . . . . .  	L NEAR	067F	CODE
$P_SCOM_DIFFER . . . . . . . . .  	L NEAR	06DB	CODE
$P_SCOM_DIFFER0  . . . . . . . .  	L NEAR	06A5	CODE
$P_SCOM_EXIT . . . . . . . . . .  	L NEAR	06E4	CODE
$P_SCOM_LOOP . . . . . . . . . .  	L NEAR	064C	CODE
$P_SCOM_SAME . . . . . . . . . .  	L NEAR	06DE	CODE
$P_SEARCH_KEYORSW  . . . . . . .  	N PROC	0238	CODE	Length = 0025
$P_SIGNED  . . . . . . . . . . .  	NUMBER	0080	
$P_SIM00 . . . . . . . . . . . .  	L NEAR	05F0	CODE
$P_SIM01 . . . . . . . . . . . .  	L NEAR	0633	CODE
$P_SIMPLE_S  . . . . . . . . . .  	NUMBER	2000	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Symbols-7


$P_SIMPLE_STRING . . . . . . . .  	N PROC	05DD	CODE	Length = 0069
$P_SIM_EXIT  . . . . . . . . . .  	L NEAR	063C	CODE
$P_SIM_EXIT0 . . . . . . . . . .  	L NEAR	063E	CODE
$P_SIM_FOUND . . . . . . . . . .  	L NEAR	0628	CODE
$P_SIM_LOOP  . . . . . . . . . .  	L NEAR	060E	CODE
$P_SINGLE_EXIT . . . . . . . . .  	L NEAR	0202	CODE
$P_SI_SAVE . . . . . . . . . . .  	L WORD	0004	CODE
$P_SKIP_DELIM  . . . . . . . . .  	N PROC	076F	CODE	Length = 0026
$P_SKIP_DELIM_CY . . . . . . . .  	L NEAR	078D	CODE
$P_SKIP_DELIM_EXIT . . . . . . .  	L NEAR	0791	CODE
$P_SKIP_DELIM_LOOP . . . . . . .  	L NEAR	076F	CODE
$P_SKIP_DELIM_NCY  . . . . . . .  	L NEAR	0790	CODE
$P_SLASH . . . . . . . . . . . .  	NUMBER	002F	
$P_SNUM_VAL  . . . . . . . . . .  	NUMBER	4000	
$P_SPACE . . . . . . . . . . . .  	NUMBER	0020	
$P_START . . . . . . . . . . . .  	L NEAR	00E5	CODE
$P_STRING  . . . . . . . . . . .  	NUMBER	0003	
$P_STRING_BUF  . . . . . . . . .  	L BYTE	0017	CODE	Length = 0080
$P_STRING_BUF_END  . . . . . . .  	NEAR	0097	CODE
$P_STRING_COMP . . . . . . . . .  	N PROC	0646	CODE	Length = 00A3
$P_STRUC_L1  . . . . . . . . . .  	L NEAR	0849	CODE
$P_STRUC_L12 . . . . . . . . . .  	L NEAR	0848	CODE
$P_STRUC_L2  . . . . . . . . . .  	L NEAR	083E	CODE
$P_STRUC_L5  . . . . . . . . . .  	L NEAR	083B	CODE
$P_SVAL00  . . . . . . . . . . .  	L NEAR	049A	CODE
$P_SVAL01  . . . . . . . . . . .  	L NEAR	049B	CODE
$P_SVALUE  . . . . . . . . . . .  	N PROC	047C	CODE	Length = 0024
$P_SVAL_IN . . . . . . . . . . .  	L NEAR	0554	CODE
$P_SW  . . . . . . . . . . . . .  	NUMBER	0040	
$P_SWITCH  . . . . . . . . . . .  	NUMBER	002F	
$P_SW_CMP  . . . . . . . . . . .  	NUMBER	0010	
$P_SW_MANAGER  . . . . . . . . .  	L NEAR	0187	CODE
$P_SW_MGR_LOOP . . . . . . . . .  	L NEAR	019C	CODE
$P_SW_NOT_FOUND  . . . . . . . .  	L NEAR	01AA	CODE
$P_SYNTAX  . . . . . . . . . . .  	NUMBER	0009	
$P_TAB . . . . . . . . . . . . .  	NUMBER	0009	
$P_TERMINATOR  . . . . . . . . .  	L BYTE	0008	CODE
$P_TIME12  . . . . . . . . . . .  	NUMBER	0004	
$P_TIME12AM  . . . . . . . . . .  	NUMBER	0001	
$P_TIME_AGAIN  . . . . . . . . .  	NUMBER	0002	
$P_TIME_F  . . . . . . . . . . .  	NUMBER	0008	
$P_TIME_S  . . . . . . . . . . .  	NUMBER	0800	
$P_TOO_MANY  . . . . . . . . . .  	NUMBER	0001	
$P_TOO_MANY_ERROR  . . . . . . .  	L NEAR	017E	CODE
$P_VAL02_LOOP  . . . . . . . . .  	L NEAR	0520	CODE
$P_VAL02_NEXT  . . . . . . . . .  	L NEAR	0564	CODE
$P_VAL02_SIGN  . . . . . . . . .  	L NEAR	0546	CODE
$P_VAL03_LOOP  . . . . . . . . .  	L NEAR	058A	CODE
$P_VAL03_NEXT  . . . . . . . . .  	L NEAR	0596	CODE
$P_VALUE . . . . . . . . . . . .  	N PROC	04A0	CODE	Length = 011D
$P_VALUE00 . . . . . . . . . . .  	L NEAR	04F2	CODE
$P_VALUE01 . . . . . . . . . . .  	L NEAR	0505	CODE
$P_VALUE02 . . . . . . . . . . .  	L NEAR	0517	CODE
$P_VALUE03 . . . . . . . . . . .  	L NEAR	057F	CODE
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:37
DOS GRAPHICS Command  -	Profile Load Modules #2             Symbols-8


$P_VALUE04 . . . . . . . . . . .  	L NEAR	05AA	CODE
$P_VALUE_ERR . . . . . . . . . .  	L NEAR	05AA	CODE
$P_VALUE_ERR0  . . . . . . . . .  	L NEAR	04EE	CODE
$P_VALUE_EXIT  . . . . . . . . .  	L NEAR	05B5	CODE
$P_VALUE_LOOP  . . . . . . . . .  	L NEAR	04A9	CODE
$P_VAL_FOUND . . . . . . . . . .  	L NEAR	0578	CODE
$P_VAL_IN  . . . . . . . . . . .  	L NEAR	0536	CODE
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  grparse		
@VERSION . . . . . . . . . . . .  	TEXT  510		


   4267 Source  Lines
   4278 Total   Lines
    443 Symbols

  46152 + 184539 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
