Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Page     1-1


					PAGE	90,132			;AN000;A2
					TITLE	GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;
				;****************** START OF SPECIFICATIONS *****************************
				; MODULE NAME: GRTABPAR.SAL
				
				; DESCRIPTIVE NAME: Handle the definition of the DOS command line parameters
				;		    and the interface to the DOS system PARSER.
				
				;FUNCTION: The static data areas are prescribed by the DOS system PARSER
				;	   to define the several parameters presented to GRAFTABL.  These
				;	   data areas are passed to the PARSER, and its responses checked
				;	   to determine the nature of the user's specifications.  Any errors
				;	   found in the user's parameters are defined in messages back
				;	   to the user.
				
				; ENTRY POINT: PARSER, near
				
				; INPUT: (DOS COMMAND LINE PARAMETERS)
				
				;	      [d:][path] GRAFTABL  [cp|?|/STA|/STATUS]
				
				;	 WHERE
				;	      [d:][path] - Path where the GRAFTABL command resides.
				
				;	      [cp]	 - Codepage number to be loaded.  If blank,
				;			   437 is assumed
				
				;	      [?]	 - This requests a display of the parameters
				;			   supported by the GRAFTABL command.
				
				;	      [/STATUS]  - (May be shortened to just /STA.)  This
				;			   requests the current codepage already
				;			   loaded by a previous GRAFTABL, if any,
				;			   be displayed.
				
				;	Upon entry to PARSER in this module,
				;	"CURRENT_PARM" = offset to start of parm text in command string
				;	"ORDINAL" = initialized to zero
				;	PSP+81H = text of DOS command line parms string
				
				; EXIT-NORMAL: If a Code Page number was specified
				;		  BX = Offset to language table to be loaded
				;		  DX = Integer value of Code Page specified
				;	       If /STATUS (or /STA) was specified
				;		  BX = 0
				;	       If Question mark was specified
				;		  BX=-1
				
				; EXIT-ERROR: If there was any problem with the parms,
				;	      the question mark is assumed, and the appropriate
				;	      PARSE error message is displayed.
				;	      The Errorlevel code of "EXPAR" (3), meaning: "PARM ERROR",
				;	      set in "EXITFL", is requested to be returned to the user.
				
				; INTERNAL REFERENCES:
				;    ROUTINES:
				;	PARSE_ERROR:NEAR Display the appropriate Parse error message.
				
				;    DATA AREAS:
				;	The several parameter control blocks, defined by the System
				;	PARSER interface, defining the GRAFTABL parameters.
				
				; EXTERNAL REFERENCES:
				;    ROUTINES:
				;	SENDMSG:NEAR	Uses Msg Descriptor to drive message handler.
				;	SYSPARSE:NEAR	System Command Line Common Parser.
				
				;    DATA AREAS:
				;	TABLEUS:BYTE	First table of Fonts, happens to be the USA version.
				;	  (Format of language Font defined in LANGUAGE STRUC.)
				;	EXITFL:BYTE	Errorlevel return code.
				;	MSGNUM_PARSE:WORD Message descriptor for all parse errors.
				;	ACTIVECPID:WORD Pointer to CPID entry of active entry, where the
				;	CPID	table is a set of 4 byte asciiz strings,
				;			each defining the number of a Code Page font.
				
				; NOTES:
				;	 This module should be processed with the SALUT preprocessor
				;	 with the re-alignment not requested, as:
				
				;		SALUT GRTABPAR,NUL
				
				;	 To assemble these modules, the alphabetical or sequential
				;	 ordering of segments may be used.
				
				;	 For LINK instructions, refer to the PROLOG of the main module,
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Page     1-2


				;	 GRTAB.SAL.
				
				; REVISION HISTORY:
				;	A001 PTM 382 display "ACTIVE" OR "PREVIOUS" CP.
				;	A002 PTM 474 Avoid duplicate switches
				;	A003 PTM 538 Display parm in error
				
				;****************** END OF SPECIFICATIONS *****************************
				; =  =	=  =  =  =  =  =  =  =	=  =
					INCLUDE PATHMAC.INC		;AN006;
			     C	;;***********************************************************************
			     C	;; NAME: pathlabl
			     C	;; DESC: creates a public label at the spot it is placed, using the name
			     C	;;       given.
			     C	;; INPUT: either module name or procedure name
			     C	;; OUTPUT: public label
			     C	;; LOGIC: LBL-parameter-name will have four values -
			     C	;;            - one for each pass (2)
			     C	;;            - one for start and one for stop
			     C	;;        if LBL is not defined, it is first pass, at beginning label
			     C	;;              - set it to 1 and create the start label
			     C	;;        if LBL = 1, it is first pass, at end label
			     C	;;              - set it to 2 and create stop label
			     C	;;        if LBL = 2, it is second pass, at beginning label
			     C	;;              - set it to 3 and create the start label
			     C	;;        if LBL = 3, it is second pass, at end label
			     C	;;              - set it to 4 and create stop label
			     C	;;        if LBL = 4, it is second pass,
			     C	;;              - this macro has been invoked more than twice with same parm
			     C	;;              - issue error message
			     C	;;***********************************************************************
			     C	
			     C	pathlabl MACRO pnam
			     C	IFNDEF LBL_&pnam                        ;;IF THIS IS THE FIRST TIME,
			     C	    LBL_&pnam = 0                       ;;DEFINE IT, INITIALLY ZERO
			     C	ELSE                                    ;;SINCE IT IS DEFINED
			     C	    IF (LBL_&pnam GT 3)                 ;;IF USED TOO MANY TIMES,
			     C	        .ERR NON-UNIQUE OPERAND ON PATHLABL
			     C	        EXITM                           ;;ABORT THIS GENERATION
			     C	    ENDIF
			     C	ENDIF
			     C	
			     C	IF (LBL_&pnam EQ 0) OR (LBL_&pnam EQ 2) ;;ready for START?
			     C	    $$A_START_&pnam:                    ;;create START label
			     C	    PUBLIC $$A_START_&pnam              ;;make it public
			     C	ELSE                                    ;;SINCE SWITCH MAY BE 1 OR 3,
			     C	    $$A_STOP_&pnam:                     ;;create STOP label
			     C	    PUBLIC $$A_STOP_&pnam               ;;make it public
			     C	ENDIF
			     C	LBL_&pnam = LBL_&pnam + 1               ;;INCREMENT SWITCH
			     C	ENDM
				; =  =	=  =  =  =  =  =  =  =	=  =
				HEADER	MACRO	TEXT			;;AN000;
				.XLIST					;AN000;
					SUBTTL	TEXT			;AN000;
				.LIST					;AN000;
					PAGE				;AN000;
					ENDM				;;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =
				;		      $SALUT (4,23,28,36) ;AN000;
						      EXTRN CPID_L:ABS ;AN000;BYTES PER CPID ENTRY
				
				MSG_DESC	      STRUC	   ;AN003;
 0000  0000			MSG_NUM 	      DW   ?	   ;AN003;MESSAGE NUMBER (TO AX)
 0002  0000			MSG_HANDLE	      DW   ?	   ;AN003;HANDLE OF OUTPUT DEVICE (TO BX)
 0004  0000			MSG_SUBLIST	      DW   ?	   ;AN003;POINTER TO SUBLIST (TO SI)
 0006  0000			MSG_COUNT	      DW   ?	   ;AN003;SUBSTITUTION COUNT (TO CX)
 0008  0000			MSG_CLASS	      DW   ?	   ;AN003;MESSAGE CLASS (IN HIGH BYTE, TO DH)
								   ; LOW BYTE HAS 0 (FUNCTION "NO INPUT", TO DL);AN003;
 000A				MSG_DESC	      ENDS	   ;AN003;
				
 = 0001				ONE_SUBS	      EQU  1	   ;AN003;NUMBER OF VARIABLES
				
				SUBLIST 	      STRUC	   ;AN000;
 0000  00			SUB_SIZE	      DB   ?	   ;AN003;SUBLIST SIZE (POINTER TO NEXT SUBLIST)
 0001  00			SUB_RES 	      DB   ?	   ;AN003;RESERVED
								   ;NEXT FIELD IS TO BE USED AS A DOUBLE WORD	   ;AN003;
 0002  0000			SUB_VALUE	      DW   ?	   ;AN003;TIME, DATE, OR PTR TO DATA ITEM
 0004  0000			SUB_VALUE_SEG	      DW   ?	   ;AN003;SEG ID OF PTR
								   ;(ABOVE FIELD MUST BE FILLED AT EXECUTION TIME  ;AN003;
								   ; IF THIS IS A .COM FILE)			   ;AN003;
 0006  00			SUB_ID		      DB   ?	   ;AN003;N OF %N
 0007  00			SUB_FLAGS	      DB   ?	   ;AN003;DATA TYPE FLAGS
 0008  00			SUB_MAX_WIDTH	      DB   ?	   ;AN003;MAXIMUM FIELD WIDTH (0=UNLIMITED)
 0009  00			SUB_MIN_WIDTH	      DB   ?	   ;AN003;MINIMUM FIELD WIDTH
 000A  00			SUB_PAD_CHAR	      DB   ?	   ;AN003;CHARACTER FOR PAD FIELD
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Page     1-3


								   ; CAN BE " ", "0" OR ",".			   ;AN003;
								   ; "," CAUSES INSERTION OF THE ACTIVE 	   ;AN003;
								   ; THOUSANDS SEPARATOR BETWEEN EVERY 3 DIGITS.   ;AN003;
 000B				SUBLIST 	      ENDS	   ;AN003;
				
				;		LOCAL EQUATES
 = 0000				ZERO		      EQU  0	   ;AN000;COMPARAND FOR MISSING PARMS
 =-0001				RETCODE_QUESTION      EQU  -1	   ;AN000;VALUE IN BX, IF PARM=?
 = 0003				EXPAR		      EQU  3	   ;AN000;RETURN TO DOS, INVALID DOS COMND LINE PARMS
 = 000D				CR		      EQU  13	   ;AN000;CARRIAGE RETURN
 = 0020				BLANK		      EQU  " "	   ;AN002;AVOIDS DUPLICATES SWITCHES
 = 0000				NUL		      EQU  0	   ;AN003;ASCIIZ DELIMITER
				; =  =	=  =  =  =  =  =  =  =	=  =
				;		EXIT CODES FROM SYSPARSE (WHEN CY=0)
				
 = 0000				SYSPRM_EX_OK	      EQU  0	   ;AN000; no error
 = 0001				SYSPRM_EX_MANY	      EQU  1	   ;AN000; too many operands
 = 0002				SYSPRM_EX_MISSING     EQU  2	   ;AN000; required operand missing
 = 0003				SYSPRM_EX_NOT_SWLIST  EQU  3	   ;AN000; not in switch list provided
 = 0004				SYSPRM_EX_NOT_KEYLIST EQU  4	   ;AN000; not in keyword list provided
 = 0006				SYSPRM_EX_RANGE       EQU  6	   ;AN000; out of range specified
 = 0007				SYSPRM_EX_VALUE       EQU  7	   ;AN000; not in value list provided
 = 0008				SYSPRM_EX_STRING      EQU  8	   ;AN000; not in string list provided
 = 0009				SYSPRM_EX_SYNTAX      EQU  9	   ;AN000; syntax error
 =-0001				SYSPRM_EX_EOL	      EQU  -1	   ;AN000; end of command line
				; =  =	=  =  =  =  =  =  =  =	=  =
						      HEADER <STRUC - DEFINITIONS OF EXTERNAL CONTROL BLOCKS> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Page     1-4
STRUC - DEFINITIONS OF EXTERNAL CONTROL BLOCKS			;AN000;    

				LANGUAGE	      STRUC	   ;AN000;DEFINITION OF EACH LANGUAGE TABLE
 0000  0400[			LANCHAR 	      DB   1024 DUP(?) ;AN000;8 BYTES PER EACH OF 128 CHARACTERS
	   ??			
			 ]	
				
 0400  0000			LANID		      DW   ?	   ;AN000;TWO BYTE CODEPAGE ID, TO MATCH
								   ; GRAFTABL CMD LINE PARM
 0402  000E[			LANNAME 	      DB   14 DUP(?) ;AN000;ASCIIZ STRING NAME OF LANGUAGE
	   ??			
			 ]	
				
 0410				LANGUAGE	      ENDS	   ;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =
				PSP		      STRUC	   ;AN000;
 0000  0080[					      DB   80H DUP (?) ;AN000;SKIP OVER FIRST HALF OF PSP
	   ??			
			 ]	
				
 0080  00			PSP_PARMLEN	      DB   ?	   ;AN000;NUMBER OF BYTES IN DOS COMMAND LINE
 0081  007F[			PSP_COMMAND	      DB   127 DUP(?) ;AN000;TEXT OF DOS COMMAND LINE
	   ??			
			 ]	
				
 0100				PSP		      ENDS	   ;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =
						      HEADER <PARSING WORKAREAS> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Page     1-5
PARSING WORKAREAS			;AN000;                                 

				;	     $SALUT (4,14,19,36)   ;AN000;
 0000				CSEG	     SEGMENT PARA PUBLIC   ;AN000;
					     ASSUME CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG ;AN000;
				
					     EXTRN SENDMSG:NEAR    ;AN000;USES MSG DESCRIPTOR TO DRIVE MESSAGE HANDLR
					     EXTRN SYSPARSE:NEAR   ;AN000;SYSTEM COMMAND LINE PARSER
				
					     EXTRN TABLEUS:BYTE    ;AN000;FIRST TABLE OF FONTS
					     EXTRN EXITFL:BYTE	   ;AN000;ERRORLEVEL RETURN CODE
					     EXTRN MSGNUM_PARSE:WORD ;AN000;MESSAGE DESCRIPTOR FOR ALL PARSE ERRORS
					     EXTRN SUBLIST_PARSE:WORD ;AN003;POINTS TO INVALID PARM
					     EXTRN ACTIVECPID:WORD ;AN000;POINTER TO CPID ENTRY OF ACTIVE ENTRY
				; =  =	=  =  =  =  =  =  =  =	=  =
				
 0000  0081			CURRENT_PARM DW   81H		   ;AN000;POINTER INTO COMMAND OF NEXT OPERAND
					     PUBLIC CURRENT_PARM   ;AN000;
				
 0002  0000			ORDINAL      DW   0		   ;AN000;ORDINAL NUMBER OF WHICH PARM TO PARSE
					     PUBLIC ORDINAL	   ;AN000;
				
 0004  00			FIRST_TIME   DB   0		   ;AN000;INDICATES IF A PARM ALREADY FOUND
 0005  0000			PARSE_RESULT DW   0		   ;AN000;TEMP, HOLDS BX TO BE RETURNED
				;	       If a Code Page number was specified
				;		  BX = Offset to language table to be loaded
				;		  DX = Integer value of Code Page specified
				;	       If /STATUS (or /STA) was specified
				;		  BX = 0
				;	       If Question mark was specified
				;		  BX=-1
				; =  =	=  =  =  =  =  =  =  =	=  =
					     HEADER <DOS COMMAND LINE PARSER CONTROL BLOCKS> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Page     1-6
DOS COMMAND LINE PARSER CONTROL BLOCKS			;AN000;            

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

				;PARSER CONTROL BLOCK DEFINING THE ONLY POSITIONAL PARAMETER, OPTIONAL
				
				;FIRST POSITIONAL PARAMETER IS:
				;	[cp|?]	THE CODEPAGE NUMBER, OR THE QUESTION MARK
				
					     PUBLIC CONTROL_POS    ;AN000;LET LINK MAKE THIS ADDRESSABLE
 0012				CONTROL_POS  LABEL BYTE 	   ;AN000;FIRST POSITIONAL DESCRIPTOR FOR FILESPEC,
								   ; OPTIONAL
 0012  2001				     DW   2001H 	   ;AN000; CONTROLS TYPE MATCHED
								   ; SELECTED BITS: "SIMPLE STRING" AND "OPTIONAL"
				
								   ; 8000H=NUMERIC VALUE, (VALUE LIST WILL BE CHECKED)
								   ; 4000H=SIGNED NUMERIC VALUE (VALUE LIST WILL BE
								   ;   CHECKED)
								   ; 2000H=SIMPLE STRING(VALUE LIST WILL BE CHECKED)
								   ; 1000H=DATE STRING (VALUE LIST WON'T BE CHECKED)
								   ; 0800H=TIME STRING (VALUE LIST WON'T BE CHECKED)
								   ; 0400H=COMPLEX LIST (VALUE LIST WON'T BE CHECKED)
								   ; 0200H=FILE SPEC (VALUE LIST WON'T BE CHECKED)
								   ; 0100H=DRIVE ONLY (VALUE LIST WON'T BE CHECKED)
								   ; 0080H=QUOTED STRING (VALUE LIST WON'T BE CHECKED)
								   ; 0010H=IGNORE ":" AT END IN MATCH
								   ; 0002H=REPEATS ALLOWED
								   ; 0001H=OPTIONAL
				
 0014  0000				     DW   0000H 	   ;AN000;FUNCTION_FLAGS ("NO CAPS")
								   ; 0001H=CAP RESULT BY FILE TABLE
								   ; 0002H=CAP RESULT BY CHAR TABLE
								   ; 0010H=REMOVE ":" AT END
 0016  0047 R				     DW   RESULT	   ;AN000; RESULT BUFFER
 0018  001B R				     DW   VALS		   ;AN000; VALUE LISTS
 001A  00				     DB   0		   ;AN000; NUMBER OF KEYWORD/SWITCH SYNONYMS
								   ;   IN FOLLOWING LIST
				
				;VALUE CONTROL BLOCK FOR THE POSITIONAL PARAMETERS
 001B  03			VALS	     DB   3		   ;AN000;NUMBER OF VALS DEFINITIONS (0-3)
 001C  00				     DB   0		   ;AN000;NUMBER OF RANGES (NONE)
 001D  00				     DB   0		   ;AN000;NUMBER OF NUMERIC CHOICES (NONE)
 001E  06				     DB   6		   ;AN000;NUMBER OF CHOICE STRINGS
				
				
				;THE ORDER OF THESE VALUE DEFINITIONS IS SIGNIFICANT.  THEIR ORDER MUST
				;MATCH THE ORDER IN WHICH THE CORRESPONDING FONT TABLE MODULES ARE
				;LINKED TOGETHER.  THUE THE "VALUE RETURNED" OF 1 MEANS THE FIRST LINKED
				;FONT TABLE, THE VALUE OF 5 MEANS THE FIFTH LINKED FONT TABLE, ETC.
				
 = 0001				VAL_437      EQU  1		   ;AN000;VALUE RETURNED
 001F  01				     DB   VAL_437	   ;AN000; FOR:
 0020  0031 R				     DW   S437		   ;AN000;SPECIFIC CHOICE IF STRING
				
 = 0002				VAL_850      EQU  2		   ;AN000;VALUE RETURNED
 0022  02				     DB   VAL_850	   ;AN000; FOR:
 0023  0035 R				     DW   S850		   ;AN000;SPECIFIC CHOICE IF STRING
				
 = 0003				VAL_860      EQU  3		   ;AN000;VALUE RETURNED
 0025  03				     DB   VAL_860	   ;AN000; FOR:
 0026  0039 R				     DW   S860		   ;AN000;SPECIFIC CHOICE IF STRING
				
 = 0004				VAL_863      EQU  4		   ;AN000;VALUE RETURNED
 0028  04				     DB   VAL_863	   ;AN000; FOR:
 0029  003D R				     DW   S863		   ;AN000;SPECIFIC CHOICE IF STRING
				
 = 0005				VAL_865      EQU  5		   ;AN000;VALUE RETURNED
 002B  05				     DB   VAL_865	   ;AN000; FOR:
 002C  0041 R				     DW   S865		   ;AN000;SPECIFIC CHOICE IF STRING
				
 = 0006				VAL_QUESTION EQU  6		   ;AN000;VALUE RETURNED
 002E  06				     DB   VAL_QUESTION	   ;AN000; FOR:
 002F  0045 R				     DW   SQU		   ;AN000;SPECIFIC CHOICE IF STRING
				
				;		SET OF ASCIIZ STRINGS, DEFINING THE POSITIONAL PARAMETER
 0031  34 33 37 00		S437	     DB   "437",0	   ;AN000;USA
 0035  38 35 30 00		S850	     DB   "850",0	   ;AN000;MULTI-LINGUAL
 0039  38 36 30 00		S860	     DB   "860",0	   ;AN000;PORTUGUESE
 003D  38 36 33 00		S863	     DB   "863",0	   ;AN000;CANADIAN FRENCH
 0041  38 36 35 00		S865	     DB   "865",0	   ;AN000;NORDIC
 0045  3F 00			SQU	     DB   "?",0 	   ;AN000;
				
				;RESULTS CONTROL BLOCK FOR THE POSITIONAL PARAMETER, AND SWITCH PARAMETER
 0047				RESULT	     LABEL BYTE 	   ;AN000; BELOW FILLED IN FOR DEFAULTS
 0047  03				     DB   3		   ;AN000; TYPE RETURNED: 0=RESERVED,
								   ;	   1=NUMBER, 2=LIST INDEX,
								   ;	   3=STRING, 4=COMPLEX,
								   ;	   5=FILESPEC, 6=DRIVE
								   ;	   7=DATE, 8=TIME
								   ;	   9=QUOTED STRING
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Page     1-8
POSITIONAL PARM DESCRIPTOR BLOCK			;AN000;                  

 0048  FF			RESULT_TAG   DB   0FFH		   ;AN000; MATCHED ITEM TAG
 0049  0000			RESULT_SYN   DW   0		   ;AN000;POINTER TO SYNONYM
				
 004B  00000000			RESULT_PTR   DD   ?		   ;AN000;OFFSET OF STRING VALUE
				
				; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
					     HEADER <SWITCH PARM DESCRIPTOR BLOCK> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Page     1-9
SWITCH PARM DESCRIPTOR BLOCK			;AN000;                      

				;PARSER CONTROL BLOCK DEFINING THE ONLY SWITCH, OPTIONAL
				
				;THE SWITCH IS "/STA" OR "/STATUS".  WHEN REQUESTED, IT MEANS TO IDENTIFY
				;WHAT CODEPAGE IS CURRENTLY SUPPORTED BY THE PREVIOUS GRAFTABL, IF ANY.
					     PUBLIC CONTROL_SW	   ;AN000;LET LINK MAKE THIS ADDRESSABLE
 004F				CONTROL_SW   LABEL BYTE 	   ;AN000;SWITCH DESCRIPTOR FOR /STA
 004F  0001				     DW   0001H 	   ;AN000; CONTROLS TYPE MATCHED
								   ;SELECTED BITS: "OPTIONAL"
								   ; 8000H=NUMERIC VALUE, (VALUE LIST WILL BE CHECKED)
								   ; 4000H=SIGNED NUMERIC VALUE (VALUE LIST WILL BE
								   ;   CHECKED)
								   ; 2000H=SIMPLE STRING(VALUE LIST WILL BE CHECKED)
								   ; 1000H=DATE STRING (VALUE LIST WON'T BE CHECKED)
								   ; 0800H=TIME STRING (VALUE LIST WON'T BE CHECKED)
								   ; 0400H=COMPLEX LIST (VALUE LIST WON'T BE CHECKED)
								   ; 0200H=FILE SPEC (VALUE LIST WON'T BE CHECKED)
								   ; 0100H=DRIVE ONLY (VALUE LIST WON'T BE CHECKED)
								   ; 0080H=QUOTED STRING (VALUE LIST WON'T BE CHECKED)
								   ; 0010H=IGNORE ":" AT END IN MATCH
								   ; 0002H=REPEATS ALLOWED
								   ; 0001H=OPTIONAL
				
 0051  0000				     DW   0000H 	   ;AN000;FUNCTION_FLAGS ("NO CAPS")
								   ; 0001H=CAP RESULT BY FILE TABLE
								   ; 0002H=CAP RESULT BY CHAR TABLE
								   ; 0010H=REMOVE ":" AT END
				
 0053  0047 R				     DW   RESULT	   ;AN000; RESULT BUFFER
								   ;(USE SAME RESULT BUF AS DID POSITIONAL PARM)
 0055  0065 R				     DW   NOVALS	   ;AN000; VALUE LISTS
 0057  02				     DB   2		   ;AN000; NUMBER OF KEYWORD/SWITCH SYNONYMS
								   ;   IN FOLLOWING LIST
 0058  2F 53 54 41 00		SW_STA	     DB   "/STA",0	   ;AN000; IF n >0, KEYWORD 1
 005D  2F 53 54 41 54 55	SW_STATUS    DB   "/STATUS",0	   ;AN000;SECOND KEYWORD
       53 00			
				
				;VALUE CONTROL BLOCK FOR THE SWITCHES
 0065				NOVALS	     LABEL BYTE 	   ;AN000;
 0065  00				     DB   0		   ;AN000; NUMBER OF VALUE DEFINITIONS (0 - 3)
				; =  =	=  =  =  =  =  =  =  =	=  =
					     PATHLABL GRTABPAR	   ;AN006;
 0066                        1	    $$A_START_GRTABPAR:                    ; 
					     HEADER <PARSER - ASK SYSPARM TO DECODE PARAMETERS> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Page     1-10
PARSER - ASK SYSPARM TO DECODE PARAMETERS			;AN000;         

				;  $SALUT (4,4,9,36)		   ;AN000;
 0066				PARSER PROC NEAR		   ;AN000;
				   PUBLIC PARSER		   ;AN000;
				
				;INPUT: "CURRENT_PARM" = OFFSET TO NEXT PARM IN COMMAND STRING
				;	"ORDINAL" = COUNT OF NEXT PARM TO PARSE
				;	PSP+81H = TEXT OF DOS COMMAND LINE PARMS STRING
				;OUTPUT: IF A CODEPAGE NUMBER WAS SPECIFIED
				;	    BX = OFFSET TO LANGUAGE TABLE TO BE LOADED
				;	    DX = INTEGER VALUE OF CODEPAGE SPECIFIED
				;	 IF /STATUS WAS SPECIFIED
				;	    BX = 0
				;	 IF QUESTION MARK WAS SPECIFIED
				;	    BX=-1
				
				;IF THERE WAS ANY PROBLEM WITH THE PARMS, THE QUESTION MARK IS ASSUMED,
				;AND "EXITFL" SET TO "EXPAR" TO INDICATE PARM ERROR.
				
				;IT A CP IS SPECIFIED, A STATUS REPORT IS ALWAYS GIVEN TO SAY WHAT WHAT
				;THERE PREVIOUSLY, SO IF THE USER SPECIFIED A CP AND THE /STATUS SWITCH,
				;THEN THE /STATUS DOES NOTHING BEYOND WHAT WOULD HAVE BEEN DONE ALREADY
				;WITH JUST THE CP SPECIFICATION.  I ALWAYS REPORT STATUS.  THE ONLY
				;REASON TO HAVE /STATUS IS TO BE ABLE TO SEE WHAT IS THERE ALREADY
				;WITHOUT INVOKING THE DEFAULT OF 437 (USA) BY NOT SPECIFYING A CP.
				; =  =	=  =  =  =  =  =  =  =	=  =
				
				;  $SEARCH COMPLEX		   ;AN000;LOOP THRU COMMAND LINE
 0066  EB 63			   JMP SHORT $$SS1
 0068				$$DO1:
								   ;LOOKING AT RET CODE IN AX SET BY SYSPARSE
 0068  3D 0000			       CMP  AX,ZERO		   ;AN000;WERE THERE ANY ERRORS?
				;  $EXITIF NE			   ;AN000;HAD A PROBLEM
 006B  74 06			   JE $$IF1
 006D  E8 00FC R		       CALL PARSE_ERROR 	   ;AN000;DISPLAY REASON FOR ERROR
				
				;  $ORELSE LONG 		   ;AN000;SINCE NO PROBLEM, SO FAR
 0070  E9 00FB R		   JMP $$SR1
 0073				$$IF1:
 0073  89 0E 0002 R		       MOV  ORDINAL,CX		   ;AN000;SAVE UPDATED COUNT
 0077  80 3E 0004 R 00		       CMP  FIRST_TIME,ZERO	   ;AN000;DO I HAVE A PARM YET?
				;      $IF  E			   ;AN000;NOT YET, LOOK AT THIS ONE JUST FOUND
 007C  75 41			       JNE $$IF4
 007E  89 36 0000 R			   MOV	CURRENT_PARM,SI    ;AN000;REMEMBER HOW FAR I GOT
 0082  83 3E 0049 R 00			   CMP	RESULT_SYN,ZERO    ;AN000;WAS POSITIONAL PARM SPECIFIED?
				;	   $IF	E		   ;AN000;IF POSITIONAL PARM SPECIFIED,
 0087  75 24				   JNE $$IF5
 0089  8A 0E 0048 R			       MOV  CL,RESULT_TAG  ;AN000;GET ID OF SPECIFIED PARM
 008D  32 ED				       XOR  CH,CH	   ;AN000;CLEAR HIGH BYTE
 008F  80 F9 06				       CMP  CL,VAL_QUESTION ;AN000;WAS "?" SPECIFIED?
				;	       $IF  E		   ;AN000;IF "?" SPECIFIED
 0092  75 05				       JNE $$IF6
 0094  BB FFFF					   MOV	BX,RETCODE_QUESTION ;AN000;INDICATE THAT "?" SPECIFIED
				;	       $ELSE		   ;AN000;SINCE "?" NOT SPECIFIED
 0097  EB 12				       JMP SHORT $$EN6
 0099				$$IF6:
 0099  8D 1E 0000 E				   LEA	BX,TABLEUS ;AN000;GET WHERE FIRST CODEPAGE STARTS, USING CX
								   ; AS A COUNTER, STEP THRU THE LANGUAGE TABLES
								   ; UNTIL GETTING TO THE SPECIFIED ONE
				;		   $DO	COMPLEX    ;AN000;
 009D  EB 0A					   JMP SHORT $$SD8
 009F				$$DO8:
 009F  81 C3 0410				       ADD  BX,TYPE LANGUAGE ;AN000;POINT TO NEXT TABLE
 00A3  81 06 0000 E 0000 E			       ADD  ACTIVECPID,CPID_L ;AN000;SELECT NEXT CPID ENTRY
				;		   $STRTDO	   ;AN000;
 00A9				$$SD8:
				;		   $ENDDO LOOP	   ;AN000;DECREMENT INDEX
 00A9  E2 F4					   LOOP $$DO8
								   ;BX-OFFSET TO LANGUAGE TABLE
								   ; INDICATED BY POSITIONAL PARM
				;	       $ENDIF		   ;AN000;"?" SPECIFIED?
 00AB				$$EN6:
				;	   $ELSE		   ;AN000;SINCE NOT POSITIONAL PARM SPECIFIED
 00AB  EB 0C				   JMP SHORT $$EN5
 00AD				$$IF5:
								   ;RESULT_SYN POINTS TO A SWITCH
 00AD  33 DB				       XOR  BX,BX	   ;AN000;  MUST HAVE BEEN THE SWITCH, /STATUS
 00AF  C6 06 0058 R 20			       MOV  SW_STA,BLANK   ;AN002;AVOID THE DUPLICATION OF THIS SWITCH
 00B4  C6 06 005D R 20			       MOV  SW_STATUS,BLANK ;AN002;AVOID THE DUPLICATION OF THIS SWITCH
				;	   $ENDIF		   ;AN000;POSITIONAL?
 00B9				$$EN5:
 00B9  FE 06 0004 R			   INC	FIRST_TIME	   ;AN000;INDICATE A PARM HAS BEEN FOUND
				;      $ELSE			   ;AN000;SINCE ALREADY HAVE A PARM
 00BD  EB 08			       JMP SHORT $$EN4
 00BF				$$IF4:
 00BF  56				   PUSH SI		   ;AN003;SAVE NEW INDEX TO COMMAND LINE
 00C0  E8 00FC R			   CALL PARSE_ERROR	   ;AN000;FUSS ABOUT TOO MANY PARMS
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Page     1-11
PARSER - ASK SYSPARM TO DECODE PARAMETERS			;AN000;         

				
 00C3  8F 06 0000 R			   POP	CURRENT_PARM	   ;AN000;REMEMBER HOW FAR I GOT
				
				;      $ENDIF			   ;AN000;ALREADY HAVE A PARM?
 00C7				$$EN4:
 00C7  89 1E 0005 R		       MOV  PARSE_RESULT,BX	   ;AN000;SAVE THE RESULT OF THIS PARSE
				;  $STRTSRCH			   ;AN000;
 00CB				$$SS1:
 00CB  8D 3E 0007 R		       LEA  DI,PARMS		   ;AN000; ES:DI = PARSE CONTROL DEFINITON
 00CF  8B 36 0000 R		       MOV  SI,CURRENT_PARM	   ;AN000; DS:SI = COMMAND STRING, NEXT PARM
 00D3  33 D2			       XOR  DX,DX		   ;AN000; RESERVED, INIT TO ZERO
 00D5  8B 0E 0002 R		       MOV  CX,ORDINAL		   ;AN000; OPERAND ORDINAL, INITIALLY ZERO
 00D9  E8 0000 E		       CALL SYSPARSE		   ;AN000;LOOK AT DOS PARMS
								   ; AX=EXIT CODE
								   ; BL=TERMINATED DELIMETER CODE
								   ; CX=NEW OPERAND ORDINAL
								   ; SI=SET TO PAST SCANNED OPERAND
								   ; DX=SELECTED RESULT BUFFER
 00DC  3D FFFF			       CMP  AX,SYSPRM_EX_EOL	   ;AN000; IS THAT THE END OF THE PARMS?
								   ;IF NOT, LOOP BACK AND FIND OUT
								   ; WHAT THAT PARM IS
				;  $ENDLOOP E			   ;AN000;END OF LIST
 00DF  75 87			   JNE $$DO1
 00E1  80 3E 0004 R 00		       CMP  FIRST_TIME,ZERO	   ;AN000;FIND ANYTHING YET?
				;      $IF  E			   ;AN000;IF NO PARM SPECIFIED
 00E6  75 06			       JNE $$IF18
 00E8  8D 1E 0000 E			   LEA	BX,TABLEUS	   ;AN000;SPECIFY 437 (USA) AS DEFAULT
				;      $ELSE			   ;AN000;SINCE A PARM WAS FOUND
 00EC  EB 04			       JMP SHORT $$EN18
 00EE				$$IF18:
 00EE  8B 1E 0005 R			   MOV	BX,PARSE_RESULT    ;AN000;REMEMBER PARM ALREADY FOUND
				;      $ENDIF			   ;AN000;
 00F2				$$EN18:
								   ;BX=-1, "?"; BX=0, "/STATUS";BX>0, CP TABLE
 00F2  83 FB 00			       CMP  BX,ZERO		   ;AN000;WAS A CP TABLE FOUND?
				;      $IF  A			   ;AN000;IF A CP TABLE FOUND
 00F5  76 04			       JNA $$IF21
 00F7  8B 97 0400			   MOV	DX,[BX].LANID	   ;AN000;FETCH THE TWO CHAR ID FROM TABLE
				;      $ENDIF			   ;AN000;
 00FB				$$IF21:
				;  $ENDSRCH			   ;AN000;FINISHED WITH DOS COMMAND LINE
 00FB				$$SR1:
 00FB  C3			   RET				   ;AN000;RETURN TO CALLER
 00FC				PARSER ENDP			   ;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =						;AN000;
				   HEADER <PARSE_ERROR - DISPLAY REASON FOR PARSE ERROR> ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Page     1-12
PARSE_ERROR - DISPLAY REASON FOR PARSE ERROR			;AN000;      

 00FC				PARSE_ERROR PROC NEAR		   ;AN000;
				;INPUT: "FIRST_TIME" - IF NON-ZERO, FORCE ERROR CODE TO "TOO MANY PARMS"
				;	 AX - ERROR NUMBER RETURNED FROM PARSE.
				;	 SI - OFFSET INTO COMMAND OF FIRST BYTE BEYOND PARM IN ERROR
				;	 "CURRENT_PARM" - OFFSET INTO COMMAND OF WHERE TO START LOOKING FOR PARM
				;OUTPUT: APPROPRIATE ERROR MESSAGE IS DISPLAYED.
				;	 BX IS SET TO PRETEND THAT THE "?" WAS SPECIFIED.
				;	 "EXITFL" SET TO "EXPAR" TO INDICATE PARM ERROR.
				; =  =	=  =  =  =  =  =  =  =	=  =
				
 00FC  80 3E 0004 R 00		   CMP	FIRST_TIME,ZERO 	   ;AN000;ANY PARMS FOUND YET?
				;  $IF	NE			   ;AN000;IF PARM ALREADY FOUND
 0101  74 03			   JE $$IF24
 0103  B8 0001			       MOV  AX,SYSPRM_EX_MANY	   ;AN000;CHANGE RETURN CODE TO "TOO MANY PARMS"
				;  $ENDIF			   ;AN000;PARMS FOUND?
 0106				$$IF24:
 0106  A3 0000 E		   MOV	MSGNUM_PARSE,AX 	   ;AN000;PASS MESSAGE NUMBER TO DESCRIPTOR
 0109  A1 0000 R		   MOV	AX,CURRENT_PARM 	   ;AN003;GET POINTER TO START OF BAD PARM
 010C  3B F0			   CMP	SI,AX			   ;AN003;HAS THE INDEX TO COMMAND LINE MOVED?
				;  $IF	NE			   ;AN003;YES, THERE IS A FAULTY PARM
 010E  74 12			   JE $$IF26
 0110  C6 04 00			       MOV  BYTE PTR [SI],NUL	   ;AN003;DELIMIT THE BAD PARM
 0113  A3 0002 E		       MOV  SUBLIST_PARSE.SUB_VALUE,AX ;AN000;POINT SUBLIST TO BAD PARM
				
 0116  C7 06 0004 E 0000 E	       MOV  MSGNUM_PARSE.MSG_SUBLIST,OFFSET SUBLIST_PARSE ;AN003;POINT TO SUBLIST
 011C  C7 06 0006 E 0001	       MOV  MSGNUM_PARSE.MSG_COUNT,ONE_SUBS ;AN003;SET COUNT OF SUBLISTS TO ONE
				;  $ENDIF			   ;AN003;INDEX MOVED?
 0122				$$IF26:
 0122  8D 3E 0000 E		   LEA	DI,MSGNUM_PARSE 	   ;AN000;PASS MESSAGE DESCRIPTOR
 0126  E8 0000 E		   CALL SENDMSG 		   ;AN000;DISPLAY ERROR MESSAGE
				
 0129  BB FFFF			   MOV	BX,RETCODE_QUESTION	   ;AN000;INDICATE THAT "?" SPECIFIED
 012C  C6 06 0000 E 03		   MOV	EXITFL,EXPAR		   ;AN000;ERRORLEVEL CODE TO "PARM ERROR"
 0131  C3			   RET				   ;AN000;RETURN TO CALLER
 0132				PARSE_ERROR ENDP		   ;AN000;
				; =  =	=  =  =  =  =  =  =  =	=  =
				   PATHLABL GRTABPAR		   ;AN006;
 0132                        1	    $$A_STOP_GRTABPAR:                     ; 
 0132				CSEG ENDS			   ;AN000;
				   END				   ;AN000;

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Symbols-1


Macros:

		N a m e			Lines

HEADER . . . . . . . . . . . . .  	   4
PATHLABL . . . . . . . . . . . .  	  16

Structures and Records:

                N a m e                 Width   # fields
                                        Shift   Width   Mask    Initial

LANGUAGE . . . . . . . . . . . .  	0410	0003
  LANCHAR  . . . . . . . . . . .  	0000
  LANID  . . . . . . . . . . . .  	0400
  LANNAME  . . . . . . . . . . .  	0402
MSG_DESC . . . . . . . . . . . .  	000A	0005
  MSG_NUM  . . . . . . . . . . .  	0000
  MSG_HANDLE . . . . . . . . . .  	0002
  MSG_SUBLIST  . . . . . . . . .  	0004
  MSG_COUNT  . . . . . . . . . .  	0006
  MSG_CLASS  . . . . . . . . . .  	0008
PSP  . . . . . . . . . . . . . .  	0100	0003
  PSP_PARMLEN  . . . . . . . . .  	0080
  PSP_COMMAND  . . . . . . . . .  	0081
SUBLIST  . . . . . . . . . . . .  	000B	0009
  SUB_SIZE . . . . . . . . . . .  	0000
  SUB_RES  . . . . . . . . . . .  	0001
  SUB_VALUE  . . . . . . . . . .  	0002
  SUB_VALUE_SEG  . . . . . . . .  	0004
  SUB_ID . . . . . . . . . . . .  	0006
  SUB_FLAGS  . . . . . . . . . .  	0007
  SUB_MAX_WIDTH  . . . . . . . .  	0008
  SUB_MIN_WIDTH  . . . . . . . .  	0009
  SUB_PAD_CHAR . . . . . . . . .  	000A

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

CSEG . . . . . . . . . . . . . .  	0132	PARA	PUBLIC	

Symbols:            

                N a m e         	Type	 Value	 Attr

ACTIVECPID . . . . . . . . . . .  	V WORD	0000	CSEG	External

BLANK  . . . . . . . . . . . . .  	NUMBER	0020	

CONTROL_POS  . . . . . . . . . .  	L BYTE	0012	CSEG	Global
CONTROL_SW . . . . . . . . . . .  	L BYTE	004F	CSEG	Global
CPID_L . . . . . . . . . . . . .  	NUMBER	0000		Communal
CR . . . . . . . . . . . . . . .  	NUMBER	000D	
CURRENT_PARM . . . . . . . . . .  	L WORD	0000	CSEG	Global

EXITFL . . . . . . . . . . . . .  	V BYTE	0000	CSEG	External
EXPAR  . . . . . . . . . . . . .  	NUMBER	0003	

FIRST_TIME . . . . . . . . . . .  	L BYTE	0004	CSEG

LBL_GRTABPAR . . . . . . . . . .  	NUMBER	0004	

MSGNUM_PARSE . . . . . . . . . .  	V WORD	0000	CSEG	External

NOVALS . . . . . . . . . . . . .  	L BYTE	0065	CSEG
NUL  . . . . . . . . . . . . . .  	NUMBER	0000	

ONE_SUBS . . . . . . . . . . . .  	NUMBER	0001	
ORDINAL  . . . . . . . . . . . .  	L WORD	0002	CSEG	Global

PARMS  . . . . . . . . . . . . .  	L BYTE	0007	CSEG	Global
PARMSX . . . . . . . . . . . . .  	L BYTE	000A	CSEG
PARSER . . . . . . . . . . . . .  	N PROC	0066	CSEG	Global	Length = 0096
PARSE_ERROR  . . . . . . . . . .  	N PROC	00FC	CSEG	Length = 0036
PARSE_RESULT . . . . . . . . . .  	L WORD	0005	CSEG

RESULT . . . . . . . . . . . . .  	L BYTE	0047	CSEG
RESULT_PTR . . . . . . . . . . .  	L DWORD	004B	CSEG
RESULT_SYN . . . . . . . . . . .  	L WORD	0049	CSEG
RESULT_TAG . . . . . . . . . . .  	L BYTE	0048	CSEG
RETCODE_QUESTION . . . . . . . .  	NUMBER	-0001	

S437 . . . . . . . . . . . . . .  	L BYTE	0031	CSEG
S850 . . . . . . . . . . . . . .  	L BYTE	0035	CSEG
S860 . . . . . . . . . . . . . .  	L BYTE	0039	CSEG
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:45:30
GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;           Symbols-2


S863 . . . . . . . . . . . . . .  	L BYTE	003D	CSEG
S865 . . . . . . . . . . . . . .  	L BYTE	0041	CSEG
SENDMSG  . . . . . . . . . . . .  	L NEAR	0000	CSEG	External
SQU  . . . . . . . . . . . . . .  	L BYTE	0045	CSEG
SUBLIST_PARSE  . . . . . . . . .  	V WORD	0000	CSEG	External
SW_STA . . . . . . . . . . . . .  	L BYTE	0058	CSEG
SW_STATUS  . . . . . . . . . . .  	L BYTE	005D	CSEG
SYSPARSE . . . . . . . . . . . .  	L NEAR	0000	CSEG	External
SYSPRM_EX_EOL  . . . . . . . . .  	NUMBER	-0001	
SYSPRM_EX_MANY . . . . . . . . .  	NUMBER	0001	
SYSPRM_EX_MISSING  . . . . . . .  	NUMBER	0002	
SYSPRM_EX_NOT_KEYLIST  . . . . .  	NUMBER	0004	
SYSPRM_EX_NOT_SWLIST . . . . . .  	NUMBER	0003	
SYSPRM_EX_OK . . . . . . . . . .  	NUMBER	0000	
SYSPRM_EX_RANGE  . . . . . . . .  	NUMBER	0006	
SYSPRM_EX_STRING . . . . . . . .  	NUMBER	0008	
SYSPRM_EX_SYNTAX . . . . . . . .  	NUMBER	0009	
SYSPRM_EX_VALUE  . . . . . . . .  	NUMBER	0007	

TABLEUS  . . . . . . . . . . . .  	V BYTE	0000	CSEG	External

VALS . . . . . . . . . . . . . .  	L BYTE	001B	CSEG
VAL_437  . . . . . . . . . . . .  	NUMBER	0001	
VAL_850  . . . . . . . . . . . .  	NUMBER	0002	
VAL_860  . . . . . . . . . . . .  	NUMBER	0003	
VAL_863  . . . . . . . . . . . .  	NUMBER	0004	
VAL_865  . . . . . . . . . . . .  	NUMBER	0005	
VAL_QUESTION . . . . . . . . . .  	NUMBER	0006	

ZERO . . . . . . . . . . . . . .  	NUMBER	0000	

$$A_START_GRTABPAR . . . . . . .  	L NEAR	0066	CSEG	Global
$$A_STOP_GRTABPAR  . . . . . . .  	L NEAR	0132	CSEG	Global
$$DO1  . . . . . . . . . . . . .  	L NEAR	0068	CSEG
$$DO8  . . . . . . . . . . . . .  	L NEAR	009F	CSEG
$$EN18 . . . . . . . . . . . . .  	L NEAR	00F2	CSEG
$$EN4  . . . . . . . . . . . . .  	L NEAR	00C7	CSEG
$$EN5  . . . . . . . . . . . . .  	L NEAR	00B9	CSEG
$$EN6  . . . . . . . . . . . . .  	L NEAR	00AB	CSEG
$$IF1  . . . . . . . . . . . . .  	L NEAR	0073	CSEG
$$IF18 . . . . . . . . . . . . .  	L NEAR	00EE	CSEG
$$IF21 . . . . . . . . . . . . .  	L NEAR	00FB	CSEG
$$IF24 . . . . . . . . . . . . .  	L NEAR	0106	CSEG
$$IF26 . . . . . . . . . . . . .  	L NEAR	0122	CSEG
$$IF4  . . . . . . . . . . . . .  	L NEAR	00BF	CSEG
$$IF5  . . . . . . . . . . . . .  	L NEAR	00AD	CSEG
$$IF6  . . . . . . . . . . . . .  	L NEAR	0099	CSEG
$$SD8  . . . . . . . . . . . . .  	L NEAR	00A9	CSEG
$$SR1  . . . . . . . . . . . . .  	L NEAR	00FB	CSEG
$$SS1  . . . . . . . . . . . . .  	L NEAR	00CB	CSEG
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  grtabpar		
@VERSION . . . . . . . . . . . .  	TEXT  510		


    581 Source  Lines
    641 Total   Lines
    106 Symbols

  46960 + 213370 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
