Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-1


				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;
				;	CASERVIC.ASM
				;
				;
				;
				;	CAS SERVICES....FROM TSUISRD.ASM
				;
				;
				;	DATE:	 MAY 15, 1987
				;
				;
				;
				;	;AN004;  for PTM 1064 temporary fix unt
				il the CASSFAR.LIB
				;		 is fixed.  The HELP routines o
				f CAS, zero out the
				;		 frequency value.
				;
				;	;AN005;  The help text comes up blank.
					No checking was done
				;		 for invalid helps (HRD_ERROR &
				 HRD_DOSERROR).	Now,
				;		 there is checking added to PCH
				LPRD_CALL!
				;
				;	;AN006;  for PTM 1756 - added error che
				cking for wrong diskette
				;		 when help accessed. JW
				;
				;	;AN007;  for PTM 1810 - during a help r
				equest processing, any error
				;		 caused a problem because the m
				anage_help routine would
				;		 try to remove a help panel whi
				ch had not been displayed.
				;
				;	;AN008;  for PTM 2191 - added code to d
				isplay selected option when
				;		 selection is made by numeric i
				nput.
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				.ALPHA					;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,$NearToSho
				rt,$AndOr,$Temp,$Temp2,$Dist
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-2


			     C	.xcref $NoType,$ConjIfType,$IfType,$ElseType,$W
				hileType,$ConjWhileType
			     C	.xcref $RepeatType,$ConjUntilType,$ForType,$Con
				jLeaveType,jncxz
			     C	.xcref $SelectType,$WhenType,$OtherwiseType,$Co
				njWhenType
			     C	.xcref jeq,jgt,jlt,jneq,jngt,jnlt,jnna,jnnae,jn
				nb,jnnbe,jnnc,jnncxz
			     C	.xcref jnne,jnng,jnnge,jnnl,jnnle,jnno,jnnp,jnn
				s,jnnz,jnpe,jnpo,$BuildJump
			     C	.xcref $GetConj,$GetDist,$Poke,$Peek,$Push,$Pop
				,$Label,$CondJump,$CondLoop,$Test
			     C	.xcref $TopTest,$leave2,$until2,$StrucError,j,j
				n,jand,jnand,jnnand
			     C	.xcref jnnonzero,jnonzero,jnzero,jzero
			     C	.xcref $st,$sn,$OrFound,$LoopEnd,$LeaveFound,$D
				efDist
			     C	.xcref $LastLabel,$LastLabelOrg,$EquateLabel,$T
				raceLabel,$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
					INCLUDE    MACROS.INC		;AN006;
				JW
			     C	;;*********************************************
				*******************************
			     C	;;     Assembler MACROS for use with SELECT.
			     C	;;     File: MACROS.INC
			     C	;;     Latest Change Date: July 28, 1987
			     C	;;
			     C	;; These macros define powerful assembler verbs
				 neccessary for SELECT.
			     C	;;
			     C	;; Note: Many of the macros make use of an ASCI
				I-N string for passing
			     C	;;	 parameters.  The string is defined bel
				ow.
			     C	;;		   DW  count
			     C	;;		   DB  "string_variable",?
			     C	;;
			     C	;;	 COUNT is the length of the string and 
				is a word.
			     C	;;	 It is necessary to follow the string w
				ith at least one byte for the
			     C	;;	 purpose of changing the ASCII-N string
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-3


				 to an ASCII-Z string.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	;;*********************************************
				*******************************
			     C	;;  Macro Change History.
			     C	;;
			     C	;;  June 18, 1987 - Split MACROS.INC into 5 sma
				ller files.  They are:
			     C	;;			     MACROS.INC
			     C	;;			     MACROS2.INC
			     C	;;			     MACROS3.INC
			     C	;;			     MACROS4.INC
			     C	;;			     MACROS5.INC
			     C	;;		   At the end of the files, the
				re is an INCLUDE statement
			     C	;;		   to include the next file.  T
				herefore, the modules which
			     C	;;		   use these macros do not have
				 to add more include statements.
			     C	;;		   The only one that must have 
				an INCLUDE statement is
			     C	;;		   MACROS.INC.
			     C	;;
			     C	;;		  - Removed the PUSHH and POPP 
				macros from the other macro
			     C	;;		   definitions.
			     C	;;
			     C	;;  June 22, 1987 - Added the SCAN_PARAMETERS m
				acro.
			     C	;;
			     C	;;  June 24, 1987 - Added the PREPARE_FILE, WRI
				TE_LINE and SAVE_FILE macros.
			     C	;;		  - Revised the SCAN_PARAMETERS
				 macro to read two of the
			     C	;;		    parameters from a file inst
				ead of the command line.
			     C	;;
			     C	;;  June 26, 1987 - Changed the EXEC_PROGRAM ma
				cros to perform a call to
			     C	;;		    EXEC_PROGRAM_ROUTINE which 
				performs the same tasks are the
			     C	;;		    previously defined macro.  
				EXEC_PROGRAM_ROUTINE was added
			     C	;;		    to ROUTINES.INC.
			     C	;;
			     C	;;  June 29, 1987 - Changed the GET_COUNTRY_IND
				EX to a subroutine call to
			     C	;;		    GET_CNTY_INDEX_ROUTINE.  Th
				e routine has been changed
			     C	;;		    to get the new information 
				from the structure, NUM_DESIGNATES,
			     C	;;		    CPSW_STAT, and RESERVED_1.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-4


			     C	;;		   - Changed GET_COUNTRY_DEFAUL
				TS, GET_KEYBOARD_INDEX and
			     C	;;		     GET_KEYBOARD macros to per
				form subroutines calls.
			     C	;;
			     C	;;*********************************************
				*******************************
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-5


			     C	PAGE					;AN000;
			     C	INCLUDE  MAC_EQU.INC			;AN000;
			     C	INCLUDE VERSIONA.INC			
					;AN047;SEH check DOS version in VERSION
				A.INC instead of in MAC_EQU.INC
			     C	
 = 0004                      C	major_version	    equ     4	    ;Major DOS 
				version
 = 0000                      C	minor_version	    equ     00	    ;Minor DOS 
				Version
			     C	
 = 0004                      C	expected_version    equ     (MINOR_VERSION SHL 
				8)+MAJOR_VERSION
			     C	
			     C	
			     C	       ;******************************
			     C	       ;Each assembler program should:
			     C	       ;  mov ah,030h			;DOS Ge
				t Version function
			     C	       ;  int 021h			;Versio
				n ret. in AX,minor version first
			     C	       ;  cmp ax,expected_version	;ALL ut
				ilities should check for an
			     C	       ;  jne error_handler		; EXACT
				 version match.
			     C	       ;******************************
			     C	
			     C	
 = 0001                      C	TRUE			=	  1	
					;AN000;
 = 0000                      C	FALSE			=	  0	
					;AN000;
			     C	
			     C	; Equates from PRN_DEF.ASM
			     C	
 = 0001                      C	ERR_NOT_ENOUGH_MEM	EQU	  1	
					;AN000; There was not enough memory to 
				build the names table
 = 0002                      C	ERR_OPENING_FILE	EQU	  2	
					;AN000; Error opening a file
 = 0003                      C	ERR_READING_FILE	EQU	  3	
					;AN000; Error reading from a file
 = 0004                      C	ERR_FINDING_VALUE	EQU	  4	
					;AN000; Error finding the number of prn
				 defs at the beginning of the file
 = 0005                      C	ERR_LINE_TOO_LONG	EQU	  5	
					;AN000; There was a line too long for t
				he buffer
 = 0006                      C	ERR_FINDING_NAME	EQU	  6	
					;AN000; There was an error locating a p
				rinter name after a P or S
 = 0007                      C	ERR_ACCESSING_FILE	EQU	  7	
					;AN000; There was an error updating the
				 file pointer
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-6


 = 0008                      C	ERR_TOO_MANY_DEFS	EQU	  8	
					;AN000; There are too many defintion in
				 the file
 = 0009                      C	ERR_NUMBER_MATCH	EQU	  9	
					;AN000; The number of actual definition
				 do not match the number expected
 = 000A                      C	ERR_ALLOCATING_MEM	EQU	  10	
					;AN000; There was an error allocating m
				emory
 = 000B                      C	ERR_CDP_CPP		EQU	  11	
					;AN000; A prn defn had either a CDP or 
				CPP but not both
 = 000C                      C	ERR_PRN_DEFN		EQU	  12	
					;AN000; There was an error in a printer
				 definition
			     C	
			     C	; Equates from MACROS.INC		
					;
			     C	; Equates from MACROS2.INC		
					;
			     C	;MAJOR_DOS_VER		 EQU	   4	
					;AC047;SEH check now done in VERSIONA.I
				NC ;AC045;SEH
			     C	;MINOR_DOS_VER		 EQU	   00	
					;AC047;SEH ;AC045;SEH version update to
				 DOS 4.00
			     C						
					;
			     C	; Equates from MACROS3.INC		
					;
 = 0002                      C	PRESENT_WITH_PART	EQU	  2	
					;AN000;
 = 0001                      C	PRESENT_WITHOUT_PART	EQU	  1	
					;AN000;
 = 0000                      C	NOT_PRESENT		EQU	  0	
					;AN000;
 = 0000                      C	NO_EDOS_SPACE		EQU	  0	
					;AN000;
 = 0001                      C	FREE_EDOS_SPACE 	EQU	  1	
					;AN000;
 = 0002                      C	NO_EDOS_BUT_SPACE	EQU	  2	
					;AN000;
			     C						
					;
 = 0001                      C	M_DOS_EXISTS		EQU	  1H	
					;AN000;
 = 0002                      C	M_EDOS_EXISTS		EQU	  2H	
					;AN000;
 = 0004                      C	M_LOGICAL_EXISTS	EQU	  4H	
					;AN000;
 = 0008                      C	M_EDOS_SPACE		EQU	  8H	
					;AN000;
 = 0010                      C	M_FREE_SPACE		EQU	 10H	
					;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-7


 = 0003                      C	M_DOS_EDOS_PART 	EQU	  3H	
					;AN000;
			     C						
					;
 = 0001                      C	DISKETTES_EXIST 	EQU	  1	
					;AN000;
 = 0002                      C	MAX_NUM_DISKETTE	EQU	  2	
					;AN000;
			     C						
					;
 = 0001                      C	TABLE_ONE		EQU	  1	
					;AN000;
 = 0002                      C	TABLE_TWO		EQU	  2	
					;AN000;
			     C						
					;
 = 0000                      C	DATA_VALID		EQU	  0	
					;AN000;
 = 0001                      C	DATA_INVALID		EQU	  1	
					;AN000;
			     C						
					;
 = 0000                      C	USE_DEFAULT		EQU	  0	
					;AN000;
 = 0001                      C	DO_NOT_USE_DEFAULT	EQU	  1	
					;AN000;
			     C						
					;
 = 0003                      C	DEF_DEST_A		EQU	  3	
					;AN111;JW
 = 0002                      C	DEF_DEST_B		EQU	  2	
					;AN000;
 = 0001                      C	DEF_DEST_C		EQU	  1	
					;AN000;
			     C						
					;
 = 0050                      C	E_1440_TRACKS		EQU	  80	
					;AN000;
 = 0012                      C	E_1440_SECTORS		EQU	  18	
					;AN000;
			     C						
					;
			     C	; Equates from MACROS4.INC		
					;
			     C	; Equates from MACROS5.INC		
					;
 = 0001                      C	B_DRIVE 		EQU	  1	
					;AN000;
 = 0002                      C	C_DRIVE 		EQU	  2	
					;AN000;
 = 0003                      C	A_DRIVE 		EQU	  3	
					;AN111;JW
 = 0003                      C	LEN_ALT_KYBD_ID 	EQU	  3	
					;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-8


			     C	; Equates from MACROS6.INC		
					;
			     C						
					;
			     C						
					;
			     C	; Equates from ROUTINES.ASM		
					;
 = 0001                      C	STDOUT			EQU	  1	
					;AN000;
 = 0002                      C	STDERR			EQU	  2	
					;AN000;
 = 0001                      C	EXEC_DIR		EQU	  1	
					;AN000;
 = 0000                      C	EXEC_NO_DIR		EQU	  0	
					;AN000;
			     C						
					;
			     C	; Equates from SELECT.SKL		
					;
 = 0001                      C	MSG_INV_DOS		    EQU       1 
					;AN000;
 = 0004                      C	MSG_INV_BOOT_MEDIA	    EQU       4 
					;AN000;
 = 0005                      C	MSG_INV_DISK_MEDIA	    EQU       5 
					;AN000;
 = 0006                      C	MSG_INV_PARMS		    EQU       6 
					;AN000;
 = 0007                      C	MSG_INV_INSTALL 	    EQU       7 
					;AN000;
 = 0008                      C	MSG_LOADING		    EQU       8 
					;AN000;
 = 0009                      C	MSG_RELOADING		    EQU       9 
					;AN000;
			     C						
					;
			     C	; Equates for SEL_FLG (DB) in PRN_DEF.ASM
			     C	; SEL_FLG   DB	0
 = 0080                      C	INSTALLRW		EQU	  80H	
					;AN000;The INSTALL diskette is read/wri
				te
			     C	
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   PUSHH:	pushes the listed registers on 
				the stack
			     C	;;
			     C	;;   SYNTAX:   PUSHH <register list>
			     C	;;
			     C	;;   INPUT:    register list = AX, BX, CX, DX, 
				SI, DI, BP, SS, SP, CS, DS, ES
			     C	;;
			     C	;;   OUTPUT:   none
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-9


			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   PUSHH  ALLOWS THE PROGRAMER TO SPECIFY A L
				IST OF REGISTER TO
			     C	;;   BE PUSHED ON A SINGLE LINE.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	PUSHH	MACRO	REG_LIST		;;AN000
				;
			     C		IRP	REG,<REG_LIST>		;;AN000
				;
			     C		PUSH	REG			;;AN000
				; save registers
			     C		ENDM				;;AN000
				;
			     C			ENDM			;;AN000
				;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   POPP:     pops the listed registers on the
				 stack
			     C	;;
			     C	;;   SYNTAX:   POPP <register list>
			     C	;;
			     C	;;   INPUT:    register list = AX, BX, CX, DX, 
				SI, DI, BP, SS, SP, CS, DS, ES
			     C	;;
			     C	;;   OUTPUT:   none
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   POPP ALLOWS THE PROGRAMER TO SPECIFY A LIS
				T OF REGISTER TO
			     C	;;   BE POPPED ON A SINGLE LINE.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	POPP	MACRO	REG_LIST		;;AN000
				;
			     C		IRP	REG,<REG_LIST>		;;AN000
				;
			     C		POP	REG			;;AN000
				; return registers to initial state
			     C		ENDM				;;AN000
				;
			     C			ENDM			;;AN000
				;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   DOSCALL:  DOS interrupt 21 function call
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-10


			     C	;;
			     C	;;   SYNTAX:   DOSCALL
			     C	;;
			     C	;;   INPUT:    none
			     C	;;
			     C	;;   OUTPUT:   none
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   DOSCALL INVOKES THE DOS INTERRUPT 21 FUNCT
				ION CALL.
			     C	;;   THE AH REGISTER MUST ALREADY BE LOADED WIT
				H THE
			     C	;;   REQUIRED VALUE.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	DOSCALL MACRO				;;AN000
				;
			     C		INT	21H			;;AN000
				; call to DOS
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   INIT_VAR: Load a variable with an immediat
				e value.
			     C	;;
			     C	;;   SYNTAX:  INIT_VAR	variable, expression
			     C	;;
			     C	;;   INPUT:   variable = Address of a variable.
			     C	;;	      expression = The immediate value 
				to load into the variable.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OPERATION:    The memory variable identifi
				ed by var is assigned the
			     C	;;	 immediate value specified in immed.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	INIT_VAR   MACRO  VARIABLE,EXPRESSION	
					;;AN000;
			     C		MOV	VARIABLE,EXPRESSION	
					;;AN000; move expression into variable
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   COPY_WORD: Copy a word variable to another
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-11


				 word variable.
			     C	;;
			     C	;;   SYNTAX:  COPY_WORD  var_dest, var_src
			     C	;;
			     C	;;   INPUT:   var_dest - The destination word v
				ariable.
			     C	;;	      var_src - The source word variabl
				e.
			     C	;;
			     C	;;   OUTPUT:  none
			     C	;;
			     C	;;   OPERATION:  The contents of var_src remain
				 intact.
			     C	;;		 The contents of AX is destroye
				d.
			     C	;;
			     C	;;*********************************************
				***************************
			     C	COPY_WORD  MACRO  VAR_DEST, VAR_SRC	
					;;AN000;
			     C		MOV	AX, VAR_SRC		
					;;AN000;
			     C		MOV	VAR_DEST,AX		
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   COPY_BYTE: Copy a byte variable to another
				 byte variable.
			     C	;;
			     C	;;   SYNTAX:  COPY_WORD  var_dest, var_src
			     C	;;
			     C	;;   INPUT:   var_dest - The destination byte v
				ariable.
			     C	;;	      var_src - The source byte variabl
				e.
			     C	;;
			     C	;;   OUTPUT:  none
			     C	;;
			     C	;;   OPERATION:  The contents of var_src remain
				 intact.
			     C	;;		 The contents of AL is destroye
				d.
			     C	;;
			     C	;;*********************************************
				***************************
			     C	COPY_BYTE  MACRO  VAR_DEST, VAR_SRC	
					;;AN000;
			     C		MOV	AL, VAR_SRC		
					;;AN000;
			     C		MOV	VAR_DEST,AL		
					;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-12


			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   COMP_WORDS:  Compare two 16 bit memory var
				iable.
			     C	;;
			     C	;;   SYNTAX:  COMP_WORDS  var_dest, var_src
			     C	;;
			     C	;;   INPUT:   var_dest - The destination memory
				 variable (16 bits)
			     C	;;	      var_src - The source memory varia
				ble	 (16 bits)
			     C	;;
			     C	;;   OUTPUT:  none
			     C	;;
			     C	;;   OPERATION:  The two 16 bit memory variable
				s are compared and the status
			     C	;;	 flags are updated.  Refer to the ASSEM
				BLER reference for more details.
			     C	;;
			     C	;;*********************************************
				***************************
			     C	COMP_WORDS	MACRO	VAR_DEST, VAR_SRC
					;;AN000;
			     C						
					;
			     C		MOV	AX, VAR_DEST		
					;;AN000;
			     C		CMP	AX, VAR_SRC		
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   COMP_BYTES:  Compare two 8 bit memory vari
				ables.
			     C	;;
			     C	;;   SYNTAX:  COMP_BYTES  var_dest, var_src
			     C	;;
			     C	;;   INPUT:   var_dest - The destination memory
				 variable ( 8 bits)
			     C	;;	      var_src - The source memory varia
				ble	 ( 8 bits)
			     C	;;
			     C	;;   OUTPUT:  none
			     C	;;
			     C	;;   OPERATION:  The two 8 bit memory variables
				 are compared and the status
			     C	;;	 flags are updated.  Refer to the ASSEM
				BLER reference for more details.
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-13


			     C	;;*********************************************
				***************************
			     C	COMP_BYTES	MACRO	VAR_DEST, VAR_SRC
					;;AN000;
			     C						
					;
			     C		MOV	AL, VAR_DEST		
					;;AN000;
			     C		CMP	AL, VAR_SRC		
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   INC_VAR:  Increment the specified memory v
				ariable by 1.
			     C	;;
			     C	;;   SYNTAX:  INC_VAR  var_dest
			     C	;;
			     C	;;   INPUT:   var_dest - The destination memory
				 variable.
			     C	;;
			     C	;;   OUTPUT:  none
			     C	;;
			     C	;;   OPERATION:  The memory variable is increme
				nted by one.
			     C	;;
			     C	;;*********************************************
				***************************
			     C	INC_VAR 	MACRO	VAR_DEST	
					;;AN000;
			     C		INC	VAR_DEST		
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   DEC_VAR:  Decrement the specified memory v
				ariable by 1.
			     C	;;
			     C	;;   SYNTAX:  DEC_VAR  var_dest
			     C	;;
			     C	;;   INPUT:   var_dest - The destination memory
				 variable.
			     C	;;
			     C	;;   OUTPUT:  none
			     C	;;
			     C	;;   OPERATION:  The memory variable is decreme
				nted by one.
			     C	;;
			     C	;;*********************************************
				***************************
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-14


			     C	DEC_VAR 	MACRO	VAR_DEST	
					;;AN000;
			     C		DEC	VAR_DEST		
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   INIT:    initializes the DS to the beginni
				ng of the data
			     C	;;
			     C	;;   SYNTAX:  INIT
			     C	;;
			     C	;;   INPUT:   none
			     C	;;
			     C	;;   OUTPUT:  none
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   THE MACRO SIMPLY SETS UP THE DATA SEGMENT.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	INIT	MACRO				;;AN000
				;
			     C		PUSH	DS			;;AN000
				;
			     C		XOR	AX,AX			;;AN000
				; make AX = 0
			     C		PUSH	AX			;;AN000
				;
			     C		MOV	AX,DATA 		;;AN000
				;
			     C		MOV	DS,AX			;;AN000
				; initialize DS reg to beginning of data
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   MERGE_STRING: merges 2 string blocks toget
				her to form a third one
			     C	;;
			     C	;;   SYNTAX:  MERGE_STRING  name_dest, immed_ma
				x, name_src1, name_src2
			     C	;;
			     C	;;   INPUT:   name_dest - Destination string va
				riable (ASCII-N format)
			     C	;;	      immed_max - Maximum length of des
				tination string
			     C	;;	      name_src1 - Source string variabl
				e 1 (ASCII-N format)
			     C	;;	      name_src2 - Source string variabl
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-15


				e 2 (ASCII-N format)
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OPERATION:
			     C	;;	 The string pointed to by name_scr1 is 
				copied to the destination string
			     C	;;	 first followed by the string pointed t
				o by name_scr2.	If the
			     C	;;	 destination string is not long enough 
				to hold the new string, then
			     C	;;	 the strings are copied until all the s
				pace is used up.
			     C	;;	 It is assumed that the input strings a
				nd the output string
			     C	;;	 are in the current data segment.
			     C	;;
			     C	;;
			     C	;;*********************************************
				*****************************************
			     C	MERGE_STRING   MACRO   NAME_DEST, IMMED_MAX, NA
				ME_SRC1, NAME_SRC2 ;;AN000;
			     C	
			     C		LEA	DI, NAME_DEST		
						;;AN000;
			     C		LEA	SI, NAME_SRC1		
						;;AN000;
			     C		MOV	AX, IMMED_MAX		
						;;AN000;
			     C		CALL	COPY_ROUTINE		
						;;AN000;
			     C		MOV	CX, IMMED_MAX		
						;;AN000;
			     C		LEA	DI, NAME_DEST		
						;;AN000;
			     C		LEA	SI, NAME_SRC2		
						;;AN000;
			     C		CALL	APPEND_STRING_ROUTINE	
						;;AN000;
			     C		ENDM				
						;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   APPEND_STRING:  Appends an ASCII-N string 
				to the specified string.
			     C	;;
			     C	;;   SYNTAX:  APPEND_STRING  name_dest, immed_m
				ax, name_src
			     C	;;
			     C	;;   INPUT:   name_dest - Destination string va
				riable (ASCII-N format)
			     C	;;	      immed_max - Maximum length of des
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-16


				tination string
			     C	;;	      name_src	- Source string variabl
				e   (ASCII-N format)
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OPERATION:
			     C	;;	 The ASCII-N string text defined in nam
				e_scr is appended to the
			     C	;;	 end of name_dest.
			     C	;;
			     C	;;*********************************************
				*****************************************
			     C	APPEND_STRING	MACRO	NAME_DEST, IMMED_MAX, N
				AME_SRC	;;AN000;
			     C		MOV	CX, IMMED_MAX		
						;;AN000;
			     C		LEA	DI, NAME_DEST		
						;;AN000;
			     C		LEA	SI, NAME_SRC		
						;;AN000;
			     C		CALL	APPEND_STRING_ROUTINE	
						;;AN000;
			     C		ENDM				
						;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   COPY_STRING: Copy ASCII-N string text.
			     C	;;
			     C	;;   SYNTAX:  MOVE_STRING  name_dest, immed_max
				, name_src
			     C	;;
			     C	;;   INPUT:
			     C	;;	 name_dest - The destination string var
				iable.
			     C	;;	 immed_max - The maximum length of dest
				ination string.
			     C	;;	 name_src - source string veriable (ASC
				II-N format)
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OPERATION: ASCII-N string text defined in 
				name_src is copied to name_dest.
			     C	;;	 The number of characters copied to nam
				e_dest will not exceed immed_max.
			     C	;;
			     C	;;*********************************************
				*****************************
			     C	COPY_STRING MACRO  NAME_DEST, IMMED_MAX, NAME_S
				RC	;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-17


			     C						
						;
			     C		LEA	DI, NAME_DEST		
						;;AN000;
			     C		LEA	SI, NAME_SRC		
						;;AN000;
			     C		MOV	AX, IMMED_MAX		
						;;AN000;
			     C		CALL	COPY_ROUTINE		
						;;AN000;
			     C		ENDM				
						;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   PUSH_HEADING: Push screen label address to
				 the SELECT stack
			     C	;;
			     C	;;   SYNTAX:  PUSH_HEADING  immed_lab
			     C	;;
			     C	;;   INPUT:
			     C	;;	 immed_lab - screen label
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OPERATION: The screen label address is pus
				hed onto the SELECT stack
			     C	;;	 provided the numher of entries on the 
				stack will not exceed the
			     C	;;	 maximum.  Error will NOT be generated 
				if the function was not
			     C	;;	 successful.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	PUSH_HEADING	MACRO	IMMED_LAB	
						;;AN000;
			     C		MOV	AX, OFFSET IMMED_LAB	
						;;AN000;
			     C		CALL	PUSH_ROUTINE		
						;;AN000;
			     C		ENDM				
						;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   POP_HEADING: Pop screen label address from
				 the SELECT stack and jump
			     C	;;		  to the label address.
			     C	;;
			     C	;;   SYNTAX:  POP_HEADING
			     C	;;
			     C	;;   INPUT:
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-18


			     C	;;	 None.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OPERATION: The screen label address from t
				he SELECT stack is poped
			     C	;;	 if the number of entries on the stack 
				is not zero.  If the number
			     C	;;	 of entries is zero, the EXIT_DOS scree
				n label address will be used.
			     C	;;	 A jump to the screen label address is 
				also performed.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	POP_HEADING	MACRO			
						;;AN000;
			     C		CALL	POP_ROUTINE		
						;;AN000;
			     C		JMP	SI			
						;;AN000;
			     C		ENDM				
						;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   DIR: get current directory
			     C	;;
			     C	;;   SYNTAX:  DIR  dir_buffer
			     C	;;
			     C	;;   INPUT:   dir_buffer = POINTER TO A  64-BYT
				E USER MEMORY AREA
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = N/A, successful
			     C	;;	      CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   DIR PLACES THE FULL PATH NAME OF THE CURRE
				NT DIRECTORY FOR THE
			     C	;;   SPECIFIED DRIVE IN THE BUFFER.
			     C	;;   THE RETURNING STRING IS AN ASCIIZ STRING A
				ND IT DOES NOT
			     C	;;   HAVE THE DRIVE LETTER OR A BACKSLASH.
			     C	;;   IF AN ERROR OCCURS, THE CARRY FLAG IS SET,
				 AND THE ERROR CODE
			     C	;;   IS RETURNED IN AX.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	DIR   MACRO   DIR_BUFFER		
					;;AN000;
			     C	    CALL HOOK_INT_24			
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-19


					;;AN000;
			     C		MOV	SI,OFFSET DIR_BUFFER	
					;;AN000; pointer to 64 byte user area
			     C		MOV	DL,0			
					;;AN000; give directory of the default 
				drive
			     C		MOV	AH,47H			
					;;AN000; get current directory
			     C		DOSCALL 			
					;;AN000;
			     C	    CALL RESTORE_INT_24 		
					;;AN000;
			     C	      ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   MAKE_DIR: Make a Directory
			     C	;;
			     C	;;   SYNTAX:   MAKE_DIR directory
			     C	;;
			     C	;;   INPUT:    directory = An ASCII-N STRING GI
				VING THE REQUIRED
			     C	;;			   PATH
			     C	;;   OUTPUT:	CY = 0, AX = undefined,  call w
				as successful
			     C	;;		CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   THE DIRECTORY IS MADE USING THE DOS INT 21
				H (AH=39H) CALL.
			     C	;;   IF AN ERROR OCCURS, THE CARRY FLAG IS SET,
				 AND THE ERROR CODE
			     C	;;   IS RETURNED IN AX.
			     C	;;
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	MAKE_DIR MACRO	dir_len 		;;AN000
				;
			     C	    CALL HOOK_INT_24			;;AN000
				;
			     C	
			     C		MOV	DI,OFFSET dir_len	;;AN000
				;
			     C		CALL	POS_ZERO		;;AN000
				; position the '0' at the end of the path
			     C		MOV	DX,OFFSET dir_len[2]	;;AN000
				; advance pointer to beginning of path
			     C		MOV	AH,39H			;;AN000
				; make directory interrupt
			     C		DOSCALL 			;;AN000
				; call to DOS interrupt 21
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-20


			     C		CALL  RESTORE_INT_24		;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   MAKE_DIR_PATHS: Create the specified direc
				tory including all the specified
			     C	;;		 sub-directories if they do not
				 exist.
			     C	;;
			     C	;;   SYNTAX:  MAKE_DIR_PATHS  name_dir
			     C	;;
			     C	;;   INPUT:
			     C	;;	 name_dir - Directory pathname in ASCII
				-N string format.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 CY = 0 Success
			     C	;;	 CY = 1 Error - AX will contain an erro
				r code.
			     C	;;
			     C	;;   OPERATION: The directory pathname is creat
				ed.
			     C	;;	 If the drive letter and colon are not 
				followed by a '\', then the
			     C	;;	 macro will start creating the director
				ies from the default directory.
			     C	;;	 If they are followed by a '\', then th
				e macro will start at the root.
			     C	;;
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	MAKE_DIR_PATHS	MACRO	NAME_DIR	;;AN000
				;
			     C	
			     C		MOV	BX, OFFSET NAME_DIR	;;AN000
				; Address of the ASCII-N string
			     C		CALL	MAKE_DIR_PATHS_ROUTINE	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   REMOVE_DIR: Remove Directory
			     C	;;
			     C	;;   SYNTAX:   REMOVE_DIR directory
			     C	;;
			     C	;;   INPUT:    directory = An ASCII-N STRING gi
				ving the REQUIRED PATH
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-21


			     C	;;   OUTPUT:   CY = 0, AX = undefined,	success
				ful
			     C	;;	       CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   THE DIRECTORY IS REMOVED USING THE DOS INT
				 21H (AH=3AH) CALL.
			     C	;;   IF AN ERROR OCCURS, THE CARRY FLAG IS SET,
				 AND THE ERROR CODE
			     C	;;   IS RETURNED IN AX.
			     C	;;
			     C	;;   It is assumed that the string is located i
				n the data segment
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	REMOVE_DIR   MACRO   dir_len		;;AN000
				;
			     C	
			     C	    CALL HOOK_INT_24			;;AN000
				;
			     C		MOV	DI,OFFSET dir_len	;;AN000
				;
			     C		CALL	POS_ZERO		;;AN000
				; position the '0' at the end of the path
			     C		MOV	DX,OFFSET dir_len[2]	;;AN000
				; advance pointer to beginning of path
			     C		MOV	AH,3AH			;;AN000
				; remove the specified directory
			     C		DOSCALL 			;;AN000
				; call to DOS interrupt 21
			     C		CALL  RESTORE_INT_24		;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   CHANGE_DIR: Change the current directory t
				o the specified directory.
			     C	;;
			     C	;;   SYNTAX:  CHANGE_DIR  name_dir
			     C	;;
			     C	;;   INPUT:
			     C	;;	 name_dir - directory pathname in ASCII
				-N string format.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 CY = 0 Success
			     C	;;	 CY = 1 Error  AX will contain an error
				 code
			     C	;;
			     C	;;   OPERATION: The directory pathname identifi
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-22


				ed by the ASCII-N string
			     C	;;	 becomes the default directory.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	CHANGE_DIR	MACRO	NAME_DIR	;;AN000
				;
			     C	
			     C	    CALL HOOK_INT_24			;;AN000
				;
			     C		MOV	DI,OFFSET NAME_DIR	;;AN000
				; Get the offset of the string
			     C		CALL	POS_ZERO		;;AN000
				; Make into an ASCII-Z string
			     C		MOV	DX,OFFSET NAME_DIR+2	;;AN000
				; Get the start of the string
			     C		MOV	AH,3BH			;;AN000
				; DOS function call number
			     C		DOSCALL 			;;AN000
				;
			     C	    CALL RESTORE_INT_24 		;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	INCLUDE  MACROS2.INC			;;AN000
				;
			     C	;;*********************************************
				*******************************
			     C	;;     Assembler MACROS for use with SELECT.
			     C	;;     File: MACROS2.INC
			     C	;;     Latest Change Date: August 04, 1987
			     C	;;
			     C	;; These macros define powerful assembler verbs
				 neccessary for SELECT.
			     C	;;
			     C	;; Note: Many of the macros make use of an ASCI
				I-N string for passing
			     C	;;	 parameters.  The string is defined bel
				ow.
			     C	;;		   DW  count
			     C	;;		   DB  "string_variable",?
			     C	;;
			     C	;;	 COUNT is the length of the string and 
				is a word.
			     C	;;	 It is necessary to follow the string w
				ith at least one byte for the
			     C	;;	 purpose of changing the ASCII-N string
				 to an ASCII-Z string.
			     C	;;
			     C	;;*********************************************
				*******************************
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-23


			     C	page					;AN000;
			     C	;;*********************************************
				***************************
			     C	;;
			     C	;;   CLOSE_FILE: Close File
			     C	;;
			     C	;;   SYNTAX:  CLOSE_FILE  handle
			     C	;;
			     C	;;   INPUT:   handle = The handle of the file t
				o close.
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = undefined,  successf
				ul
			     C	;;	      CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   THIS MACROS CLOSES THE FILE WITH THE GIVEN
				 FILE HANDLE.
			     C	;;   IT MAKES USE OF INT 21 (AH=3EH).
			     C	;;   IF AN ERROR OCCURS, THE CARRY FLAG IS SET,
				 AND THE ERROR CODE
			     C	;;   IS RETURNED IN AX.
			     C	;;
			     C	;;*********************************************
				*****************************
			     C	CLOSE_FILE   MACRO   HANDLE		
					 ;;AN000;
			     C						
					 ;;
			     C	    MOV  BX, HANDLE			
					 ;;AN000;
			     C	    CALL FAR PTR CLOSE_FILE_ROUTINE	
					 ;;AN000;
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				*****************
			     C	;;
			     C	;;   CREATE_FILE: Create new File
			     C	;;
			     C	;;   SYNTAX:  CREATE_FILE  name_file, immed_att
				r, var_handle
			     C	;;
			     C	;;   INPUT:   name_file - filename in ASCII-N s
				tring format.
			     C	;;	      immed_attr - file attribute
			     C	;;
			     C	;;   OUTPUT:  CY = 0 Success: var_handle contai
				n the file handle
			     C	;;	      CY = 1 Error: AX contains as erro
				r code
			     C	;;
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-24


			     C	;;   OPERATION:
			     C	;;
			     C	;;   CREATE_FILE CREATES A FILE WITH THE GIVEN 
				NAME USING INT 21H (AH=5BH)
			     C	;;   IF AN ERROR OCCURS, THE CARRY FLAG IS SET,
				 AND THE ERROR CODE
			     C	;;   IS RETURNED IN AX.
			     C	;;
			     C	;;*********************************************
				*****************************
			     C	CREATE_FILE  MACRO   NAME_FILE, IMMED_ATTR, VAR
				_HANDLE ;;AN000;
			     C	    LEA  DI, NAME_FILE			
					;;AN000;
			     C	    MOV  CX, IMMED_ATTR 		
					;;AN000;
			     C	    CALL CREATE_FILE_ROUTINE		
					;;AN000;
			     C	    MOV  VAR_HANDLE, AX 		
					;;AN000;
			     C	    ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   ERASE_FILE: Erase File
			     C	;;
			     C	;;   SYNTAX:  ERASE_FILE  filename
			     C	;;
			     C	;;   INPUT:   filename = POINTER TO ASCII-N STR
				ING - FILE NAME
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = undefined,  successf
				ul
			     C	;;	      CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   ERASE_FILE ERASES THE FILE USING INT 21H (
				AH=41H).
			     C	;;   IF AN ERROR OCCURS, THE CARRY FLAG IS SET,
				 AND THE ERROR CODE
			     C	;;   IS RETURNED IN AX.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	ERASE_FILE   MACRO   FILE_NAME		
					;;AN000;
			     C	
			     C	    LEA  DI, FILE_NAME			
					;;AN000;
			     C	    CALL ERASE_FILE_ROUTINE		
					;;AN000;
			     C	    ENDM				
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-25


					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   CHMOD_FILE: Change file attributes to read
				/write
			     C	;;
			     C	;;   SYNTAX:  CHMOD_FILE  filename
			     C	;;
			     C	;;   INPUT:   filename = POINTER TO ASCII-N STR
				ING - FILE NAME
			     C	;;
			     C	;;   OUTPUT:  None.
			     C	;;
			     C	;;   OPERATION:
			     C	;;	The CHMOD dos call is executed (43H) to
				 change the file's attributes
			     C	;;	to read/write.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	CHMOD_FILE   MACRO   FILE_NAME		
					;;AN000;
			     C	
			     C	    LEA  DI, FILE_NAME			
					;;AN000;
			     C	    CALL CHMOD_FILE_ROUTINE		
					;;AN000;
			     C	    ENDM				
					;;AN000;
			     C	;;*********************************************
				***************************
			     C	;;   FIND_FILE: Find File
			     C	;;
			     C	;;   SYNTAX:  FIND_FILE   name, attribute
			     C	;;
			     C	;;   INPUT:   name = POINTER TO ASCII-N STRING 
				- FILE NAME
			     C	;;	      attribute - the file attribute us
				ed in the search
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = undefined,  successf
				ul
			     C	;;	      CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   FINDFILE FINDS THE FIRST FILENAME SPECIFIE
				D USING INT 21 (AH=4EH).
			     C	;;   AND LOADS INFORMATION INTO THE CURRENT DTA
				.
			     C	;;   NOTE : THE DEFAULT DTA IS AT 80H IN THE PS
				P.
			     C	;;   IF AN ERROR OCCURS, THE CARRY FLAG IS SET,
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-26


				 AND THE ERROR CODE
			     C	;;   IS RETURNED IN AX.
			     C	;;
			     C	;;*********************************************
				***************************
			     C	FIND_FILE  MACRO   LOC_FILE,ATTRIBUTE	
					 ;;AN000;
			     C						
					 ;;
			     C	    LEA  DI, LOC_FILE			
					 ;;AN000;
			     C	    MOV  CX, ATTRIBUTE			
					 ;;AN000;
			     C	    CALL FIND_FILE_ROUTINE		
					 ;;AN000;
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				***************************
			     C	;;   FIND_NEXT: Find the next match in the dire
				ctory.
			     C	;;
			     C	;;   SYNTAX:  FIND_NEXT
			     C	;;
			     C	;;   INPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = undefined,  successf
				ul
			     C	;;	      CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION: This macro must be called after
				 FIND_FIRST.  It searched
			     C	;;	 the same directory as the FIND_FIRST c
				ommand for the next match.
			     C	;;	 If none is found then the carry flag i
				s set.
			     C	;;	 This macro uses the data in the DTA fo
				r the directory seach so
			     C	;;	 it is important not to change the addr
				ess of the current DTA.
			     C	;;
			     C	;;
			     C	;;*********************************************
				***************************
			     C	FIND_NEXT  MACRO   LOC_FILE,ATTRIBUTE	
					;;AN000;
			     C		CALL  HOOK_INT_24		
					;;AN000;
			     C		MOV	INT_24_ERROR, FALSE	
					;;AN000; Zero the number of critical er
				rors
			     C		MOV	AH,4FH			
					;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-27


			     C		DOSCALL 			
					;;AN000;
			     C		CALL  RESTORE_INT_24		
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   OPEN_FILE - Open File
			     C	;;
			     C	;;   SYNTAX:  OPEN_FILE  file_name, mode, handl
				e
			     C	;;
			     C	;;   INPUT:   file_name = POINTER TO ASCII-N ST
				RING - FILE NAME
			     C	;;	      mode =  0,1,2 (read,write,read/wr
				ite)
			     C	;;	      handle = POINTER TO A LOCATION TO
				 STORE FILE HANDLE
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = FILE HANDLE, success
				ful
			     C	;;	      CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   THIS MACRO OPENS A FILE FOR READ/WRITE OPE
				RATIONS.
			     C	;;   IT MAKES USE OF INT 21 (AH=3DH).
			     C	;;   IF AN ERROR OCCURS, THE CARRY FLAG IS SET,
				 AND THE ERROR CODE
			     C	;;   IS RETURNED IN AX.
			     C	;;
			     C	;;*********************************************
				*****************************
			     C	OPEN_FILE   MACRO   FILE_NAME,MODE,HANDLE
					;;AN000;
			     C	
			     C	    LEA  DI, FILE_NAME			
					;;AN000;
			     C	    MOV  AL, MODE			
					;;AN000;
			     C	    CALL OPEN_FILE_ROUTINE		
					;;AN000;
			     C	    MOV  HANDLE, AX			
					;;AN000;
			     C	    ENDM				
					;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   RENAME_FILE - Rename File
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-28


			     C	;;   SYNTAX:  RENAME_FILE  old_name, new_name
			     C	;;
			     C	;;   INPUT:   old_name = POINTER TO ASCII-N STR
				ING -OLD FILE NAME
			     C	;;	      new_name = POINTER TO ASCII-N STR
				ING -NEW FILE NAME
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = undefined,  successf
				ul
			     C	;;	      CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   THIS MACRO RENAMES A FILE GIVEN 2 NAMES.
			     C	;;   IT MAKES USE OF INT 21 (AH=56H).
			     C	;;   IF AN ERROR OCCURS, THE CARRY FLAG IS SET,
				 AND THE ERROR CODE
			     C	;;   IS RETURNED IN AX.
			     C	;;
			     C	;;*********************************************
				*****************************
			     C	RENAME_FILE  MACRO   OLD_NAME,NEW_NAME	
					 ;;AN000;
			     C						
					 ;;
			     C	    LEA  SI, OLD_NAME			
					 ;;AN000;
			     C	    LEA  DI, NEW_NAME			
					 ;;AN000;
			     C	    CALL RENAME_FILE_ROUTINE		
					 ;;AN000;
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   READ_FILE: Transfer the specified number o
				f bytes from a file into a
			     C	;;	 buffer location.
			     C	;;
			     C	;;   SYNTAX:  READ_FILE  var_handle, buffer, im
				med_char, var_char
			     C	;;
			     C	;;   INPUT:
			     C	;;	 var_handle - The handle of the file to
				 read.
			     C	;;	 buffer - The address of where to store
				 the data
			     C	;;	 immed_char - The number of characters 
				to read
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 CY = 0, Read success.	var_char - numb
				er of bytes read
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-29


			     C	;;	 CY = 1, Read error. AX contains the er
				ror code.
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   THIS MACRO READS TO AN ALREADY OPENED FILE
				.
			     C	;;   IT MAKES USE OF INT 21 (AH=3FH).
			     C	;;   AX WILL RETURN THE NUMBER BYTES ACTUALLY W
				RITTEN.
			     C	;;
			     C	;;*********************************************
				***************************
			     C	READ_FILE    MACRO   VAR_HANDLE,BUFFER,IMMED_CH
				AR, VAR_CHAR ;;AN000;
			     C	
			     C	    MOV  BX,VAR_HANDLE			
					 ;;AN000;
			     C	    MOV  DX,OFFSET BUFFER		
					 ;;AN000;
			     C	    MOV  CX,IMMED_CHAR			
					 ;;AN000;
			     C	    CALL READ_FILE_ROUTINE		
					 ;;AN000;
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   WRITE_FILE: Transfer the specified number 
				of bytes from a buffer into a
			     C	;;	 specified file.
			     C	;;
			     C	;;   SYNTAX:  WRITE_FILE  var_handle, buffer, i
				mmed_char, var_char
			     C	;;
			     C	;;   INPUT:
			     C	;;	 var_handle - The handle of the file to
				 write to.
			     C	;;	 buffer - The address of where the data
				 is stored.
			     C	;;	 immed_char - The number of characters 
				to write.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 CY = 0, Write success.  var_char - num
				ber of bytes written.
			     C	;;	 CY = 1, Write error. AX contains the e
				rror code.
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   THIS MACRO WRITES TO AN ALREADY OPENED FIL
				E.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-30


			     C	;;   IT MAKES USE OF INT 21 (AH=3DH).
			     C	;;   AX WILL RETURN THE NUMBER BYTES ACTUALLY W
				RITTEN.
			     C	;;
			     C	;;*********************************************
				***************************
			     C	WRITE_FILE   MACRO   VAR_HANDLE, BUFFER, IMMED_
				CHAR, VAR_CHAR ;;AN000;
			     C						
					 ;;
			     C	    MOV  BX,VAR_HANDLE			
					 ;;AN000;
			     C	    MOV  DX,OFFSET BUFFER		
					 ;;AN000;
			     C	    MOV  CX,IMMED_CHAR			
					 ;;AN000;
			     C	    CALL WRITE_FILE_ROUTINE		
					 ;;AN000;
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   PREPARE_FILE:  Prepare a file and a buffer
				 for the construction of that
			     C	;;	 file line by line.
			     C	;;
			     C	;;   SYNTAX:  PREPARE_FILE  filename
			     C	;;
			     C	;;   INPUT:
			     C	;;	 filename  =  The name of the file to c
				reate. (ASCII-N format)
			     C	;;
			     C	;;   OUTPUT:  CY = 0: No error was encountered.
			     C	;;	      CY = 1: There was an error encoun
				tered.
			     C	;;
			     C	;;   OPERATION:  A attempt is made to create th
				e file.	If it fails because
			     C	;;	 the file already exists, then the file
				 is opened for writing.
			     C	;;	 The user will then write to the file b
				e calling WRITE_LINE macro.  The
			     C	;;	 data will be temperarily stored in a b
				uffer to limit the actual number
			     C	;;	 of writes to the file.
			     C	;;
			     C	;;*********************************************
				*****************************
			     C	PREPARE_FILE  MACRO	FILENAME	
					 ;;AN000;
			     C	
			     C	    MOV  BX, OFFSET FILENAME		
					 ;;AN000; Pass the address of the filen
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-31


				ame string
			     C	    CALL PREPARE_FILE_ROUTINE		
					 ;;AN000; Call a routine to do that act
				ual work
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   WRITE_LINE:  Write a line to the file bein
				g constructed.
			     C	;;
			     C	;;   SYNTAX:  WRITE_LINE  line
			     C	;;
			     C	;;   INPUT:
			     C	;;	 line  =  The line to write to the file
				. (ASCII-N format)
			     C	;;
			     C	;;   OUTPUT:  CY = 0: No error was encountered.
			     C	;;	      CY = 1: An error was encountered.
			     C	;;
			     C	;;   OPERATION:  The line that is passed, has a
				 CR and a LF appended to the
			     C	;;	 end of the line.  The data is then sto
				red in a buffer.  When the
			     C	;;	 buffer is full, the data is written to
				 the disk.
			     C	;;
			     C	;;*********************************************
				*****************************
			     C	WRITE_LINE    MACRO	LINE		
					 ;;AN000;
			     C	
			     C	    MOV  BX, OFFSET LINE		
					 ;;AN000; Pass the address of the line 
				to write
			     C	    CALL WRITE_LINE_ROUTINE		
					 ;;AN000; Call a routine to do the actu
				al work
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   SAVE_FILE:  Empty the data in the buffer b
				eing used to create the file
			     C	;;	      and then close the file.
			     C	;;
			     C	;;   SYNTAX:  SAVE_FILE  file_name, error_code
			     C	;;
			     C	;;   INPUT:
			     C	;;	 file_name = The name of the file being
				 built.	If there has been
			     C	;;		an error encountered, then the 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-32


				file will be erased.
			     C	;;
			     C	;;   OUTPUT:  CY = 0: No error was encountered.
			     C	;;	      CY = 1: An error was encountered.
			     C	;;		      ERROR_CODE will contain t
				he code of the error which
			     C	;;				 occured.
			     C	;;
			     C	;;   OPERATION:  The routine will check to see 
				if there is any data left in
			     C	;;	 the buffer.  If there is, the data is 
				written to the file being
			     C	;;	 created.  The file is then closed.  If
				 errors were encountered at
			     C	;;	 anytime during the create process, the
				n the carry flag will be set
			     C	;;	 and the error code will be returned in
				 ERROR_CODE.
			     C	;;
			     C	;;*********************************************
				*****************************
			     C	SAVE_FILE     MACRO	FILE_NAME, ERROR_CODE
					 ;;AN000;
			     C	
			     C	    MOV  BX, OFFSET FILE_NAME		
					 ;;AN000; Get the address of the file n
				ame string
			     C	    CALL SAVE_FILE_ROUTINE		
					 ;;AN000; Call a subroutine to do the a
				ctual work
			     C	    MOV  ERROR_CODE, AX 		
					 ;;AN000; Store the returned error code
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   CHECK_DOS_VERSION: Check DOS Version level
				 is 4.00
			     C	;;
			     C	;;   SYNTAX:  CHECK_DOS_VERSION
			     C	;;
			     C	;;   INPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OUTPUT:  CY = 0: Current DOS Version is 4.
				00
			     C	;;	      CY = 1: Current DOS Version is ot
				her than level 4.00
			     C	;;
			     C	;;   OPERATION:  DOS function call 30h is perfo
				rmed to get the current DOS
			     C	;;	 version number.  If the DOS version is
				 not 4.00, the carry flag is set.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-33


			     C	;;
			     C	;;*********************************************
				*****************************
			     C	CHECK_DOS_VERSION   MACRO		;;AN000
				;
			     C		MOV	AH, 30H 		;;AN000
				; DOS function number to perform
			     C		DOSCALL 			;;AN000
				;
			     C		.IF < AL EQ MAJOR_VERSION > AND ;;AC047
				;SEH check is now made in VERSIONA.INC
			     C		.IF < AH EQ MINOR_VERSION >	;;AC047
				;SEH Check the DOS minor version
			     C		CLC				;;AN000
				; This is the correct version
			     C		.ELSE				;;AN000
				;
			     C		STC				;;AN000
				; This is the incorrect version
			     C		.ENDIF				;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   SET_DISPLAY_MODE:	Set the display mode to
				 80 column.
			     C	;;
			     C	;;   SYNTAX:  SET_DISPLAY_MODE
			     C	;;
			     C	;;   INPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OPERATION:  The Video Interrupt (INT 10H, 
				AH = 0) is performed to set
			     C	;;	 the display to 80 column mode.
			     C	;;
			     C	;;*********************************************
				***************************
			     C	SET_DISPLAY_MODE	MACRO		;;AN000
				;
			     C	
			     C	    CALL SET_DISPLAY_MODE_ROUTINE	;;AN000
				;
			     C	    ENDM				;;AN000
				;
			     C	
			     C	;;*********************************************
				***************************
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-34


			     C	;;   CHECK_EXPANDED_MEMORY:  Check if the syste
				m supports expanded memory.
			     C	;;
			     C	;;   SYNTAX:  CHECK_EXPANDED_MEMORY   var_xma
			     C	;;
			     C	;;   INPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 var_xma   = 0: Expanded memory is NOT 
				supported.
			     C	;;		   = 1: Expanded memory is supp
				orted.
			     C	;;	 var_mod80 = 0: Not model 80
			     C	;;		   = 1: Model 80
			     C	;;
			     C	;;   OPERATION:  A call to the system services 
				(INT 15H, AH = C0H) is performed
			     C	;;	 to get the system configuration parame
				ters. (model byte).
			     C	;;
			     C	;;	 The Personal System/2 Model 80 (model 
				byte = 0F8h) always support
			     C	;;	 expanded memory.
			     C	;;
			     C	;;	 The Personal System/2 Models 50 and 60
				 (model byte = 0FCh) support
			     C	;;	 expanded memory if the ??? 2 is presen
				t.  The ??? 2 card has
			     C	;;	 the identity number of F7FEh.	F7H is 
				read through the port address
			     C	;;	 101h and FEH is read through port 100H
			     C	;;
			     C	;;	 All other models do not support expand
				ed memory.
			     C	;;
			     C	;;*********************************************
				***************************
			     C	CHECK_EXPANDED_MEMORY	MACRO	VAR_XMA, VAR_MO
				D80	;;AC000;JW
			     C	
			     C	    CALL CHK_EX_MEM_ROUTINE		
						;;AN000;
			     C	    MOV  VAR_XMA, SI			
						;;AN000;
			     C	    MOV  VAR_MOD80,BX			
						;;AN000;JW
			     C	    ENDM				
						;;AN000;
			     C	
			     C	INCLUDE  MACROS3.INC			
						;;AN000;
			     C	;;*********************************************
				*******************************
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-35


			     C	;;     Assembler MACROS for use with SELECT.
			     C	;;     File: MACROS3.INC
			     C	;;     Latest Change Date: July 28, 1987
			     C	;;
			     C	;; These macros define powerful assembler verbs
				 neccessary for SELECT.
			     C	;;
			     C	;; Note: Many of the macros make use of an ASCI
				I-N string for passing
			     C	;;	 parameters.  The string is defined bel
				ow.
			     C	;;		   DW  count
			     C	;;		   DB  "string_variable",?
			     C	;;
			     C	;;	 COUNT is the length of the string and 
				is a word.
			     C	;;	 It is necessary to follow the string w
				ith at least one byte for the
			     C	;;	 purpose of changing the ASCII-N string
				 to an ASCII-Z string.
			     C	;;
			     C	;;*********************************************
				*******************************
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-36


			     C	page					;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   CHECK_DEFAULT_DRIVE:  Determine if default
				 drive is drive A:
			     C	;;
			     C	;;   SYNTAX:  CHECK_DEFAULT_DRIVE
			     C	;;
			     C	;;   INPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 CY = 0:  Drive A is the default drive
			     C	;;	 CY = 1:  Drive A is NOT the default dr
				ive
			     C	;;
			     C	;;   OPERATION:  DOS Function Call 19h is perfo
				rmed to get the default drive.
			     C	;;	 If the default drive is not drive A (A
				L <> 0), the carry flag is set.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	CHECK_DEFAULT_DRIVE	MACRO		
					 ;;AN000;
			     C	    MOV  AH, 19H			
					 ;;AN000; Fn. Number for getting curren
				t drive
			     C	    DOSCALL				
					 ;;AN000;
			     C	    .IF < ZERO AL >			
					 ;;AN000; Is A the default drive?
			     C		 CLC				
					 ;;AN000; Yes!
			     C	    .ELSE				
					 ;;AN000;
			     C		 STC				
					 ;;AN000; No!
			     C	    .ENDIF				
					 ;;AN000;
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   CHECK_DISK:  Check is the specified fixed 
				disk is present.  If disk is
			     C	;;	 present, return disk partition status.
			     C	;;
			     C	;;   SYNTAX:  CHECK_DISK  immed_disk, var_disk,
				 var_status, var_status_2, buffer
			     C	;;
			     C	;;   INPUT:
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-37


			     C	;;	 immed_disk = 1: First fixed disk.
			     C	;;		    = 2: Second fixed disk.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 var_disk = 0: Disk not present.
			     C	;;		  = 1: Disk present - No DOS or
				 EDOS partitions
			     C	;;		  = 2: Disk present - DOS or ED
				OS partitions exist
			     C	;;	 var_status = 01H: Primary DOS partitio
				n exists
			     C	;;		    = 02H: Extended DOS partiti
				ons exists
			     C	;;		    = 04H: Logical drives exist
			     C	;;		    = 08H: Free space exists in
				 EDOS partition
			     C	;;		    = 10H: Free space exists on
				 disk
			     C	;;			       More than one st
				atus bit can be set
			     C	;;	 var_status_2 = 0: There is no free spa
				ce in EDOS partition and the
			     C	;;			   disk.
			     C	;;		      = 1: There is free space 
				in the EDOS partition.
			     C	;;		      = 2: There is no EDOS par
				tition, but there is free
			     C	;;			   disk space.
			     C	;;	 buffer   = Buffer for fixed disk statu
				s information.
			     C	;;
			     C	;;   OPERATION:  A call is performed to the FDI
				SK utility (GET_DISK_STATUS)
			     C	;;	 to get the status of the specified fix
				ed disk drive.  The returned
			     C	;;	 status information is checked and the 
				memory variables are set as
			     C	;;	 specified above.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	CHECK_DISK	MACRO	IMMED_DISK, VAR_DISK, V
				AR_STATUS, VAR_STATUS_2, BUFFER ;;AN000;
			     C	
			     C	    LEA  DI, BUFFER			
					;;AN000;
			     C	    MOV  AX, IMMED_DISK 		
					;;AN000;
			     C	    CALL CHECK_DISK_ROUTINE		
					;;AN000;
			     C	    MOV  VAR_DISK, CX			
					;;AN000;
			     C	    MOV  VAR_STATUS, BX 		
					;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-38


			     C	    MOV  VAR_STATUS_2, DX		
					;;AN000;
			     C	    ENDM				
					;;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   CHECK_DISKETTE:  Check the type of diskett
				es attached to the system.
			     C	;;
			     C	;;   SYNTAX:  CHECK_DISKETTE  var_disk_a, var_d
				isk_b, var_tot, buffer
			     C	;;
			     C	;;   INPUT:
			     C	;;	 buffer  = Buffer for IOCTL
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 var_disk_a = 0FFH Diskette drive A not
				 present
			     C	;;		    = 0 360k diskette (5.25 inc
				h)
			     C	;;		    = 1 740K diskette (3.5  inc
				h)
			     C	;;		    = 2 1.2M diskette (5.25 inc
				h)
			     C	;;		    = 7 1.44M diskette (3.5 inc
				h)
			     C	;;	 var_disk_b = 0FFH Diskette drive B not
				 present
			     C	;;		    = 0, 1, 2, 7 as defined abo
				ve for diskette A.
			     C	;;	 var_tot    = total number of diskettes
				 attached (1 or 2)
			     C	;;
			     C	;;   OPERATION:  Interrupt 11H is performed to 
				get equipment status.  The number
			     C	;;	 of diskettes attached will be returned
				 as specified above.  A call
			     C	;;	 is then made to the IOCTL function of 
				DOS (AH = 44h) to get the type
			     C	;;	 of media the disk drives are.	The fun
				ction returns its data in a
			     C	;;	 26 byte buffer, where the second byte 
				contains a description of the
			     C	;;	 drive.  The codes are as follows:
			     C	;;		0 = 320/360 KB 5-1/4-inch
			     C	;;		1 = 5-1/4-inch, 1.2 MB
			     C	;;		2 = 3-1/2-inch, 720 KB
			     C	;;		3 = 8 inch single density
			     C	;;		4 = 8 inch double density
			     C	;;		5 = Fixed disk
			     C	;;		6 = Tape drive
			     C	;;		7 = Other
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-39


			     C	;;*********************************************
				***************************;;
			     C	CHECK_DISKETTE	MACRO	VAR_DISK_A, VAR_DISK_B,
				 VAR_TOT, BUFFER ;;AN000;
			     C	    INT     11H 			
					 ;;AN000; See how many diskette drives 
				there are
			     C	    .IF < BIT AL NAND DISKETTES_EXIST > 
					 ;;AN000; Are there diskettes?
			     C		 MOV	 AX, 0			
					 ;;AN000; There are no diskettes.
			     C	    .ELSE				
					 ;;AN000;
			     C		 MOV	 CL,6			
					 ;;AN000; Number of bits to shift
			     C		 SHR	 AL,CL			
					 ;;AN000; Diskette bits are 6 and 7.  S
				hift to right
			     C		 MOV	 AH, 0			
					 ;;AN000; Clear the high byte
			     C		 INC	 AX			
					 ;;AN000; Make into the actual number o
				f diskettes
			     C		 .IF < AX GT MAX_NUM_DISKETTE > 
					 ;;AN000; Are there more then 2 diskett
				e drives?
			     C		      MOV     AX, MAX_NUM_DISKETTE
					 ;;AN000; Yes, but we are only concern 
				with two.
			     C		 .ENDIF 			
					 ;;AN000;
			     C	    .ENDIF				
					 ;;AN000;
			     C	    MOV     VAR_TOT, AL 		
					 ;;AN000; Store the number of diskette 
				drives.
			     C	    ;;*****************************************
				*****************************
			     C	    ;; Examine diskette drive A first.
			     C	    ;;*****************************************
				*****************************
			     C	    MOV   VAR_DISK_A, E_DISKETTE_INV	
					 ;;AN000;
			     C	    MOV   VAR_DISK_B, E_DISKETTE_INV	
					 ;;AN000;
			     C	    MOV   DI, OFFSET VAR_DISK_A 	
					 ;;AN000;
			     C	    .FOR BL = 1 TO VAR_TOT		
					 ;;AN000;
			     C		 MOV  AX, 440DH 		
					 ;;AN000;
			     C		 MOV  CX, 0860H 		
					 ;;AN000;
			     C		 MOV  DX, OFFSET BUFFER 	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-40


					 ;;AN000;
			     C		 DOSCALL			
					 ;;AN000;
			     C		 MOV  SI, OFFSET BUFFER + 1	
					 ;;AN000;
			     C		 MOV  AL, [SI]			
					 ;;AN000;
			     C		 .IF < AL EQ E_DISKETTE_1200 >	
					 ;;AN111;JW
			     C		    MOV  AL,E_DISKETTE_360	
					 ;;AN111;JW
			     C		 .ENDIF 			
					 ;;AN111;JW
			     C		 .IF < AL EQ E_DISKETTE_1440 >	
					 ;;AN000;
			     C		      .IF < <WORD PTR [SI+3]> NE E_1440
				_TRACKS > OR ;;AN000;
			     C		      .IF < <WORD PTR [SI+19]> NE E_144
				0_SECTORS >  ;;AN000;
			     C			   MOV	AL, E_DISKETTE_INV
					 ;;AN000;
			     C		      .else			
					;yuk- don't have time to get this worki
				ng on 1.4M drives
			     C			   mov al, e_diskette_720
					;so pretend there is no such thing
			     C		      .ENDIF			
					 ;;AN000;
			     C		 .ENDIF 			
					 ;;AN000;
			     C		 MOV  [DI], AL			
					 ;;AN000;
			     C		 MOV  DI, OFFSET VAR_DISK_B	
					 ;;AN000;
			     C	    .NEXT BL				
					 ;;AN000;
			     C	    ;;*****************************************
				*****************************
			     C	    ;; Check for compatible A: to B: combinatio
				ns ;AN000;JW
			     C	    ;;*****************************************
				*****************************
			     C	    .IF < VAR_DISK_A eq E_DISKETTE_720 > or
					 ;;AN000;JW
			     C	    .IF < VAR_DISK_A eq E_DISKETTE_1440 >
					 ;;AN000;JW
			     C	       .IF < VAR_DISK_B eq E_DISKETTE_360 >
					 ;;AN000;JW
			     C		  MOV  VAR_DISK_B, E_DISKETTE_INV
					 ;;AN000;JW
			     C		  DEC  VAR_TOT			
					 ;;AN000;JW
			     C	       .ENDIF				
					 ;;AN000;JW
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-41


			     C	    .ENDIF				
					 ;;AN000;JW
			     C	    .IF < VAR_DISK_A eq E_DISKETTE_360 >
					 ;;AN000;JW
			     C	       .IF < VAR_DISK_B eq E_DISKETTE_720 > or
					 ;;AN000;JW
			     C	       .IF < VAR_DISK_B eq E_DISKETTE_1440 >
					 ;;AN000;JW
			     C		  MOV  VAR_DISK_B, E_DISKETTE_INV
					 ;;AN000;JW
			     C		  DEC  VAR_TOT			
					 ;;AN000;JW
			     C	       .ENDIF				
					 ;;AN000;JW
			     C	    .ENDIF				
					 ;;AN000;JW
			     C						
					 ;;
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   CHECK_VALID_MEDIA:  Check if the diskettes
				 attached will support
			     C	;;	 installation of SELECT.  Also, check i
				f install destination will
			     C	;;	 be selected by user or determined by S
				ELECT.
			     C	;;
			     C	;;   SYNTAX:  CHECK_VALID_MEDIA  var_disk_a, va
				r_disk_b, var_tot, var_disk,
			     C	;;				 var_def, var_i
				ndex, var_option
			     C	;;
			     C	;;   INPUT:
			     C	;;	 var_disk_a  =	diskette A presence and
				 type
			     C	;;	 var_disk_b  =	diskette B presence and
				 type
			     C	;;	 var_tot     =	total number of dikette
				s
			     C	;;	 var_disk    =	0: first fixed disk is 
				not present
			     C	;;		     >	0: first fixed disk is 
				present
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 CY = 0: Success variables are returned
				 as defined below.
			     C	;;	 CY = 1: Error - invalid media
			     C	;;	 var_def   =  0 use default destination
				 drive
			     C	;;		   =  1 default destination dri
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-42


				ve not applicable
			     C	;;	 var_index =  1 default destination is 
				drive C
			     C	;;		   =  2 default destination is 
				drive B
			     C	;;	 var_option = 1 possible drive B or C
			     C	;;		    = 2 possible drive A or C
			     C	;;		    = 3 possible drive A or B o
				r C
			     C	;;		    = 4 possible drive A or B
			     C	;;
			     C	;;   OPERATION:  The diskette drive types are c
				hecked for valid media type.
			     C	;;	 If the diskette media types are valid,
				 a check is made to determine if
			     C	;;	 install destination will be user selec
				ted or will be determined by
			     C	;;	 SELECT.  The following checks are made
				.
			     C	;;
			     C	;;	  - if one diskette, return valid media
				 and default destination is A
			     C	;;
			     C	;;	  - If two diskettes only, return valid
				 and:
			     C	;;		if A = B, default = B
			     C	;;		if A <> B, default = A
			     C	;;		if A and B are mixed 720 and 1.
				44, destination option is A or B
			     C	;;
			     C	;;	  - If one diskette and a fixed disk on
				ly, return valid media and
			     C	;;	    destination option is drive A or C.
			     C	;;
			     C	;;	  - If two diskettes and a fixed disk, 
				return valid media and:
			     C	;;		if A = B, destination option is
				 B or C
			     C	;;		if A <> B, destination option i
				s A or C
			     C	;;		if A and B are mixed 720 and 1.
				44, destination option is
			     C	;;		  A or B or C
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	CHECK_VALID_MEDIA	MACRO	VAR_DISK_A, VAR
				_DISK_B, VAR_TOT, VAR_DISK, VAR_DEF, VAR_INDEX,
				 VAR_OPTION ;;AN111;JW
			     C	
			     C	    MOV  AL, VAR_DISK_A 		
					;;AN111;JW
			     C	    MOV  BL, VAR_DISK_B 		
					;;AN111;JW
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-43


			     C	    MOV  SI, VAR_DISK			
					;;AN111;JW
			     C	    CALL CHECK_VALID_MEDIA_ROUTINE	
					;;AN111;JW
			     C	    MOV  VAR_DEF, CL			
					;;AN111;JW
			     C	    MOV  VAR_INDEX, DX			
					;;AN111;JW
			     C	    MOV  VAR_OPTION, DI 		
					;;AN111;JW
			     C	    ENDM				
					;;AN111;JW
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   SCAN_DISK_TABLE:  Scan the specified disk 
				status table from the
			     C	;;	 specified index item for specified fie
				ld and return status information.
			     C	;;
			     C	;;   SYNTAX:  SCAN_DISK_TABLE	 immed_disk, va
				r_index, var_ref
			     C	;;
			     C	;;   INPUT:
			     C	;;	 immed_disk  = 1: First fixed disk
			     C	;;		     = 2: Second fixed disk
			     C	;;	 var_index  = Index of the information 
				to return
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 var_ret       = 0: Success - Index int
				o table is valid
			     C	;;		       = 1: Error - Index inval
				id or end of table
			     C	;;	 N_NAME_PART   = Partition name.
			     C	;;	 N_SIZE_PART   = Partition size.
			     C	;;	 N_STATUS_PART = Partition status
			     C	;;	 P_DRIVE_PART  = Drive letter assigned.
			     C	;;
			     C	;;   OPERATION:
			     C	;;	Starts scanning the disk table from the
				 point indicated by var_index
			     C	;;	for either the name, status or type.  T
				he table is scanned until either
			     C	;;	the desired entry is found, or the end 
				of the table is reached.  If
			     C	;;	the end of the table is reached before 
				a marching entry is found, then
			     C	;;	var_ret returns 1, else if an entry is 
				found, it returns 0.
			     C	;;	If found, var_index will also return th
				e index of the entry.
			     C	;;
			     C	;;	Note:  The index of the first entry in 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-44


				the table is 1.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	SCAN_DISK_TABLE MACRO	IMMED_DISK, VAR_INDEX, 
				VAR_RET	;;AN000;
			     C	
			     C	    MOV  CX, IMMED_DISK 		
					;;AN000;
			     C	    MOV  AX, VAR_INDEX			
					;;AN000;
			     C	    CALL SCAN_DISK_TABLE_ROUTINE	
					;;AN000;
			     C	    MOV  VAR_RET, AX			
					;;AN000;
			     C	    ENDM				
					;;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   UPDATE_DISK_TABLE:  Update the specifed di
				sk status table for the
			     C	;;	 specified index item.
			     C	;;
			     C	;;   SYNTAX:  UPDATE_DISK_TABLE  immed_disk, va
				r_index, var_ref
			     C	;;
			     C	;;   INPUT:
			     C	;;	 immed_disk  = 1: First fixed disk
			     C	;;		     = 2: Second fixed disk
			     C	;;	 var_index   = Index into table
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 var_ret     = 0: Success - Index into 
				table is valid
			     C	;;		     = 1: Error   - Index into 
				table is not valid
			     C	;;	 partition name   = N_NAME_PART
			     C	;;	 partition size   = N_SIZE_PART
			     C	;;	 partition status = N_STATUS_PART
			     C	;;	 partition type   = N_TYPE_PART
			     C	;;	 drive letter	  = P_DRIVE_PART
			     C	;;
			     C	;;   OPERATION:  If the index into the disk tab
				le is valid, the disk table
			     C	;;	 is updated for the specifed index.  Di
				sk status information is obtained
			     C	;;	 from pre-defined locations as specifie
				d above.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	UPDATE_DISK_TABLE	MACRO	IMMED_DISK, VAR
				_INDEX, VAR_REF	;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-45


			     C	
			     C	    MOV  CX, IMMED_DISK 		
					;;AN000;
			     C	    MOV  AX, VAR_INDEX			
					;;AN000;
			     C	    CALL UPDATE_DISK_TABLE_ROUTINE	
					;;AN000;
			     C	    MOV  VAR_REF, AX			
					;;AN000;
			     C	    ENDM				
					;;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   GET_PARTITION_SIZE:  Return DOS and EDOS p
				artition size in ASCII-N format.
			     C	;;
			     C	;;   SYNTAX:  GET_PARTITION_SIZE  var_tot, var_
				dos, name_dos, name_edos
			     C	;;
			     C	;;   INPUT:
			     C	;;	 var_tot  =  Free disk space
			     C	;;	 var_dos  =  Size of DOS partition
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 name_dos = Size of DOS partition in AS
				CII-N format.
			     C	;;	 name_edos = Size of EDOS partition in 
				ASCII-N format.
			     C	;;
			     C	;;   OPERATION:  The DOS partition size is conv
				erted to ASCII-N format.
			     C	;;	 The size of the Extended DOS partition
				 is obtained by subtracting
			     C	;;	 the size of DOS partition from the fre
				e disk space.  If the size of
			     C	;;	 any partition is zero, a zero string l
				ength is returned.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	GET_PARTITION_SIZE	MACRO	VAR_TOT, VAR_DO
				S, NAME_DOS, NAME_EDOS ;;AN000;
			     C						
					 ;;
			     C	    PUSH VAR_TOT			
					 ;;AN000; Save the variable
			     C	    MOV  AX, VAR_DOS			
					 ;;AN000; Size of the DOS partition.
			     C	    SUB  VAR_TOT, AX			
					 ;;AN000; Subtract the dos partition si
				ze
			     C	    WORD_TO_CHAR     VAR_TOT, NAME_EDOS 
					 ;;AN000; Convert binay values to ASCII
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-46


			     C	    WORD_TO_CHAR     VAR_DOS, NAME_DOS	
					 ;;AN000;
			     C	    POP  VAR_TOT			
					 ;;AN000;
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   CHECK_MACHINE: Return the model byte
			     C	;;
			     C	;;   SYNTAX:  CHECK_MACHINE mac_type p_flag
			     C	;;
			     C	;;   INPUT:
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 mac_type = model byte
			     C	;;	 p_flag   = PS2 presence (E_YES, E_NO)
			     C	;;
			     C	;;   OPERATION:  An INT 15H is executed to retu
				rn a pointer to the system
			     C	;;	 descriptor vector.  The model byte is 
				retrieved from this vector
			     C	;;	 and placed in the supplied variable. T
				he ps2 flag is also set.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	CHECK_MACHINE  MACRO MAC_TYPE, P_FLAG	
					 ;;AN000;JW
			     C						
					 ;;
			     C		MOV  AH,0C0H			
					 ;;AN000; INT 15H system config request
			     C		INT  15H			
					 ;;AN000; system services
			     C		.IF < nc >			
					 ;;AN000;
			     C		   MOV	AH,ES: BYTE PTR [BX+2]	
					 ;;AN000; get the model byte
			     C		.ELSE				
					 ;;AN000;
			     C		   MOV	AH,00			
					 ;;AN000;
			     C		.ENDIF				
					 ;;AN000;
			     C		MOV  MAC_TYPE,AH		
					 ;;AN000; save the model byte
			     C		MOV  P_FLAG,E_YES		
					 ;;AN000;
			     C						
					 ;;
			     C		.IF < AH eq 0 > or		
					 ;;AN000; if old pc
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-47


			     C		.IF < AH eq 0FBH > or		
					 ;;AN000; if pc XT
			     C		.IF < AH eq 0F9H > or		
					 ;;AN000; if pc convertible
			     C		.IF < AH eq 0FCH > and		
					 ;;AN000; if pc AT and
			     C		.IF <<ES:BYTE PTR [BX+3]> le 02 >
					 ;;AN000;   sub-model byte le 2
			     C		   MOV	P_FLAG,E_NO		
					 ;;AN000;     not a ps2
			     C		.ENDIF				
					 ;;AN000;
			     C		ENDM				
					 ;;AN000;
			     C	
			     C	INCLUDE  MACROS4.INC			
					 ;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;     Assembler MACROS for use with SELECT.
			     C	;;     File: MACROS4.INC
			     C	;;     Latest Change Date: July 16, 1987
			     C	;;
			     C	;; These macros define powerful assembler verbs
				 neccessary for SELECT.
			     C	;;
			     C	;; Note: Many of the macros make use of an ASCI
				I-N string for passing
			     C	;;	 parameters.  The string is defined bel
				ow.
			     C	;;		   DW  count
			     C	;;		   DB  "string_variable",?
			     C	;;
			     C	;;	 COUNT is the length of the string and 
				is a word.
			     C	;;	 It is necessary to follow the string w
				ith at least one byte for the
			     C	;;	 purpose of changing the ASCII-N string
				 to an ASCII-Z string.
			     C	;;
			     C	;;*********************************************
				*******************************
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-48


			     C	page					;;AN000
				;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   GET_DATE: Get the current system date.
			     C	;;
			     C	;;   SYNTAX:  GET_DATE	var_year, var_month, va
				r_day
			     C	;;
			     C	;;   INPUT:   NONE
			     C	;;
			     C	;;   OUTPUT:  CY = 0: CURRENT SYSTEM DATE IS 1/
				1/80
			     C	;;	      CY = 1: CURRENT SYSTEM DATE IS NO
				T 1/1/80
			     C	;;		      VAR_YEAR	- SYSTEM YEAR
					      (16 BITS)
			     C	;;		      VAR_MONTH - SYSTEM MONTH
					     (16 BITS)
			     C	;;		      VAR_DAY	- SYSTEM DAY
					     (16 BITS)
			     C	;;
			     C	;;   OPERATION:  DOS function call 2Ah is perfo
				rmed to get the current
			     C	;;		 system date.  If the system da
				te is not 1/1/80, the
			     C	;;		 carry flag is set.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	GET_DATE	MACRO	VAR_YEAR, VAR_MONTH, VA
				R_DAY ;;AN000;
			     C	
			     C		MOV	AH,2AH			;;AN000
				; get time dos interrupt
			     C		DOSCALL 			;;AN000
				;
			     C		MOV	VAR_YEAR, CX		;;AN000
				; Save the date.
			     C		MOV	CH,0			;;AN000
				; Clear the byte
			     C		MOV	CL,DH			;;AN000
				;
			     C		MOV	VAR_MONTH, CX		;;AN000
				;
			     C		MOV	CL,DL			;;AN000
				;
			     C		MOV	VAR_DAY, CX		;;AN000
				;
			     C		.IF < VAR_YEAR EQ 1980 > AND	;;AN000
				; See if it is the base year.
			     C		.IF < DX EQ 0101H>		;;AN000
				; i.e. 1/1/80
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-49


			     C		   CLC				;;AN000
				; Yes it is.
			     C		.ELSE				;;AN000
				;
			     C		   STC				;;AN000
				;
			     C		.ENDIF				;;AN000
				;
			     C	
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   GET_TIME: Get current system time.
			     C	;;
			     C	;;   SYNTAX:  GET_TIME	var_hour, var_minutes, 
				var_seconds
			     C	;;
			     C	;;   INPUT:   None.
			     C	;;
			     C	;;   OUTPUT:  VAR_HOUR	  - SYSTEM HOUR 
					 (16 BITS)
			     C	;;	      VAR_MINUTES - SYSTEM MINUTES
					 (16 BITS)
			     C	;;	      VAR_SECONDS - SYSTEM SECONDS
					 (16 BITS)
			     C	;;
			     C	;;   OPERATION:  DOS function call 2Ch is perfo
				rmed to get the current
			     C	;;	 system time.
			     C	;;
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	GET_TIME   MACRO	VAR_HOUR, VAR_MINUTES, 
				VAR_SECONDS ;;AN000;
			     C	
			     C	
			     C		MOV	AH,2CH			;;AN000
				; get time dos interrupt
			     C		DOSCALL 			;;AN000
				;
			     C	
			     C		MOV	AH, 0			;;AN000
				;
			     C		MOV	AL, CH			;;AN000
				;
			     C		MOV	VAR_HOUR, AX		;;AN000
				;
			     C		MOV	AL, CL			;;AN000
				;
			     C		MOV	VAR_MINUTES, AX 	;;AN000
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-50


			     C		MOV	AL, DH			;;AN000
				;
			     C		MOV	VAR_SECONDS, AX 	;;AN000
				;
			     C	
			     C	
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				***************************;;
			     C	;;   SET_DATE: Sets the system date
			     C	;;
			     C	;;   SYNTAX:  SET_DATE	var_year, var_month, va
				r_day
			     C	;;
			     C	;;   INPUT:   var_year	- 1980 - 2099	
					 ( 16 bits )
			     C	;;	      var_month - 1 - 12	
					 ( 16 bits )
			     C	;;	      var_day	- 1 - 31	
					 ( 16 bits )
			     C	;;
			     C	;;   OUTPUT:  CY = 0: SUCCESSFUL
			     C	;;	      CY = 1: ERROR - Date is not valid
			     C	;;
			     C	;;   OPERATION:  DOS function call 2Bh is perfo
				rmed to set the system date.
			     C	;;	 If the date is not valid, the carry fl
				ag is set.
			     C	;;
			     C	;;*********************************************
				***************;;
			     C	SET_DATE   MACRO	VAR_YEAR, VAR_MONTH, VA
				R_DAY ;;AN000;
			     C		MOV	CX, VAR_YEAR		;;AN000
				;
			     C		MOV	AX, VAR_MONTH		;;AN000
				;
			     C		MOV	DH, AL			;;AN000
				;
			     C		MOV	AX, VAR_DAY		;;AN000
				;
			     C		MOV	DL, AL			;;AN000
				;
			     C		MOV	AH,2BH			;;AN000
				; set date dos interrupt
			     C		DOSCALL 			;;AN000
				;
			     C		.IF < ZERO AL > 		;;AN000
				;
			     C		   CLC				;;AN000
				;
			     C		.ELSE				;;AN000
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-51


			     C		   STC				;;AN000
				;
			     C		.ENDIF				;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   SET_TIME: Sets the current system time.
			     C	;;
			     C	;;   SYNTAX:  SET_TIME	var_hour, var_minutes, 
				var_seconds
			     C	;;
			     C	;;   INPUT:   var_hour	  = 0 - 23	
					 ( 16 BITS )
			     C	;;	      var_minutes = 0 - 59	
					 ( 16 BITS )
			     C	;;	      var_seconds = 0 - 59	
					 ( 16 BITS )
			     C	;;	      hundredth   = Assumed to be zero
			     C	;;
			     C	;;   OUTPUT:  CY = 0: SUCCESSFUL
			     C	;;	      CY = 1: Error - Date is not valid
			     C	;;
			     C	;;   OPERATION:  DOS function call 2Dh is perfo
				rmed to set the current system
			     C	;;		 time.	If the time is not vali
				d, the carry flag will be set.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	SET_TIME   MACRO	VAR_HOUR, VAR_MINUTES, 
				VAR_SECONDS ;;AN000;
			     C	
			     C		MOV	AX, VAR_HOUR		;;AN000
				;
			     C		MOV	CH, AL			;;AN000
				;
			     C		MOV	AX, VAR_MINUTES 	;;AN000
				;
			     C		MOV	CL, AL			;;AN000
				;
			     C		MOV	AX, VAR_SECONDS 	;;AN000
				;
			     C		MOV	DH, AL			;;AN000
				;
			     C		MOV	DL, 0			;;AN000
				; Hundredths of seconds is 0
			     C		MOV	AH,2DH			;;AN000
				; set time dos interrupt
			     C		DOSCALL 			;;AN000
				;
			     C		.IF < ZERO AL > 		;;AN000
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-52


				;
			     C		   CLC				;;AN000
				;
			     C		.ELSE				;;AN000
				;
			     C		   STC				;;AN000
				;
			     C		.ENDIF				;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   CHECK_TIME_CHANGE: Check if user entered t
				ime is different from the
			     C	;;		 specified system time.
			     C	;;
			     C	;;   SYNTAX:  CHECK_TIME_CHANGE: var_u_hour, va
				r_u_min, var_u_sec,
			     C	;;				 var_s_hour, va
				r_s_min, var_s_sec
			     C	;;
			     C	;;   INPUT:   var_u_hour = User specified hour
						 ( 16 bits )
			     C	;;	      var_u_min  = User specified minut
				es	 ( 16 bits )
			     C	;;	      var_u_sec  = User specified secon
				ds	 ( 16 bits )
			     C	;;	      var_s_hour = System hour	
						 ( 16 bits )
			     C	;;	      var_s_min  = System min	
						 ( 16 bits )
			     C	;;	      var_s_sec  = System sec	
						 ( 16 bits )
			     C	;;
			     C	;;   OUTPUT:  CY = 0: User specified time is th
				e same as the system time.
			     C	;;	      CY = 1: User specified time is di
				fferent from the system time.
			     C	;;
			     C	;;   OPERATION:  The user time and system time 
				are compared and the carry
			     C	;;		 flag is updated as specified a
				bove.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	CHECK_TIME_CHANGE	MACRO	VAR_U_HOUR, VAR
				_U_MIN, VAR_U_SEC, VAR_S_HOUR, VAR_S_MIN, VAR_S
				_SEC ;;AN000;
			     C		 LOCAL	   EXIT_CHECK_TIME_CHANGE ;;AN0
				00;
			     C		 MOV  AX, VAR_S_HOUR		;;AN000
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-53


				;
			     C		.IF < VAR_U_HOUR EQ AX >	;;AN000
				;
			     C		      MOV  AX, VAR_S_MIN	;;AN000
				;
			     C		     .IF < VAR_U_MIN  EQ AX >	;;AN000
				;
			     C			   MOV	AX, VAR_S_SEC	;;AN000
				;
			     C			  .IF < VAR_U_SEC  EQ AX > ;;AN
				000;
			     C			       CLC		;;AN000
				;
			     C			       JMP   EXIT_CHECK_TIME_CH
				ANGE;AN000;
			     C			   .ENDIF		;;AN000
				;
			     C		      .ENDIF			;;AN000
				;
			     C		 .ENDIF 			;;AN000
				;
			     C		 STC				;;AN000
				;
			     C	EXIT_CHECK_TIME_CHANGE: 		;;AN000
				;
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   CHECK_DATE_CHANGE: Check if user entered d
				ate is different from the
			     C	;;		 specified system date.
			     C	;;
			     C	;;   SYNTAX:  CHECK_DATE_CHANGE: var_u_year, va
				r_u_month, var_u_day,
			     C	;;				 var_s_year, va
				r_s_month, var_s_day
			     C	;;
			     C	;;   INPUT:   var_u_year   = User specified yea
				r	   ( 16 bits )
			     C	;;	      var_u_month  = User specified mon
				th	   ( 16 bits )
			     C	;;	      var_u_day    = User specified day
				 	   ( 16 bits )
			     C	;;	      var_s_year   = System year
						   ( 16 bits )
			     C	;;	      var_s_month  = System month
						   ( 16 bits )
			     C	;;	      var_s_day    = System day 
						   ( 16 bits )
			     C	;;
			     C	;;   OUTPUT:  CY = 0: User specified date is th
				e same as the system date.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-54


			     C	;;	      CY = 1: User specified date is di
				fferent from the system date.
			     C	;;
			     C	;;   OPERATION:  The user date and system date 
				are compared and the carry
			     C	;;		 flag is updated as specified a
				bove.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	CHECK_DATE_CHANGE	MACRO	VAR_U_YEAR, VAR
				_U_MONTH, VAR_U_DAY, VAR_S_YEAR, VAR_S_MONTH, V
				AR_S_DAY ;;AN000;
			     C		 LOCAL	   EXIT_CHECK_DATE_CHANGE
					;;AN000;
			     C		 MOV  AX, VAR_S_YEAR		
					;;AN000;
			     C		.IF < VAR_U_YEAR  EQ AX >	
					;;AN000;
			     C		      MOV  AX, VAR_S_MONTH	
					;;AN000;
			     C		      .IF < VAR_U_MONTH EQ AX > 
					;;AN000;
			     C			   MOV	AX, VAR_S_DAY	
					;;AN000;
			     C			   .IF < VAR_U_DAY   EQ AX >
					;;AN000;
			     C			       CLC		
					;;AN000;
			     C			       JMP   EXIT_CHECK_DATE_CH
				ANGE ;;AN000;
			     C			   .ENDIF		
					;;AN000;
			     C		      .ENDIF			
					;;AN000;
			     C		 .ENDIF 			
					;;AN000;
			     C		STC				
					;;AN000;
			     C	EXIT_CHECK_DATE_CHANGE: 		
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   SET_FILE_DATE_TIME:  Set a files date and 
				time.
			     C	;;
			     C	;;   SYNTAX:  SET_FILE_DATE_TIME  file_handle, 
				var_hour, var_minutes, var_seconds
			     C	;;				  var_year, var
				_month, var_day
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-55


			     C	;;   INPUT:
			     C	;;	 file_handle = The handle of the file t
				o set the time/date of.
			     C	;;	 var_hour    = 0 - 23		
					 ( 16 bits )
			     C	;;	 var_minutes = 0 - 59		
					 ( 16 bits )
			     C	;;	 var_seconds = 0 - 59		
					 ( 16 bits )
			     C	;;	 var_year    = 1980 - 2099	
					 ( 16 bits )
			     C	;;	 var_month   = 1 - 12		
					 ( 16 bits )
			     C	;;	 var_day     = 1 - 31		
					 ( 16 bits )
			     C	;;
			     C	;;   OUTPUTS:
			     C	;;	 CY = 0: Success
			     C	;;	 CY = 1: Error - Date/Time format is in
				valid
			     C	;;
			     C	;;   OPERATION:  The data and time values are c
				onverted to internal formats
			     C	;;	 defined below and DOS function call 57
				h is performed to set the
			     C	;;	 files date and time.
			     C	;;
			     C	;;
			     C	;;	 The internal time format is:
			     C	;;		 bits	 15 14 13 12 11 10 09 0
				8 07 06 05 04 03 02 01 00
			     C	;;			 h  h  h  h  h	m  m  m
				  m  m  m  x  x	x  x  x
			     C	;;
			     C	;;		 h - Binary number of hours   (
				 0 - 23 )
			     C	;;		 m - Binary number of minutes (
				 0 - 59 )
			     C	;;		 x - Binary number of two secon
				d increments
			     C	;;
			     C	;;	 The internal date format is:
			     C	;;		 bits	 15 14 13 12 11 10 09 0
				8 07 06 05 04 03 02 01 00
			     C	;;			 y  y  y  y  y	y  y  m
				  m  m  m  d  d	d  d  d
			     C	;;
			     C	;;		 y - 0 - 119 ( 1980 - 2099 )
			     C	;;		 m - 1 - 31
			     C	;;		 d - 1 - 31
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	SET_FILE_DATE_TIME	MACRO	FILE_HANDLE, VA
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-56


				R_HOUR, VAR_MINUTES, VAR_SECONDS, VAR_YEAR, VAR
				_MONTH, VAR_DAY ;;AN000;
			     C	    CALL HOOK_INT_24			
					;;AN000;
			     C		;;
			     C		;; Handle the file's time first
			     C		;;
			     C		MOV	BX, VAR_SECONDS 	;;AN000
				; Get the number of seconds
			     C		SHR	BX, 1			;;AN000
				; Need the number of 2 seconds
			     C		MOV	AX, VAR_MINUTES 	;;AN000
				; Get the number of minutes
			     C		MOV	CL, 5			;;AN000
				;
			     C		SHL	AX, CL			;;AN000
				; Least significant bit #5
			     C		OR	BX, AX			;;AN000
				;
			     C		MOV	AX, VAR_HOUR		;;AN000
				; Get the number of hours
			     C		XCHG	AH, AL			;;AN000
				;
			     C		MOV	CL, 3			;;AN000
				;
			     C		SHL	AX, CL			;;AN000
				; Put hours at bit #11
			     C		OR	BX, AX			;;AN000
				;
			     C		;;
			     C		;; Handle the file's date now
			     C		;;
			     C		MOV	DX, VAR_DAY		;;AN000
				; Get the day.
			     C		MOV	AX, VAR_MONTH		;;AN000
				;
			     C		MOV	CL, 5			;;AN000
				;
			     C		SHL	AX, CL			;;AN000
				; Least significant month bit #5
			     C		OR	DX, AX			;;AN000
				;
			     C		MOV	AX, VAR_YEAR		;;AN000
				; Get the year (1980 - 2099)
			     C		SUB	AX, 1980		;;AN000
				; Put in the range 0 - 119
			     C		XCHG	AL, AH			;;AN000
				;
			     C		SHL	AX, 1			;;AN000
				;
			     C		OR	DX, AX			;;AN000
				;
			     C	
			     C		MOV	CX, BX			;;AN000
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-57


				;
			     C		MOV	BX, FILE_HANDLE 	;;AN000
				;
			     C		MOV	AX, 5701H		;;AN000
				;
			     C		DOSCALL 			;;AN000
				;
			     C		CALL  RESTORE_INT_24		;;AN000
				;
			     C	
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   CHECK_CLOCK:  Check if the real time clock
				 is operating.
			     C	;;
			     C	;;   SYNTAX:  CHECK_CLOCK
			     C	;;
			     C	;;   INPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 CY = 0: Real time clock is operating
			     C	;;	 CY = 1: Real time clock is not operati
				ng
			     C	;;
			     C	;;   OPERATION:  A call to the real time clock 
				services (INT 1Ah, AH = 02h)
			     C	;;	 is performed to get the real time cloc
				k.  If the clock is operating,
			     C	;;	 the time is returned in the registers 
				and CF = 0 is returned. If the
			     C	;;	 clock is not operating, CF = 1 is retu
				rned.
			     C	;;
			     C	;;	 Since the older machines may not have 
				the clock services interrupt,
			     C	;;	 the registers are set to zero before t
				he call is made and checked for
			     C	;;	 non-zero on return.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	CHECK_CLOCK	MACRO		;;AN000;
			     C		MOV	CX, 0		;;AN000; Zero t
				he registers for later comparison
			     C		MOV	DX, 0		;;AN000;
			     C		MOV	AH, 02		;;AN000;
			     C		INT	1AH		;;AN000; Time o
				f day service routine
			     C		.IF < ZERO CX > AND	;;AN000; If CX 
				and DH are zero, clock is not there.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-58


			     C		.IF < ZERO DH > 	;;AN000;
			     C		   STC			;;AN000;
			     C		.ELSE			;;AN000;
			     C		   CLC			;;AN000; The cl
				ock is there!
			     C		.ENDIF			;;AN000;
			     C	
			     C		ENDM			;;AN000;
			     C	INCLUDE  MACROS5.INC		;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;     Assembler MACROS for use with SELECT.
			     C	;;     File: MACROS5.INC
			     C	;;     Latest Change Date: July 28, 1987
			     C	;;
			     C	;; These macros define powerful assembler verbs
				 neccessary for SELECT.
			     C	;;
			     C	;; Note: Many of the macros make use of an ASCI
				I-N string for passing
			     C	;;	 parameters.  The string is defined bel
				ow.
			     C	;;		   DW  count
			     C	;;		   DB  "string_variable",?
			     C	;;
			     C	;;	 COUNT is the length of the string and 
				is a word.
			     C	;;	 It is necessary to follow the string w
				ith at least one byte for the
			     C	;;	 purpose of changing the ASCII-N string
				 to an ASCII-Z string.
			     C	;;
			     C	;;*********************************************
				*******************************
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-59


			     C	page					;;AN000
				;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   GET_COUNTRY_DEFAULTS: Get country, keyboar
				d and codepage for the
			     C	;;		 specified entry from the CTY_T
				ABLE.
			     C	;;
			     C	;;   SYNTAX:  GET_COUNTRY_DEFAULTS  VAR_TABLE, 
				VAR_INDEX
			     C	;;
			     C	;;   INPUT:
			     C	;;	 VAR_TABLE = 1: Use CTY_TAB_A
			     C	;;		   = 2: Use CTY_TAB_B
			     C	;;	 VAR_INDEX = index into country list ta
				ble
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 N_COUNTRY    = Country code
			     C	;;	 N_KYBD_VAL   = 0: Keyboard code is not
				 valid
			     C	;;		      = 1: Keyboard code is val
				id
			     C	;;	 S_KEYBOARD   = Keyboard code (ASCII-N 
				format)
			     C	;;	 N_CP_PRI     = Primary code page
			     C	;;	 N_CP_SEC     = Secondary code page
			     C	;;	 N_DESIGNATES = Number of disignates
			     C	;;	 N_CPSW       = Cpsw status
			     C	;;	 N_CTY_RES    = Reserved
			     C	;;
			     C	;;
			     C	;;   OPERATION:  The country code, keyboard, pr
				imary codepage and the
			     C	;;	 seondary codepage from the CTY_TABLE f
				or the specified index is
			     C	;;	 returned as spedified above.
			     C	;;
			     C	;;   Note:  Index of the first item is the tabl
				e is 1.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	GET_COUNTRY_DEFAULTS	MACRO	VAR_TABLE, VAR_
				INDEX ;;AN000;
			     C	
			     C	    MOV  BX, VAR_TABLE			
					 ;;AN000; Get which table to search
			     C	    MOV  AX, VAR_INDEX			
					 ;;AN000; Get where to start in the tab
				le
			     C	    CALL GET_CNTY_DEF_ROUTINE		
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-60


					 ;;AN000;
			     C	    ENDM				
					 ;;AN000;
			     C	
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   GET_DOS_COUNTRY: Get current country infor
				mation.
			     C	;;
			     C	;;   SYNTAX:  GET_DOS_COUNTRY  buffer, var_coun
				try
			     C	;;
			     C	;;   INPUT:
			     C	;;	 BUFFER = 38 byte data buffer area for 
				country information.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 VAR_COUNTRY = Default country code
			     C	;;
			     C	;;   OPERATION:  DOS function call 65h (id=1) i
				s performed to get the extended
			     C	;;	 country information into the specified
				 data buffer for the default
			     C	;;	 and the active CON device.  The countr
				y code value from the data buffer
			     C	;;	 is returned in the memory variable spe
				cified.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	GET_DOS_COUNTRY  MACRO	BUFFER, VAR_COUNTRY
					 ;;AN000;
			     C	
			     C	
			     C		PUSH	ES			
					 ;;AN000;
			     C		PUSH	DS			
					 ;;AN000;
			     C		POP	ES			
					 ;;AN000;
			     C	
			     C		MOV	DI, OFFSET BUFFER	
					 ;;AN000; Get the address of the buffer
			     C		MOV	AX, 6501H		
					 ;;AN000; Fn call 65h with ID value = 1
			     C		MOV	BX, -1			
					 ;;AN000; Code page of interest (curren
				t)
			     C		MOV	DX, -1			
					 ;;AN000; Get information for default c
				ountry
			     C		MOV	CX, 38			
					 ;;AN000; Amount of data to return
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-61


			     C		DOSCALL 			
					 ;;AN000;
			     C	
			     C		MOV	BX, [DI]+3		
					 ;;AN000; Get the country ID
			     C		MOV	VAR_COUNTRY, BX 	
					 ;;AN000;
			     C	
			     C		POP	ES			
					 ;;AN000;
			     C	
			     C		ENDM				
					 ;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   GET_COUNTRY_INDEX: Scan CTY_TABLE for the 
				specified country code and
			     C	;;			 return index of countr
				y code into the table.
			     C	;;
			     C	;;   SYNTAX:  GET_COUNTRY_INDEX  var_country, v
				ar_tab, var_index
			     C	;;
			     C	;;   INPUT:
			     C	;;	 var_country = The country code
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 var_tab = 1: Country code is in table 
				CTY_TAB_A
			     C	;;		 = 2: Country code is in table 
				CTY_TAB_B
			     C	;;	 var_index = The index into the country
				 list.
			     C	;;
			     C	;;   OPERATION:  The CTY_TABLE is scanned for t
				he specified country code and
			     C	;;	 the index into the table is returned.
			     C	;;
			     C	;;   Note:  The index of the first item in the 
				table is 1.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	GET_COUNTRY_INDEX	MACRO	VAR_COUNTRY, VA
				R_TAB, VAR_INDEX  ;;AN000;
			     C	
			     C	    MOV  CX, VAR_COUNTRY		
					 ;;AN000; Get the country index
			     C	    CALL GET_CNTY_INDEX_ROUTINE 	
					 ;;AN000; Search the table for this val
				ue
			     C	    MOV  VAR_TAB, DX			
					 ;;AN000; Which table it was found in
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-62


			     C	    MOV  VAR_INDEX, BX			
					 ;;AN000; Which location in that table
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   GET_KEYBOARD_INDEX: Scan KYBD_TABLE for th
				e specified keyboard code and
			     C	;;			 return index of keyboa
				rd code in the table and the
			     C	;;			 alternate keyboard ind
				icator.
			     C	;;
			     C	;;   SYNTAX:  GET_KEYBOARD_INDEX  name_kybd, va
				r_table, var_index, var_alt
			     C	;;
			     C	;;   INPUT:
			     C	;;	 name_kybd = The keyboard code in ASCII
				-N format.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 var_table = 1: Keyboard is IN table KY
				BD_TAB_A
			     C	;;		   = 2: Keyboard is in table KY
				BD_TAB_B
			     C	;;	 var_index = The index into keyboard ta
				ble.
			     C	;;	 var_alt   = 0: No alternate keyboard
			     C	;;		   = 1: Alternate keyboard pres
				ent
			     C	;;
			     C	;;   OPERATION:  The KYBD_TABLE is scanned for 
				the specifies keyboard code and
			     C	;;	 the index into the table is returned.
			     C	;;
			     C	;;   Note:  The index of the first item in the 
				table is 1.
			     C	;;
			     C	;;*********************************************
				***************************
			     C	GET_KEYBOARD_INDEX	MACRO	NAME_KYBD, VAR_
				TABLE, VAR_INDEX, VAR_ALT ;;AN000;
			     C	
			     C	    MOV  DI, OFFSET NAME_KYBD		
					 ;;AN000; The name of the keyboard to s
				earch for
			     C	    CALL GET_KYBD_INDEX_ROUTINE 	
					 ;;AN000; Search for this keyboard code
			     C	    MOV  VAR_TABLE, DX			
					 ;;AN000; Which table the code was foun
				d in
			     C	    MOV  VAR_INDEX, BX			
					 ;;AN000; Which index in the table
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-63


			     C	    MOV  VAR_ALT, AL			
					 ;;AN000; Returned alternate keyboard b
				yte
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   GET_KEYBOARD: Get the keyboard code and th
				e alternate keyboard
			     C	;;	 indicator from the KYBD_TABLE for the 
				item specified by the index
			     C	;;	 into the keyboard table.
			     C	;;
			     C	;;   SYNTAX:  GET_KEYBOARD  var_table, var_inde
				x, name_kybd, var_alt
			     C	;;
			     C	;;   INPUT:
			     C	;;	 var_table = 1: Keyboard code is in tab
				le KYBD_TAB_A
			     C	;;		   = 2: Keyboard code is is tab
				le KYBD_TAB_B
			     C	;;	 var_index  = index into the keyboard t
				able.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 name_kybd = keyboard code in ASCII-N f
				ormat.
			     C	;;	 var_alt   = 0: No alternate keyboard
			     C	;;		   = 1: Alternate keyboard pres
				ent
			     C	;;
			     C	;;   OPERATION:  The keyboard code from the KYB
				D_TABLE for the specified
			     C	;;	 index item is returned.  Also, the alt
				ernate keyboard present
			     C	;;	 variable is updated.
			     C	;;
			     C	;;   Note: Index of the first item in the table
				 is 1.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	GET_KEYBOARD	MACRO	VAR_TABLE, VAR_INDEX, N
				AME_KYBD, VAR_ALT  ;;AN000;
			     C	
			     C	    MOV  AX, VAR_INDEX			
					 ;;AN000; Where to start the search
			     C	    MOV  CX, VAR_TABLE			
					 ;;AN000; Which table to search
			     C	    MOV  DI, OFFSET NAME_KYBD		
					 ;;AN000; The name of the keyboard code
				 returned
			     C	    CALL GET_KYBD_ROUTINE		
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-64


					 ;;AN000;
			     C	    MOV  VAR_ALT, AL			
					 ;;AN000; Returned alternate code
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   GET_ALT_KYBD_TABLE: Scan the ALT_KYB_TABLE
				 for the specified keyboard,
			     C	;;	 and return the pointer to the specifie
				d keyboards alternate keyboard
			     C	;;	 code list.
			     C	;;
			     C	;;   SYNTAX:  GET_ALT_KYBD_TABLE  name_kybd, va
				r_table, var_kyb
			     C	;;
			     C	;;   INPUT:
			     C	;;	 name_kybd  = Keyboard code in ASCII-N 
				format.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 var_table = Pointer to alternat keyboa
				rds list.
			     C	;;	 var_kyb   = 1: French
			     C	;;		   = 2: Italian
			     C	;;		   = 3: UK English
			     C	;;
			     C	;;   OPERATION:  The ALT_KYB_TABLE is scanned f
				or the specified keyboard
			     C	;;	 code.	Pointer to a table of alternate
				 keyboards available for the
			     C	;;	 specified keyboard code is returned as
				 well as the keyboard identifier.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	GET_ALT_KYBD_TABLE	MACRO	NAME_KYBD, VAR_
				TABLE, VAR_KYB ;;AN000;
			     C						
					 ;;
			     C	    MOV  SI, OFFSET ALT_KYB_TAB_1	
					 ;;AN000; Offset of the data in the tab
				le
			     C	    MOV  AL, ALT_KYB_TABLE		
					 ;;AN000; Number of entries in the tabl
				e
			     C	    MOV  BX, 1				
					 ;;AN000; Index currently being scaned
			     C						
					 ;;
			     C	    MOV  DX, NAME_KYBD+2		
					 ;;AN000;
			     C	    .WHILE <<WORD PTR [SI]> NE DX > AND 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-65


					 ;;AN000;
			     C	    .WHILE < BL LE AL > 		
					 ;;AN000;
			     C		 INC  BL			
					 ;;AN000;
			     C		 ADD  SI, TYPE ALT_KYB_DEF	
					 ;;AN000;
			     C	    .ENDWHILE				
					 ;;AN000;
			     C						
					 ;;
			     C	    .IF < BL GT AL >			
					 ;;AN000; Entry NOT found
			     C		 MOV  VAR_KYB, 0		
					 ;;AN000;
			     C		 MOV  VAR_TABLE, 0		
					 ;;AN000; Pointer is 0 since entry not 
				found
			     C	    .ELSE				
					 ;;AN000;
			     C		 COPY_WORD   VAR_TABLE, [SI]+2	
					 ;;AN000; Copy the table entries
			     C		 COPY_BYTE   VAR_KYB, [SI]+4	
					 ;;AN000;
			     C	    .ENDIF				
					 ;;AN000;
			     C						
					 ;;
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   GET_ALT_KEYBOARD: Get the alternate keyboa
				rd code from the specified
			     C	;;	 alternate keyboard table for the item 
				specified by the index.
			     C	;;
			     C	;;   SYNTAX:  GET_ALT_KEYBOARD	var_table, var_
				kyb, var_index, name_kybd
			     C	;;
			     C	;;   INPUT:
			     C	;;	 var_table  = Pointer to alternate keyb
				oard table
			     C	;;	 var_kyb    = 1: French
			     C	;;		    = 2: Italian
			     C	;;		    = 3: UK English
			     C	;;	 var_index  = Index into the keyboard t
				able.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 name_kybd = The keyboard code in ASCII
				-N format.
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-66


			     C	;;   OPERATION:  The keyboard code from the spe
				cified table for the
			     C	;;	 specified index item is returned.
			     C	;;
			     C	;;   NOTE:  The index of the first item is the 
				table is 1.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	GET_ALT_KEYBOARD	MACRO	VAR_TABLE, VAR_
				KYB, VAR_INDEX, NAME_KYBD ;;AN000;
			     C	
			     C	    MOV  AX, VAR_INDEX			
					 ;;AN000; Get the table index
			     C	    DEC  AX				
					 ;;AN000; Make the index start at 0
			     C	    MOV  SI, VAR_TABLE			
					 ;;AN000; Pointer to the table
			     C	    INC  SI				
					 ;;AN000; Adjust pointer for table leng
				th byte
			     C	    .IF < VAR_KYB EQ ALT_FRENCH>	
					 ;;AN000;
			     C		 MOV  CX, TYPE FR_STRUC 	
					 ;;AN000;
			     C	    .ELSEIF < VAR_KYB EQ ALT_ITALIAN >	
					 ;;AN000;
			     C		 MOV  CX, TYPE IT_STRUC 	
					 ;;AN000;
			     C	    .ELSE				
					 ;;AN000;
			     C		 MOV  CX, TYPE UK_STRUC 	
					 ;;AN000;
			     C	    .ENDIF				
					 ;;AN000;
			     C	    MUL  CX				
					 ;;AN000;
			     C	    ADD  SI, AX 			
					 ;;AN000; Get the address of the requir
				ed entry
			     C						
					 ;;
			     C	    PUSH ES				
					 ;;AN000;
			     C	    PUSH DS				
					 ;;AN000;
			     C	    POP  ES				
					 ;;AN000;
			     C	    MOV  DI, OFFSET NAME_KYBD		
					 ;;AN000;
			     C	    MOV  CX, LEN_ALT_KYBD_ID		
					 ;;AN000; Number of bytes in the keyboa
				rd code
			     C	    MOV  [DI], CX			
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-67


					 ;;AN000;
			     C	    ADD  DI, 2				
					 ;;AN000;
			     C	    CLD 				
					 ;;AN000;
			     C	    REP  MOVSB				
					 ;;AN000;
			     C	    POP  ES				
					 ;;AN000;
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   EXEC_PROGRAM: Loads another program into m
				emory and begins execution.
			     C	;;
			     C	;;   SYNTAX:  EXEC_PROGRAM  child, name_com, pa
				rm_block, re_dir
			     C	;;
			     C	;;   INPUT:   child	 = Name of the program 
				to execute (ASCII-N format)
			     C	;;	      name_com	 = The command line to 
				be passed to parm_block
			     C	;;	      parm_block = Parameter block for 
				child program.
			     C	;;	      re_dir = 1: Redirect Stdout and S
				tderr to null
			     C	;;		     = 0: Don't redirect output
				.
			     C	;;
			     C	;;   OUTPUT:  CY = 0: Successful
			     C	;;	      CY = 1: Error - AX has the error 
				code.
			     C	;;
			     C	;;   OPERATION:  The command line to be passed 
				to the parameter block is
			     C	;;	 copied to the command buffer specified
				 for the parameter block and
			     C	;;	 a carrage return is appended to the en
				d of the buffer.  (The
			     C	;;	 command line length can be zero.
			     C	;;
			     C	;;	 The segment offsets in the parameter b
				lock are defined and DOS
			     C	;;	 function call 29H is performed to set 
				up the default FCB's.
			     C	;;
			     C	;;	 DOS function call 4Bh is performed to 
				load and execute the
			     C	;;	 specified child program.  The contents
				 of SS and SP are destroyed
			     C	;;	 during the call, so they must be save 
				and restored later.  When the
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-68


			     C	;;	 parent program (SELECT) gets control, 
				all available memory is
			     C	;;	 allocated to it.  It is assumed that m
				emory has been freed (Function
			     C	;;	 call 4Ah - FREE_MEM) before invoking t
				his function.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	EXEC_PROGRAM	MACRO  CHILD, NAME_COM, PARM_BL
				OCK, RE_DIR ;;AN000;
			     C	
			     C	    MOV  AX, OFFSET CHILD		
					 ;;AN000;
			     C	    PUSH AX				
					 ;;AN000;
			     C	    MOV  AX, OFFSET NAME_COM		
					 ;;AN000;
			     C	    PUSH AX				
					 ;;AN000;
			     C	    MOV  AX, OFFSET PARM_BLOCK		
					 ;;AN000;
			     C	    PUSH AX				
					 ;;AN000;
			     C	    MOV  AX, RE_DIR			
					 ;;AN000;
			     C	    PUSH AX				
					 ;;AN000;
			     C	    CALL EXEC_PROGRAM_ROUTINE		
					 ;;AN000;
			     C	    ENDM				
					 ;;AN000;
			     C	;;*********************************************
				********************************
			     C	;;
			     C	;;   FREE_MEM: Free memory by modifying the mem
				ory block
			     C	;;
			     C	;;   SYNTAX:  FREE_MEM	address
			     C	;;
			     C	;;   INPUT:
			     C	;;	 address - The address of the first fre
				e paragraph in memory.
			     C	;;
			     C	;;   OUTPUT: CY = 0, AX=undefined,  successful
			     C	;;	     CY = 1, AX= error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   FREEMEM MODIFIES ALLOCATED MEMORY BLOCKS T
				O
			     C	;;   CONTAIN THE NEW SPECIFIED BLOCK SIZE.
			     C	;;   IT MAKES USE OF DOS INT 21 (AH=4AH).
			     C	;;   IF AN ERROR OCCURS, THE CARRY FLAG IS SET,
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-69


				 AND THE ERROR CODE
			     C	;;   IS RETURNED IN AX.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	FREE_MEM  MACRO  address		
					 ;;AN000;
			     C		PUSH	ES			
					 ;;AN000;
			     C		MOV	AH,62H			
					 ;;AN000;
			     C		DOSCALL 			
					;;AN000; Get the current PSP segment
			     C		MOV	ES,BX			
					;;AN000; Load current PSP segment
			     C		MOV	BX, ADDRESS		
					;;AN000; size of program in paragraphs 
				in bx  reg
			     C	
			     C		MOV	AH,4AH			
					;;AN000; free memory function
			     C		DOSCALL 			
					;;AN000;
			     C		POP	ES			
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   CLEAR_SCREEN: clear the screen to white on
				 blue
			     C	;;
			     C	;;   SYNTAX:  CLEAR_SCREEN
			     C	;;
			     C	;;   INPUT:
			     C	;;	None.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	None.
			     C	;;
			     C	;;   OPERATION: Clears the screen using the BIO
				S function to scroll the
			     C	;;	screen completely.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	CLEAR_SCREEN	MACRO			
					;;AN000;
			     C		MOV	CX,0			;;AN000
				;
			     C		MOV	DX,184Fh		;;AN000
				;  scroll screen from (0,0) tO (24,79)
			     C		MOV	AX,0600h		;;AN000
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-70


				;  AH = 6, Scroll Function
			     C						;;  AL 
				= 0, Clear scroll area
			     C		MOV	BH,01FH 		;;AN000
				;  video I/O interrupt
			     C		INT	10H			;;AN000
				;
			     C		MOV	DX,0			;;AN000
				; RKJ-set cursor posn to top right hand corner
			     C		MOV	BH,0			;;AN000
				; RKJ
			     C		MOV	AH,2			;;AN000
				; RKJ
			     C		INT	10H			;;AN000
				; RKJ
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   CLEAR_SCREEN2: clear the screen to white o
				n black
			     C	;;
			     C	;;   SYNTAX:  CLEAR_SCREEN2
			     C	;;
			     C	;;   INPUT:
			     C	;;	None.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	None.
			     C	;;
			     C	;;   OPERATION: Clears the screen using the BIO
				S function to scroll the
			     C	;;	screen completely.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	CLEAR_SCREEN2	MACRO			;;AN000
				;
			     C		MOV	CX,0			;;AN000
				;
			     C		MOV	DX,184Fh		;;AN000
				;  scroll screen from (0,0) tO (24,79)
			     C		MOV	AX,0600h		;;AN000
				;  AH = 6, Scroll Function
			     C						;;  AL 
				= 0, Clear scroll area
			     C		MOV	BH,7			;;AN000
				;  video I/O interrupt
			     C		INT	10H			;;AN000
				;
			     C		MOV	DX,0			;;AN000
				; RKJ-set cursor posn to top right hand corner
			     C		MOV	BH,0			;;AN000
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-71


				; RKJ
			     C		MOV	AH,2			;;AN000
				; RKJ
			     C		INT	10H			;;AN000
				; RKJ
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   POS_CURSOR: position the cursor to top lef
				t corner of screen
			     C	;;
			     C	;;   SYNTAX:  POS_CURSOR
			     C	;;
			     C	;;   INPUT:
			     C	;;	None.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	None.
			     C	;;
			     C	;;   OPERATION: Homes the cursor using the BIOS
				 function call.
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	POS_CURSOR	MACRO			;;AN085
				; SEH
			     C		PUSH	AX			;;AN085
				; SEH
			     C		PUSH	BX			;;AN085
				; SEH
			     C		PUSH	CX			;;AN085
				; SEH
			     C		PUSH	DX			;;AN085
				; SEH
			     C		PUSH	SI			;;AN085
				; SEH
			     C		PUSH	DI			;;AN085
				; SEH
			     C		PUSH	ES			;;AN085
				; SEH
			     C		MOV	DX,0			;;AN085
				; SEH-set cursor posn to top left hand corner
			     C		XOR	BH,BH			;;AN085
				; SEH
			     C		MOV	AH,2			;;AN085
				; SEH
			     C		INT	10H			;;AN085
				; SEH
			     C		POP	ES			;;AN085
				; SEH
			     C		POP	DI			;;AN085
				; SEH
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-72


			     C		POP	SI			;;AN085
				; SEH
			     C		POP	DX			;;AN085
				; SEH
			     C		POP	CX			;;AN085
				; SEH
			     C		POP	BX			;;AN085
				; SEH
			     C		POP	AX			;;AN085
				; SEH
			     C	ENDM					;;AN085
				; SEH
			     C	;;*********************************************
				*******************************
			     C	;;
			     C	;;   BEEP:    Produce a tone on the PC speaker
			     C	;;
			     C	;;   SYNTAX:  BEEP frequency, duration
			     C	;;
			     C	;;   INPUT:   frequency = 37 to 32767
			     C	;;	      duration	= 1 to 65535
			     C	;;
			     C	;;   OUTPUT:  A SOUND
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   BEEP CREATES A TONE USING THE PC SPEAKER
			     C	;;
			     C	;;*********************************************
				*******************************
			     C	BEEP	MACRO	FREQ,DUR		;;AN000
				;
			     C	
			     C	
			     C		MOV	DI, FREQ		;;AN000
				; set the frequency
			     C		MOV	BX, DUR 		;;AN000
				; set the duration
			     C		CALL	BEEP_ROUTINE		;;AN000
				;
			     C	
			     C		ENDM				;;AN000
				;
			     C	;;*********************************************
				*****************************
			     C	;;
			     C	;;   GOTO : used instead of branching assembler
				 intructions
			     C	;;
			     C	;;   SYNTAX:  GOTO  label
			     C	;;
			     C	;;   INPUT:   label = an assembler label for a 
				branching instruction
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-73


			     C	;;   OUTPUT:  none
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;
			     C	;;*********************************************
				*****************************
			     C	GOTO	MACRO	LABEL			
					;;AN000;
			     C		JMP	LABEL			
					;;AN000; jump to label
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
			     C	;;   BYTE_TO_CHAR:  Convert a 8-bit binary numb
				er to ASCII format.
			     C	;;
			     C	;;   SYNTAX:  BYTE_TO_CHAR  var_num, name_str
			     C	;;
			     C	;;   INPUT:
			     C	;;	 var_num  =  binary number to convert.
					(8 bits)
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 name_str =  ASCII-N string for the spe
				cifed value.
			     C	;;
			     C	;;   OPERATION:  The specified 8 bit numeric va
				riable contents are converted
			     C	;;	 to ASCII and stored in ASCII-N format.
				  Leading zeros will not be
			     C	;;	 stored.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	BYTE_TO_CHAR	 MACRO	 VAR_NUM, NAME_STR
					;;AN000;
			     C	
			     C	
			     C		MOV	AL, VAR_NUM		
					;;AN000;
			     C		MOV	AH, 0			
					;;AN000;
			     C		MOV	DI, OFFSET NAME_STR	
					;;AN000;
			     C		CALL	BIN_TO_CHAR_ROUTINE	
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	;;*********************************************
				***************************;;
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-74


			     C	;;   WORD_TO_CHAR:  Convert a binary number to 
				ASCII format.
			     C	;;
			     C	;;   SYNTAX:  WORD_TO_CHAR  var_num, name_str
			     C	;;
			     C	;;   INPUT:
			     C	;;	 var_num  =  binary number to convert.
					(16 bits)
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 name_str =  ASCII-N string for the spe
				cifed value.
			     C	;;
			     C	;;   OPERATION:  The specified 16 bit numeric v
				ariable contents are converted
			     C	;;	 to ASCII and stored in ASCII-N format.
				  Leading zeros will not be
			     C	;;	 stored.
			     C	;;
			     C	;;*********************************************
				***************************;;
			     C	WORD_TO_CHAR	 MACRO	 VAR_NUM, NAME_STR
					;;AN000;
			     C	
			     C		MOV	AX, VAR_NUM		
					;;AN000;
			     C		MOV	DI, OFFSET NAME_STR	
					;;AN000;
			     C		CALL	BIN_TO_CHAR_ROUTINE	
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	
			     C	INCLUDE  MACROS6.INC			
					;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;     Assembler MACROS for use with SELECT.
									
							  ;;AN000;
			     C	;;     File: MACROS6.INC		
									
							  ;;AN000;
			     C	;;     Latest Change Date: July 27, 1987
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;; These macros define powerful assembler verbs
				 neccessary for SELECT.			
						  ;;AN000;
			     C	;;					
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-75


									
							  ;;AN000;
			     C	;; Note: Many of the macros make use of an ASCI
				I-N string for passing			
						  ;;AN000;
			     C	;;	 parameters.  The string is defined bel
				ow.					
						  ;;AN000;
			     C	;;		   DW  count		
									
							  ;;AN000;
			     C	;;		   DB  "string_variable",?     
				                                               
				            ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	 COUNT is the length of the string and 
				is a word.				
						  ;;AN000;
			     C	;;	 It is necessary to follow the string w
				ith at least one byte for the		
						  ;;AN000;
			     C	;;	 purpose of changing the ASCII-N string
				 to an ASCII-Z string.			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-76


			     C	page					;;AN000
				;					
						  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SCAN_PARAMETERS: Scan SELECT command line 
				for parameters.				
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  SCAN_PARAMETERS	mode	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 PSP command line		
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 mode	  = Install mode	
									
							  ;;AN000;
			     C	;;		  = 0: Parameter is MENU
									
							  ;;AN000;
			     C	;;		  = 1: Parameter is FDISK
									
							  ;;AN000;
			     C	;;		  = 0FFH: Parameter is invalid
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION:  The SELECT command line is sca
				nned for parameters.  The		
						  ;;AN000;
			     C	;;	 return codes for the various parameter
				s are provided in variables		
						  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-77


			     C	;;	 defined above. 		
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;  Note:				
									
							  ;;AN000;
			     C	;;	 Before this macro is executed, there m
				ust be as ASSUME ES:DATA 		
						  ;;AN000;
			     C	;;	 statement.  If not, the parser will no
				t execute properly and			
						  ;;AN000;
			     C	;;	 either the computer will hang or erron
				eous values will be returned.		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	SCAN_PARAMETERS    MACRO     MODE	
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    CALL SCAN_PARAMETERS_ROUTINE	
									
							  ;;AN000;
			     C	    MOV  MODE, AX			
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SCAN_INFO_FILE: Scan SELECT.TMP for parame
				ters.					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  SCAN_INFO_FILE   option_0, option
				_1, option_2, option_3, path, filename, buffer,
				 buff_size		  ;;AC033;SEH add optio
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-78


				n_3 parameter
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 filename  = The name of the file which
				 contains the FDISK parameters.		
						  ;;AN000;
			     C	;;		     (ASCII-N format)	
									
							  ;;AN000;
			     C	;;	 buffer    = A buffer where the data re
				ad from the file can be stored.		
						  ;;AN000;
			     C	;;	 buff_size = The size of the buffer.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 option_1 = 1			
									
							  ;;AC033;
			     C	;;		  = 2			
									
							  ;;AC033;
			     C	;;		  = 3			
									
							  ;;AC033;
			     C	;;		  = 0FFh: Parameter is invalid 
				(not 1, 2, 3)				
						  ;;AC033;
			     C	;;	 option_2 = 1			
									
							  ;;AC033;
			     C	;;		  = 2			
									
							  ;;AC033;
			     C	;;		  = 0FFh: Parameter is invalid 
				(not 1, 2)				
						  ;;AC033;
			     C	;;	 option_3 = 1			
									
							  ;;AC033;
			     C	;;		  = 2			
									
							  ;;AC033;
			     C	;;		  = 0FFh: Parameter is invalid 
				(not 1, 2)				
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-79


						  ;;AC033;
			     C	;;	 path	  = Install path in ASCII-N for
				mat					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;	 If the parameter on the command line i
				s FDISK, then the			
						  ;;AN000;
			     C	;;	 file specified in FILENAME is opened a
				nd additional parameters 		
						  ;;AN000;
			     C	;;	 are read.  If the parameters in the fi
				le are invalid, or if the file		
						  ;;AN000;
			     C	;;	 cannot be found, then 0FFh is returned
				 in MODE and OPTION, and the		
						  ;;AN000;
			     C	;;	 path length is set to zero.	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	SCAN_INFO_FILE	  MACRO     OPTION_0, OPTION_1,
				 OPTION_2, OPTION_3, PATH, FILENAME, BUFFER, BU
				FF_SIZE
			     C						
									
							  ;;AN000;
			     C	    MOV  AX, OFFSET PATH		
									
							  ;;AN000;
			     C	    PUSH AX				
									
							  ;;AN000;
			     C	    MOV  AX, OFFSET FILENAME		
									
							  ;;AN000;
			     C	    PUSH AX				
									
							  ;;AN000;
			     C	    MOV  AX, OFFSET BUFFER		
									
							  ;;AN000;
			     C	    PUSH AX				
									
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-80


							  ;;AN000;
			     C	    MOV  AX, BUFF_SIZE			
									
							  ;;AN000;
			     C	    PUSH AX				
									
							  ;;AN000;
			     C	    CALL SCAN_INFO_FILE_ROUTINE 	
									
							  ;;AN000;
			     C	    mov  option_0, ax
			     C	    MOV  OPTION_1, BX			
									
							  ;;AN000;
			     C	    MOV  OPTION_2, CX			
									
							  ;;AN000;
			     C	    MOV  OPTION_3, DX			
									
							  ;;AN033;SEH return OP
				TION_3, also
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   COPY_FILES:  Copy a list of files from the
				 A diskette to either the B		
						  ;;AN000;
			     C	;;	 or C drive.			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  COPY_FILES target_disk, file_tabl
				e, num_files, path			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 target_disk = 1: Copy the files to the
				 B drive 				
						  ;;AN000;
			     C	;;		     = 2: Copy the files to the
				 C drive 				
						  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-81


			     C	;;					
									
							  ;;AN000;
			     C	;;	 path	     = The path where the files
				 are to be copied if the 		
						  ;;AN000;
			     C	;;		       destination is the hard 
				disk.					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	 file_table  = A table listing the file
				s to copy.  It is of the 		
						  ;;AN000;
			     C	;;		       following format.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;		       db     filename	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	      - The filename must be padded out
				 to 12 characters.			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	 num_files   = The number of files in t
				he list. 				
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 None.				
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION:  The files listed in the table 
				are copied to the destination		
						  ;;AN000;
			     C	;;	      from the A drive.  If the destina
				tion is C, then a path			
						  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-82


			     C	;;	      path can be specified.	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	COPY_FILES    MACRO	DEST, FILE_TABLE, NUM_F
				ILES					
						  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    MOV  AX, DEST			
									
							  ;;AN000;
			     C	    MOV  BX, OFFSET FILE_TABLE		
									
							  ;;AN000;
			     C	    MOV  CX, NUM_FILES			
									
							  ;;AN000;
			     C	    CALL HOOK_INT_24		;AN000;JW
									
							  ;;AN000;JW
			     C	    CALL MOD_XCOPY			
									
							  ;;AN000;
			     C	    CALL  RESTORE_INT_24	;AN000;JW
									
							  ;;AN000;JW
			     C	    ENDM				
									
							  ;;AN000;
			     C						
									
							  ;;AN000;JW
			     C	COPY_FILES2   MACRO	DEST, FILE_TABLE, NUM_F
				ILES, PATH				
						  ;;AN111;JW
			     C						
									
							  ;;AN111;JW
			     C	    MOV  AX, DEST			
									
							  ;;AN111;JW
			     C	    MOV  BX, OFFSET FILE_TABLE		
									
							  ;;AN111;JW
			     C	    MOV  CX, NUM_FILES			
									
							  ;;AN111;JW
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-83


			     C	    MOV  SI, OFFSET PATH		
									
							  ;;AN111;JW
			     C	    CALL HOOK_INT_24		;AN000;JW
									
							  ;;AN111;JW
			     C	    CALL MOD_XCOPY			
									
							  ;;AN111;JW
			     C	    CALL  RESTORE_INT_24	;AN000;JW
									
							  ;;AN111;JW
			     C	    ENDM				
									
							  ;;AN111;JW
			     C						
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INSTALL_FILES: Install the files from the 
				original diskettes to the		
						  ;;AN000;
			     C	;;	 startup and the operations diskette.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  INSTALL_FILES  source_disk, targe
				t_disk					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 source_disk = 1: Read the files from t
				he first diskette			
						  ;;AN000;
			     C	;;		     = 2: Read the files from t
				he second diskette			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	 target_disk = 1: Copy the files to the
				 start-up diskette			
						  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-84


			     C	;;		     = 2: Copy the files to the
				 operations diskette			
						  ;;AN000;
			     C	;;		     = 3: Copy the files to the
				 hard disk				
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 None.				
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	INSTALL_FILES MACRO	SOURCE_DISK, TARGET_DIS
				K					
						  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    COPY_FILES	   SOURCE_DISK, TARGET_DISK, S_
				INSTALL_PATH, DOS_FILES, NUM_DOS_FILES	
						  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   GET_PRINTER_TITLES: Read the printer profi
				le file and load the printer		
						  ;;AN000;
			     C	;;	 names into a table.		
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-85


			     C	;;   SYNTAX:  GET_PRINTER_TITLES   filename
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 filename = A ASCII-N string containing
				 the name of the file containing 	
						  ;;AN000;
			     C	;;		    the printer profile.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;    If CY = 0, No error was encountered.  The
				 following information is returned:	
						  ;;AN000;
			     C	;;	 SEGMENT_LOCATION	= The segment w
				here the printer names table is held ( 16 bit )
						  ;;AN000;
			     C	;;	 NAMES_TABLE_OFFSET	= The offset in
				 the segment of the printer names table ( 16 bi
				t )	  ;;AN000;
			     C	;;	 LONGEST_NAME		= The longest p
				rinter name in the file ( 16 bit )	
						  ;;AN000;
			     C	;;	 SIZE_NAMES_TABLE_ENTRY = The number of
				 bytes between each printer name in the table (
				abs value ) ;;AN000;
			     C	;;	 PRINTER_NAME_INDEX	= The number of
				 names in the table. ( 16 bit )		
						  ;;AN000;
			     C	;;    If CY = 1, An error was encountered.
									
							  ;;AN000;
			     C	;;	 BX - Contains an error number as defin
				ed below.				
						  ;;AN000;
			     C	;;	 AX - Contains the DOS error number if 
				the error listed in BX is a		
						  ;;AN000;
			     C	;;	      file related error.	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-86


			     C	;;	 Error number			    Exp
				laination.				
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	      1 	     There is not enoug
				h memory to build the names		
						  ;;AN000;
			     C	;;			     table and provide 
				a data buffer for reading the		
						  ;;AN000;
			     C	;;			     file information.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	      2 	     There was an error
				 opening the printer profile file.	
						  ;;AN000;
			     C	;;			     AX contains the DO
				S error code.				
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	      3 	     There was an error
				 reading the printer profile file.	
						  ;;AN000;
			     C	;;			     AX contains the DO
				S error code.				
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	      4 	     The number at the 
				beginning of the printer profile 	
						  ;;AN000;
			     C	;;			     giving the number 
				of definitions in the file was		
						  ;;AN000;
			     C	;;			     either missing or 
				was greater then 255.			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	      5 	     A line in the prin
				ter profile file was found to		
						  ;;AN000;
			     C	;;			     be longer then all
				owed in the buffer.			
						  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-87


			     C	;;					
									
							  ;;AN000;
			     C	;;	      6 	     There was an error
				 find a printer name in the file 	
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	      7 	     There was an error
				 updating the file pointer		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	      8 	     There are more the
				n 255 printer definitions in the 	
						  ;;AN000;
			     C	;;			     file.	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	      9 	     The number of actu
				al definitions in the printer profile	
						  ;;AN000;
			     C	;;			     file did not agree
				 with the number given at the		
						  ;;AN000;
			     C	;;			     beginning of the f
				ile.					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	     10 	     There was an error
				 allocating the memory needed for	
						  ;;AN000;
			     C	;;			     the data.	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-88


			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	GET_PRINTER_TITLES MACRO     FILENAME	
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    MOV  DI, OFFSET FILENAME	       ; The na
				me of the printer definition file	
						  ;;AN000;
			     C	    CALL GET_PRINTER_TITLES_ROUTINE    ; Subrou
				tine to perform the function.		
						  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   GET_PRINTER_INFO:	Given the number of a p
				rinter, this routines retrieves		
						  ;;AN000;
			     C	;;	 the information for this printer from 
				the profile file.			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  GET_PRINTER_INFO	 printer_num
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 printer_num = The number the printer t
				o get the information on.		
						  ;;AN000;
			     C	;;		       The number is the locati
				on of this printer in the		
						  ;;AN000;
			     C	;;		       printer names list.
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-89


			     C	;;	 If CY = 0, there were no errors.
									
							  ;;AN000;
			     C	;;	 The following variable are updated wit
				h the information found in		
						  ;;AN000;
			     C	;;	 the file:			
									
							  ;;AN000;
			     C	;;	       I_PRINTER		
									
							  ;;AN000;
			     C	;;	       N_PRINTER_TYPE		
									
							  ;;AN000;
			     C	;;	       S_MODE_PARM		
									
							  ;;AN000;
			     C	;;	       S_CP_DRIVER		
									
							  ;;AN000;
			     C	;;	       S_CP_PREPARE		
									
							  ;;AN000;
			     C	;;	       S_GRAPH_PARM		
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	 If CY = 1, There were errors encounter
				ed.					
						  ;;AN000;
			     C	;;	      BX = An error code indicating the
				 type of error that occured.		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;		 = 3  There was an error readin
				g the file				
						  ;;AN000;
			     C	;;		 = 7  There was a error accessi
				ng the file				
						  ;;AN000;
			     C	;;		 = 11 A printer definition has 
				either a CDP or a CPP			
						  ;;AN000;
			     C	;;			Prefix, but BOTH were n
				ot present.				
						  ;;AN000;
			     C	;;		 = 12 There was an error in the
				 printer definition.			
						  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-90


			     C	;;			- A line was found with
				 an invalid prefix			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;		 If the error was a result of a
				 DOS function, then			
						  ;;AN000;
			     C	;;		 on return, AX will contain the
				 DOS error code. 			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	GET_PRINTER_INFO       MACRO	 VAR_PRT
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    MOV  AX, VAR_PRT			
									
							  ;;AN000;
			     C	    CALL GET_PRINTER_INFO_ROUTINE	
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   RELEASE_PRINTER_INFO: Close the printer pr
				ofile file and free the			
						  ;;AN000;
			     C	;;	 allocated memory.		
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-91


			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  RELEASE_PRINTER_INFO	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 None.				
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 If CY = 0, There were no error encount
				ered.					
						  ;;AN000;
			     C	;;	 If CY = 1, There was an error. 
									
							  ;;AN000;
			     C	;;	     AX = The DOS error code for the de
				allocate memory function 		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: Closes the printer profile file
				 and deallocted memory.			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	RELEASE_PRINTER_INFO	MACRO		
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    CALL RELEASE_PRINTER_INFO_ROUTINE	
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-92


			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   GET_PRINTER_PARAMS: Get parameters for spe
				cified printer.				
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  GET_PRINTER_PARAMS  var_prt, var_
				port, var_status 			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 var_prt  = The printer number. 
									
							  ;;AN000;
			     C	;;	 var_port = The number of the port to r
				etrieve the information on.		
						  ;;AN000;
			     C	;;		    If var_port = 0, the inform
				ation that is returned is		
						  ;;AN000;
			     C	;;		    that which cooresponds to v
				ar_prt.					
						  ;;AN000;
			     C	;;	   var_port = 0 : Get the information o
				n printer number VAR_PRT 		
						  ;;AN000;
			     C	;;		    = 1 : Get the information f
				or the printer attached to LPT1		
						  ;;AN000;
			     C	;;		    = 2 : Get the information f
				or the printer attached to LPT2		
						  ;;AN000;
			     C	;;		    = 3 : Get the information f
				or the printer attached to LPT3		
						  ;;AN000;
			     C	;;		    = 4 : Get the information f
				or the printer attached to COM1		
						  ;;AN000;
			     C	;;		    = 5 : Get the information f
				or the printer attached to COM2		
						  ;;AN000;
			     C	;;		    = 6 : Get the information f
				or the printer attached to COM3		
						  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-93


			     C	;;		    = 7 : Get the information f
				or the printer attached to COM4		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 var_status = 1: Printer information is
				 valid					
						  ;;AN000;
			     C	;;		    = 0: Printer not valid: def
				ault values returned			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: Printer information for the spe
				cified printer is returned.		
						  ;;AN000;
			     C	;;	 If the specified printer is not define
				d, default values will be		
						  ;;AN000;
			     C	;;	 returned.			
									
							  ;;AN000;
			     C	;;	      I_PRINTER      = Index into print
				er list (16 bit variable) : default 1	
						  ;;AN000;
			     C	;;	      N_PRINTER_TYPE = P: Parallel prin
				ter					
						  ;;AN000;
			     C	;;			     = S: Serial printe
				r					
						  ;;AN000;
			     C	;;	      I_PORT	     = Port number
					       (16 bit variable) : default 1
							  ;;AN000;
			     C	;;	      I_REDIRECT     = Redirection port
				 number (16 bit variable) : default 1	
						  ;;AN000;
			     C	;;	      S_MODE_PARM    = Mode parameters
						   - ASCII-N format	
							  ;;AN000;
			     C	;;	      S_CP_DRIVER    = Code page driver
				 parameters - ASCII-N format		
						  ;;AN000;
			     C	;;	      S_CP_PREPARE   = Code prepare par
				ameters	   - ASCII-N format		
						  ;;AN000;
			     C	;;	      S_GRAPH_PARM   = Graphics paramet
				ers	   - ASCII-N format		
						  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-94


			     C	;;					
									
							  ;;AN000;
			     C	;;	 The structures of printer information 
				are searched for the one with		
						  ;;AN000;
			     C	;;	 the same number as specified by VAR_PR
				T.  If found, the information		
						  ;;AN000;
			     C	;;	 in that structure is returned in the v
				ariables listed above.			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	GET_PRINTER_PARAMS MACRO     VAR_PRT, VAR_PORT,
				 VAR_STATUS				
						  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    MOV  AX, VAR_PRT			
									
							  ;;AN000;
			     C	    MOV  BX, VAR_PORT			
									
							  ;;AN000;
			     C	    CALL GET_PRINTER_PARAMS_ROUTINE	
									
							  ;;AN000;
			     C	    MOV  VAR_STATUS, AX 		
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SAVE_PRINTER_PARAMS: Save the printer info
				rmation in the printer structures	
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  SAVE_PRINTER_PARAMS  var_prt
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-95


			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 var_prt = The printer number.	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 None.				
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: Printer information for the spe
				cified printer is stored.		
						  ;;AN000;
			     C	;;	      I_PRINTER      = Index into print
				er list (16 bit variable) : default 1	
						  ;;AN000;
			     C	;;	      N_PRINTER_TYPE = P: Parallel prin
				ter					
						  ;;AN000;
			     C	;;			     = S: Serial printe
				r					
						  ;;AN000;
			     C	;;	      I_PORT	     = Port number
					       (16 bit variable) : default 1
							  ;;AN000;
			     C	;;	      I_REDIRECT     = Redirection port
				 number (16 bit variable) : default 1	
						  ;;AN000;
			     C	;;	      S_MODE_PARM    = Mode parameters
						   - ASCII-N format	
							  ;;AN000;
			     C	;;	      S_CP_DRIVER    = Code page driver
				 parameters - ASCII-N format		
						  ;;AN000;
			     C	;;	      S_CP_PREPARE   = Code prepare par
				ameters	   - ASCII-N format		
						  ;;AN000;
			     C	;;	      S_GRAPH_PARM   = Graphics paramet
				ers	   - ASCII-N format		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-96


			     C	;;	 The information is stored in the struc
				tures according to the type		
						  ;;AN000;
			     C	;;	 and port number of this printer.  The 
				first three structures are for		
						  ;;AN000;
			     C	;;	 LPT1 - LPT3, while the next four are f
				or COM1 - COM2.				
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	SAVE_PRINTER_PARAMS	MACRO	  VAR_PRT
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    MOV  AX, VAR_PRT			
									
							  ;;AN000;
			     C	    CALL SAVE_PRINTER_PARAMS_ROUTINE	
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   CHANGE_AUTOEXEC:  Search for the SELECT co
				mmand in the autoexec.bat and		
						  ;;AN000;
			     C	;;	 change the parameters for that line.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  CHANGE_AUTOEXEC	FILENAME, APPEN
				D_STRING 				
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-97


			     C	;;	 FILENAME = An ASCII-N string containin
				g the name of the file to change.	
						  ;;AN000;
			     C	;;	      Since the string has to be conver
				ted into an ASCII-Z string,		
						  ;;AN000;
			     C	;;	      an extra byte must always be avai
				lable following the string.		
						  ;;AN000;
			     C	;;	 APPEND_STRING = An ASCII-N string cont
				aining the parameters to add to		
						  ;;AN000;
			     C	;;	      the SELECT command.	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 None.				
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	CHANGE_AUTOEXEC    MACRO     FILENAME, APPEND_S
				TRING					
						  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    MOV  DI, OFFSET FILENAME		
									
							  ;;AN000;
			     C	    MOV  SI, OFFSET APPEND_STRING	
									
							  ;;AN000;
			     C	    CALL CHANGE_AUTOEXEC_ROUTINE	
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-98


			     C						
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   LOAD_MESSAGES:  Load the messages and init
				ialize the message retriever.		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  LOAD_MESSAGES		
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 None.				
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 If CY = 1, there was an error loading 
				the messages.				
						  ;;AN000;
			     C	;;	 If CY = 0, there were no errors.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	LOAD_MESSAGES MACRO			
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-99


			     C						
									
							  ;;AN000;
			     C	    CALL SYSLOADMSG			
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   DISPLAY_MESSAGE:  Call the message retriev
				er to display a message. 		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  DISPLAY_MESSAGE	 msg_number
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 msg_number = The number of the message
				 to be displayed. (16 bit value) 	
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 If CY = 1, there was an error displayi
				ng the message.				
						  ;;AN000;
			     C	;;	 If CY = 0, there were no errors.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-100


			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	DISPLAY_MESSAGE    MACRO     MSG_NUMBER 
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    MOV  AX, MSG_NUMBER 		
									
							  ;;AN000;
			     C	    CALL DISPLAY_MESSAGE_ROUTINE	
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   CHECK_DOS_PATH:  Check to see if a path fo
				r the SET PATH command is valid		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  CHECK_DOS_PATH	path_str
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 path_str - An ASCII-N string containin
				g the path to check.			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;    If CY = 0, the path is valid.	
									
							  ;;AN000;
			     C	;;    If CY = 1, The path is NOT valid: 
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-101


			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	CHECK_DOS_PATH	   MACRO     PATH_STR	
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    LEA  SI, PATH_STR			
									
							  ;;AN000;
			     C	    CALL CHECK_DOS_PATH_ROUTINE 	
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   CHECK_PATH:  Check to see if a path is val
				id.					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  CHECK_PATH    path_str, drive, ro
				ot					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 path_str - An ASCII-N string containin
				g the path to check.			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-102


			     C	;;	 drive	  = 0: Drive letter cannot be s
				pecified.  (8 bit or immediate value)	
						  ;;AN000;
			     C	;;		  = 1: Drive letter is optional
				 and can be specified.			
						  ;;AN000;
			     C	;;		  = 2: Drive letter must be spe
				cified.					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;	 root	  = 0: First non-drive characte
				r cannot be a backslash ('\') (8 bit or immedia
				te value)   ;;AN000;
			     C	;;		  = 1: First non-drive characte
				r may be a backslash ('\')                     
				            ;;AN000;
			     C	;;		  = 2: First non-drive characte
				r must be a backslash ('\')                    
				            ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;; OUTPUT:				
									
							  ;;AN000;
			     C	;;    If CY = 0, the path is valid.	
									
							  ;;AN000;
			     C	;;    If CY = 1, The path is NOT valid: 
									
							  ;;AN000;
			     C	;;	   AX = 1, The drive specified is inval
				id.					
						  ;;AN000;
			     C	;;	      = 2, There was no drive specified
				.					
						  ;;AN000;
			     C	;;	      = 3, There was a drive specified.
				 					
						  ;;AN000;
			     C	;;	      = 4, There was a leading backslas
				h					
						  ;;AN000;
			     C	;;	      = 5, The leading backslash was NO
				T present.				
						  ;;AN000;
			     C	;;	      = 6, There was a trailing backsla
				sh.					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-103


			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	CHECK_PATH    MACRO	PATH_STR, DRIVE, ROOT
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    LEA  SI, PATH_STR			
									
							  ;;AN000;
			     C	    MOV  DI, SI 			
									
							  ;;AN000;
			     C	    CALL POS_ZERO			
									
							  ;;AN000;
			     C	    MOV  CX, [SI]			
									
							  ;;AN000;
			     C	    ADD  SI, 2				
									
							  ;;AN000;
			     C	    MOV  AL, DRIVE			
									
							  ;;AN000;
			     C	    MOV  AH, ROOT			
									
							  ;;AN000;
			     C	    CALL CHECK_VALID_PATH		
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   GET_NUMBER_PORTS: Get the number of parall
				el and serial ports attached		
						  ;;AN000;
			     C	;;	      to the computer.		
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-104


			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  GET_NUMBER_PORTS	 parallel, seri
				al					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 None.				
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 parallel = The number of parallel port
				s attached. (8 bit value)		
						  ;;AN000;
			     C	;;	 serial   = The number of serial ports 
				attached. (8 bit value)			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: The macro performs a call to in
				terrupt 11H to determine 		
						  ;;AN000;
			     C	;;	 the number of ports available. 
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	GET_NUMBER_PORTS   MACRO     PARALLEL, SERIAL
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    INT  11H				
					 ;; Determine equipment attached
							  ;;AN000;
			     C	    SHR  AH, 1				
					 ;; Put the number of serial ports in L
				.S. Bits 	  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-105


			     C	    MOV  BH, 0				
									
							  ;;AN000;
			     C	    MOV  BL, AH 			
									
							  ;;AN000;
			     C	    MOV  SERIAL, BX			
									
							  ;;AN000;
			     C	    AND  SERIAL, 0000000000000111B	
					 ;; Mask off the unwanted information
							  ;;AN000;
			     C	    MOV  CL, 5				
					 ;; Number of bits to shift	
							  ;;AN000;
			     C	    SHR  AH, CL 			
					 ;; Put the number of parallel ports in
				 L.S. Bits	  ;;AN000;
			     C	    MOV  BL, AH 			
									
							  ;;AN000;
			     C	    MOV  PARALLEL, BX			
					 ;; Store			
							  ;;AN000;
			     C	    AND  PARALLEL, 0000000000000011B	
					 ;; Mask off the unwanted infromation
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   CHANGE_ATTRIBUTE: Change the attributes on
				 a group of file to be hidden		
						  ;;AN000;
			     C	;;	      files.			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  CHANGE_ATTRIBUTE	  list_ptr, num
				_files					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-106


			     C	;;	 list_ptr = A pointer to a the list of 
				files to change the attributes		
						  ;;AN000;
			     C	;;		    of.  The list must be of th
				e form:					
						  ;;AN000;
			     C	;;			db   filename,?,?
									
							  ;;AN000;
			     C	;;		    Where the filename takes up
				 12 bytes.				
						  ;;AN000;
			     C	;;	 num_file  = The number of files in the
				 list.					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 If CY = 1, there was an error encounte
				red.					
						  ;;AN000;
			     C	;;	 If CY = 0, there were no errors.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: The macro reads the attribute o
				f the file, stores it in the		
						  ;;AN000;
			     C	;;	 word following the filename in the lis
				t, and then assigns the new		
						  ;;AN000;
			     C	;;	 attribute to the file. 	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	CHANGE_ATTRIBUTE   MACRO     LIST_PTR, NUM_FILE
				S					
						  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    LEA  SI, LIST_PTR			
					 ;; Get the address of the file list
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-107


			     C	    MOV  AX, 0				
					 ;; Indicate we are to attach a new att
				ribute to the file ;;AN000;
			     C	    MOV  BX, NUM_FILES			
					 ;; Load the number of files in the lis
				t		  ;;AN000;
			     C	    CALL CHANGE_ATTRIBUTE_ROUTINE	
					 ;; Change the attributes	
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   RESTORE_ATTRIBUTE: Restore the original at
				tributes on a group of file.		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  RESTORE_ATTRIBUTE  list_ptr, num_
				files					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 list_ptr = A pointer to a the list of 
				files to change the attributes		
						  ;;AN000;
			     C	;;		    of.  The list must be of th
				e form:					
						  ;;AN000;
			     C	;;			db   filename,?,?
									
							  ;;AN000;
			     C	;;		    Where the filename takes up
				 12 bytes.				
						  ;;AN000;
			     C	;;	 num_files = The number of files in the
				 list.					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-108


			     C	;;	 If CY = 1, there was an error encounte
				red.					
						  ;;AN000;
			     C	;;	 If CY = 0, there were no errors.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: This macros restores the attrib
				ute previously stored for the		
						  ;;AN000;
			     C	;;	 listed files.			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	RESTORE_ATTRIBUTE   MACRO     LIST_PTR, NUM_FIL
				ES					
						  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    LEA  SI, LIST_PTR			
					 ;; Get the address of the file list
							  ;;AN000;
			     C	    MOV  AX, 1				
					 ;; Indicate we are to attach a new att
				ribute to the file ;;AN000;
			     C	    MOV  BX, NUM_FILES			
					 ;; Load the number of files in the lis
				t		  ;;AN000;
			     C	    CALL CHANGE_ATTRIBUTE_ROUTINE	
					 ;; Change the attributes	
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   COMPARE_STRINGS:  Compare two strings.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-109


			     C	;;   SYNTAX:  COMPARE_STRINGS	string_1, strin
				g_2					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 string_1 = The address of the first st
				ring. (ASCII-N string)			
						  ;;AN000;
			     C	;;	 string_2 = The address of the second s
				tring. (ASCII-N string)			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 If CY = 1, the strings do no compare.
									
							  ;;AN000;
			     C	;;	 If CY = 0, the strings are the same.
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	COMPARE_STRINGS    MACRO     STRING_1, STRING_2
				 					
						  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    LEA  SI, STRING_1			
									
							  ;;AN000;
			     C	    LEA  DI, STRING_2			
									
							  ;;AN000;
			     C	    CALL COMPARE_ROUTINE		
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-110


			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   CHECK_WRITE_PROTECT  Determine if the disk
				ette in drive A/B is write		
						  ;;AC000;JW
			     C	;;			protected.	
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  CHECK_WRITE_PROTECT RET_CODE
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 DRIVE = A_DRIVE (0) Check the diskette
				 in the A drive				
						  ;;AC000;JW
			     C	;;	 DRIVE = B_DRIVE (1) Check the diskette
				 in the B drive				
						  ;;AC000;JW
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 If CY = 1, There was an error accessin
				g the drive.				
						  ;;AN000;
			     C	;;	 If CY = 0, There were no errors.
									
							  ;;AN000;
			     C	;;	 RET_CODE = 1: The diskette IS write pr
				otected. 				
						  ;;AN000;
			     C	;;		  = 0: The diskette is NOT writ
				e protected.				
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-111


			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	CHECK_WRITE_PROTECT	MACRO	  DRIVE, RET_CO
				DE					
						  ;;AC000;JW
			     C	    MOV  CX,DRIVE			
									
							  ;;AN000;JW
			     C	    CALL CHECK_WRITE_ROUTINE		
									
							  ;;AN000;
			     C	    MOV  RET_CODE, AX			
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   GET_FREE_SPACE  Determine the free disk sp
				ace on a diskette.			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  GET_FREE_SPACE   drive, space
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 drive = 1: Examine diskette in drive A
				 					
						  ;;AN000;
			     C	;;	       = 2: Examine diskette in drive B
				 					
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-112


			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 If CY = 1, there was an error accessin
				g the disk				
						  ;;AN000;
			     C	;;	 If CY = 0, there were no errors.
									
							  ;;AN000;
			     C	;;	     space = The amount of free space o
				n the disk (32-bit value)		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	GET_FREE_SPACE	   MACRO     DRIVE, SPACE
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    MOV  DL, DRIVE			
									
							  ;;AN000;
			     C	    MOV  AH, 36H			
									
							  ;;AN000;
			     C	    DOSCALL				
									
							  ;;AN000;
			     C	    .IF < NC >				
									
							  ;;AN000;
			     C		 MUL  BX			
									
							  ;;AN000;
			     C		 MUL  CX			
									
							  ;;AN000;
			     C		 MOV  WORD PTR SPACE[0], AX	
									
							  ;;AN000;
			     C		 MOV  WORD PTR SPACE[2], DX	
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-113


			     C	    .ENDIF				
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   MATCH_DISK_FILES  Determine if a list of f
				ile exist on a disk.			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   SYNTAX:  GET_FREE_SPACE   path, file_list,
				 list_type, num_files, ret_code		
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   INPUT:				
									
							  ;;AN000;
			     C	;;	 path = ASCII-N string containing the d
				rive, and path of where to		
						  ;;AN000;
			     C	;;		search. 		
									
							  ;;AN000;
			     C	;;	 file_list = The address of the list of
				 files to use.  If AX=2, then		
						  ;;AN000;
			     C	;;		     the first two bytes are ig
				nored.					
						  ;;AN000;
			     C	;;	 list_type = 1: Use a small list with 1
				2 byte between filenames.		
						  ;;AN000;
			     C	;;		   = 2: Use a list with 14 byte
				s between filenames.			
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OUTPUT:				
									
							  ;;AN000;
			     C	;;	 If CY = 1, There was an error accessin
				g the disk.				
						  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-114


			     C	;;	 If CY = 0, there were no errors.
									
							  ;;AN000;
			     C	;;	     ret_code = 1: All the files are on
				 the disk.				
						  ;;AN000;
			     C	;;	     ret_code = 0: All the file are NOT
				 on the disk.				
						  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;   OPERATION: 			
									
							  ;;AN000;
			     C	;;					
									
							  ;;AN000;
			     C	;;*********************************************
				*******************************		
						  ;;AN000;
			     C	MATCH_DISK_FILES   MACRO     PATH, FILE_LIST, L
				IST_TYPE, NUM_FILES, RET_CODE		
						  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	    LEA  DI, PATH			
									
							  ;;AN000;
			     C	    LEA  SI, FILE_LIST			
									
							  ;;AN000;
			     C	    MOV  AX, LIST_TYPE			
									
							  ;;AN000;
			     C	    MOV  CX, NUM_FILES			
									
							  ;;AN000;
			     C	    CALL MATCH_FILES_ROUTINE		
									
							  ;;AN000;
			     C	    MOV  RET_CODE, AX			
									
							  ;;AN000;
			     C	    ENDM				
									
							  ;;AN000;
			     C						
									
							  ;;AN000;
			     C	INCLUDE  MACROS7.INC			
									
							  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-115


			     C	PROCESS_ESC MACRO			
					;;AN000;
			     C		.IF < N_USER_FUNC eq E_ESCAPE > 
					;;AN000;
			     C		.THEN				
					;;AN000;
			     C		   POP_HEADING			
					;;AN000;
			     C		.ENDIF				
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C						
					;;AN000;
			     C	PROCESS_F3 MACRO			
					;;AN000;
			     C		.IF < N_USER_FUNC eq E_F3 >	
					;;AN000;
			     C		.THEN				
					;;AN000;
			     C		   GOTO 		EXIT_DOS
					;;AN000;
			     C		.ENDIF				
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	
			     C	INIT_VAR_MINIMIZE MACRO
			     C		INIT_VAR		S_BUFFERS, 0
								;;AN000;set BUF
				FERS = null (spaces)
			     C		INIT_VAR		S_FCBS, 0
								;;AN000;set FCB
				S = null (spaces)
			     C		INIT_VAR		F_ANSI, E_ANSI_
				NO			;;AN000;set ANSI = no
			     C		INIT_VAR		S_ANSI, 0
								;;AN000;set ANS
				I field = null (spaces)
			     C		INIT_VAR		F_FASTOPEN, E_F
				ASTOPEN_NO		;;AN000;set FASTOPEN = 
				no
			     C		INIT_VAR		S_FASTOPEN, 0
								;;AN000;set FAS
				TOPEN = null (spaces)
			     C		INIT_VAR		F_GRAPHICS, E_G
				RAPHICS_NO		;;AN000;set GRAPHICS = 
				no
			     C		INIT_VAR		S_GRAPHICS, 0
								;;AN000;set GRA
				PHICS field = null (spaces)
			     C		COPY_STRING		S_FILES, M_FILE
				S, D_FILES_2		;AN000; set FILES = 8
			     C		ENDM
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-116


			     C	
			     C	INIT_VAR_BALANCE MACRO
			     C		COPY_STRING		S_BUFFERS, M_BU
				FFERS, D_BUFFERS_1	;;AN000;set BUFFERS = 2
				0
			     C		INIT_VAR		S_FCBS, 0
								;;AN000;set FCB
				S = null (spaces)
			     C		INIT_VAR		F_ANSI, E_ANSI_
				YES			;;AN000;set ANSI = yes
			     C		INIT_VAR		S_ANSI, 0
								;;AN000;set ANS
				I field = null (spaces)
			     C		INIT_VAR		F_FASTOPEN, E_F
				ASTOPEN_YES		;;AN000;set FASTOPEN = 
				yes
			     C		COPY_STRING		S_FASTOPEN, M_F
				ASTOPEN, D_FASTOPEN_1	;;AN000;set FASTOPEN = 
				C:=(50,25)
			     C		INIT_VAR		F_GRAPHICS, E_G
				RAPHICS_YES		;;AN000;set GRAPHICS = 
				yes
			     C		INIT_VAR		S_GRAPHICS, 0
								;;AN000;set GRA
				PHICS field = null (spaces)
			     C		COPY_STRING		S_FILES, M_FILE
				S, D_FILES_1		;AN000; set FILES = 20
			     C		ENDM
			     C	
			     C	INIT_VAR_MAXIMIZE MACRO
			     C		COPY_STRING		S_BUFFERS, M_BU
				FFERS, D_BUFFERS_2	;;AN000;set BUFFERS = 5
				0,4
			     C		COPY_STRING		S_FCBS, M_FCBS,
				 D_FCBS_1		;;AN000;set FCBS = 20,8
			     C		INIT_VAR		F_ANSI, E_ANSI_
				YES			;;AN000;set ANSI = yes
			     C		COPY_STRING		S_ANSI, M_ANSI,
				 D_ANSI_1		;;AN000;set ANSI field 
				= /X
			     C		INIT_VAR		F_FASTOPEN, E_F
				ASTOPEN_YES		;;AN000;set FASTOPEN = 
				yes
			     C		COPY_STRING		S_FASTOPEN, M_F
				ASTOPEN, D_FASTOPEN_2	;;AN000;set FASTOPEN = 
				C:(150,150)
			     C		INIT_VAR		F_GRAPHICS, E_G
				RAPHICS_YES		;;AN000;set GRAPHICS = 
				yes
			     C		INIT_VAR		S_GRAPHICS, 0
								;;AN000;set GRA
				PHICS field = null (spaces)
			     C		COPY_STRING		S_FILES, M_FILE
				S, D_FILES_1		;AN000; set FILES = 20
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-117


			     C		ENDM
			     C	
			     C	SAVE_PARAMETERS MACRO		SAV_FILE, RET_C
				ODE		;;AN000;
			     C		PREPARE_FILE		SAV_FILE
							;;AN000;
			     C		WORD_TO_CHAR		F_SHELL, S_STR1
				20_1
			     C		WRITE_LINE		S_STR120_1
			     C		WORD_TO_CHAR		N_FORMAT_MODE, 
				S_STR120_1	;;AN000;
			     C		WRITE_LINE		S_STR120_1
							;;AN000;
			     C		WORD_TO_CHAR		N_DISK_1, S_STR
				120_1		;;AN000;
			     C		WRITE_LINE		S_STR120_1
							;;AN000;
			     C		WORD_TO_CHAR		I_DESTINATION,S
				_STR120_1	;;AN033;SEH  save destination, 
				too
			     C		WRITE_LINE		S_STR120_1
							;;AN033;SEH
			     C		WRITE_LINE		S_INSTALL_PATH
							;;AN000;
			     C		SAVE_FILE		SAV_FILE, RET_C
				ODE		;;AN000;
			     C		ENDM				
							;;AN000;
			     C	
			     C	CREATE_CONFIG  MACRO	CONFIG_FILE, RET_CODE
							;;AN000;
			     C		PREPARE_FILE	CONFIG_FILE	
							;;AN000;
			     C		CALL		CREATE_CONFIG_SYS
							;;AN000;
			     C		SAVE_FILE	CONFIG_FILE, RET_CODE
							;;AN000;
			     C		ENDM				
							;;AN000;
			     C	
			     C	CREATE_AUTOEXEC MACRO	AUTO_FILE, DEST, RET_CO
				DE		;;AN000;
			     C		MOV		N_DEST, DEST	
							;;AN000;
			     C		PREPARE_FILE	AUTO_FILE	
							;;AN000;
			     C		CALL		CREATE_AUTOEXEC_BAT
							;;AN000;
			     C		SAVE_FILE	AUTO_FILE, RET_CODE
							;;AN000;
			     C		ENDM				
							;;AN000;
			     C	
			     C	CREATE_SHELL  MACRO	SHELL_FILE, RET_CODE
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-118


					   ;;AN000;
			     C		PREPARE_FILE	SHELL_FILE	
					   ;;AN000;
			     C		CALL		CREATE_SHELL_BAT
					   ;;AN000;
			     C		SAVE_FILE	SHELL_FILE, RET_CODE
					   ;;AN000;
			     C		ENDM				
					   ;;AN000;
			     C	
			     C	ADD_WORD	MACRO  VAR1, VAR2	
					;;AN000;
			     C		MOV	AX,VAR2 		
					;;AN000;
			     C		ADD	VAR1,AX 		
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	
			     C	CHECK_DISPLAY	MACRO			
					;;AN000;
			     C		CALL	VIDEO_CHECK		
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	
			     C	SAVE_PANEL_LIST MACRO			
					;;AN000;
			     C		MOV	AX,0ADC0H		
					;;AN000;
			     C		MOV	BX,0FFFFH		
					;;AN000;
			     C		INT	2FH			
					;;AN000;
			     C		ENDM				
					;;AN000;
			     C	
			     C	PREP_FOR_ONE	MACRO  CPOS		
					;;AN000;
			     C			MOV	DH,CPOS 	
					;;AN000;
			     C			CALL	DO_PREP_FOR_ONE 
					;;AN000;
			     C			ENDM			
					;;AN000;
			     C	
			     C	HOOK15		MACRO			
					;;AN000;
			     C			CALL	DO_HOOK15	
					;;AN000;
			     C			ENDM			
					;;AN000;
			     C	
			     C	UNHOOK15	MACRO			
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-119


					;;AN000;
			     C			CALL	DO_UNHOOK15	
					;;AN000;
			     C			ENDM			
					;;AN000;
			     C	
			     C	GET_INSTALLED_MEM MACRO MEMORY		
					;;AN000;
			     C			INT  12H		
					;;AN000;
			     C			MOV  MEMORY,AX		
					;;AN000;
			     C			ENDM			
					;;AN000;
			     C	
			     C	HOOK_2F_FORMAT	MACRO			
					;;AN000;
			     C			CALL	HOOK_INT_2F_FORMAT
					;;AN000;
			     C			ENDM			
					;;AN000;
			     C	
			     C	UNHOOK_2F	MACRO			
					;;AN000;
			     C			CALL	RESTORE_INT_2F	
					;;AN000;
			     C			ENDM			
					;;AN000;
			     C	
			     C	INCLUDE MACROS8.INC			
					;AN000;
			     C	;DSKCPY_ERR	DB	  0
 = 0001                      C	DSKCPY_EXIT	EQU	  1	  ;AN000;DT use
				r chose to exit diskcopy
			     C	
			     C	;DSKCPY_WHICH	DB
 = 0000                      C	DSKCPY_TO_A_720 EQU	  0	  ;AN000;DT
 = 0001                      C	DSKCPY_TO_A_360 EQU	  1	  ;AN000;DT
 = 0002                      C	DSKCPY_TO_B	EQU	  2	  ;AN000;DT
			     C	
			     C	;DSKCPY_OPTION	DB
 = 0000                      C	SOURCE1 	EQU	 0	  ;AN000;DT
 = 0001                      C	NO_SOURCE1	EQU	 1	  ;AN000;DT
			     C	
 = 0000                      C	NOCHECK 	EQU	  0
			     C	DISKCOPY_TO	MACRO	 WHERE,HOW,CHECK
					     ;;AN000;
			     C			MOV  DSKCPY_WHICH,WHERE 
					     ;;AN000;
			     C			MOV  DSKCPY_OPTION,HOW	
					     ;;AN000;
			     C			LEA  AX,CHECK		
					     ;;AN000;
			     C			MOV  DSKCPY_SOURCE,AX	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-120


					     ;;AN000;
			     C			ENDM			
					     ;;AN000;
			     C	
 = 0000                      C	NOPANEL 	EQU	  0		
					     ;;AN000;
			     C	DISKCOPY_PANELS MACRO	 PANEL1, PANEL2, PANEL3
				      ;;AN000;
			     C			MOV	 DSKCPY_PAN1,PANEL1
					     ;;AN000;
			     C			MOV	 DSKCPY_PAN2,PANEL2
					     ;;AN000;
			     C			MOV	 DSKCPY_PAN3,PANEL3
					     ;;AN000;
			     C			ENDM			
					     ;;AN000;
			     C	
			     C	INSERT_DISK	MACRO	 DSK_PANEL, SRCH_FILE
					     ;;AN000;
			     C			MOV	 DISK_PANEL, DSK_PANEL
					     ;;AN000;
			     C			LEA	 DI,SRCH_FILE	
					     ;;AN000;
			     C			MOV	 SEARCH_FILE, DI
					     ;;AN000;
			     C			CALL	 INSERT_DISK_ROUTINE
					     ;;AN000;
			     C			ENDM			
					     ;;AN000;
			     C	
			     C	HANDLE_FORMAT_ERROR MACRO		
					     ;;AN000;
			     C			LOCAL	FORERR1,FORERR2,FORERR3
				      ;;AN000;
			     C			CMP	SUB_ERROR,6	
					     ;;AN000;
			     C			JNE	FORERR1 	
					     ;;AN000;
			     C			MOV	AX,PAN_DRIVE_ERROR
					     ;;AN000;
			     C			JMP	FORERR3 	
					     ;;AN000;
			     C	FORERR1:	CMP	SUB_ERROR,7	
					     ;;AN000;
			     C			JNE	FORERR2 	
					     ;;AN000;
			     C			MOV	AX,PAN_WRITE_PROT
					     ;;AN000;
			     C			JMP	FORERR3 	
					     ;;AN000;
			     C	FORERR2:	MOV	AX,ERR_GENERAL	
					     ;;AN000;
			     C	FORERR3:	HANDLE_ERROR AX,E_RETURN
					     ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-121


			     C			ENDM			
					     ;;AN000;
			     C	
			     C	
			     C	
					INCLUDE    PANEL.MAC		;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PANEL.MAC
			     C	;
			     C	;	This file contains the MACROS defined f
				or the
			     C	;	screen management and a number of other
				 macros
			     C	;	identified with CAS services.
			     C	;
			     C	;	This file is included with the control 
				flow files
			     C	;	for the creation of SELECT.EXE!
			     C	;
			     C	; DATE:   July 3, 1987
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  PREPARE_CHILDREN
			     C	;
			     C	;	This routine takes the Child panels ass
				ociated with the
			     C	;	QM_ACTIVEPAN and adds them to the displ
				ay queue - pushed
			     C	;	on as Children.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	PREPARE_CHILDREN MACRO			;;AN000
				;
			     C		CALL	HANDLE_CHILDREN 	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  INIT_PQUEUE
			     C	;
			     C	;	This flushes both the Parent/Child queu
				es, clears the
			     C	;	refresh field table, initializes the re
				fresh field to
			     C	;	the new Parent panel (with 0 entries), 
				and sets the break
			     C	;	ON for the parent panel.  Also it pushe
				s the parent onto
			     C	;	the display queue.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-122


			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INIT_PQUEUE	MACRO	panel		;;AN000
				;
			     C		MOV	AX,panel		;;AN000
				;
			     C		CALL	INIT_PQUEUE_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  PREPARE_PANEL
			     C	;
			     C	;	This will put the specified panel into 
				the Parent queue
			     C	;	for display.  The QM_OPT2 is already se
				t to break OFF.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	PREPARE_PANEL	MACRO	panel		;;AN000
				;
			     C		MOV	AX,panel		;;AN000
				;
			     C		CALL	PREPARE_PANEL_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  DISPLAY_PANEL
			     C	;
			     C	;	Display panel causes the Parent/Childre
				n on the display
			     C	;	queues to be displayed on the screen.  
				If there are any
			     C	;	entries in the entry field table, then 
				the break ON is set
			     C	;	to automatically display these panels.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	DISPLAY_PANEL	MACRO			;;AN000
				;
			     C		CALL	DISPLAY_PANEL_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  DEALLOCATE_MEMORY
			     C	;
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	DEALLOCATE_MEMORY  MACRO		;;AN000
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-123


				;
			     C		CALL	DEALLOCATE_MEMORY_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  ALLOCATE_MEMORY
			     C	;
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	ALLOCATE_MEMORY MACRO			;;AN000
				;
			     C		CALL	ALLOCATE_MEMORY_CALL	;;AN000
				;allocate segment
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  GET_SCROLL
			     C	;
			     C	;	The scroll field becomes the active fie
				ld assuming a default
			     C	;	colour index, and the cursor keys becom
				e active.  The only
			     C	;	keys valid for return are specified in 
				the 'fkeys' list.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	GET_SCROLL   MACRO input,index,f_keys	;;AN000
				;
			     C		MOV	AX,input		;;AN000
				;
			     C		MOV	BX,index		;;AN000
				;
			     C		MOV	CX,f_keys&_LEN		;;AN000
				;
			     C		LEA	DX,f_keys		;;AN000
				;
			     C		CALL	EXEC_SCROLL_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  INIT_SCROLL
			     C	;
			     C	;	Sets up the scroll field with the speci
				fied index onto the
			     C	;	refresh field table.  The colour index 
				table is set to a
			     C	;	different colour to indicate that it is
				 not the active field.
			     C	;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-124


			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INIT_SCROLL  MACRO input,index		;;AN000
				;
			     C		MOV	AX,input		;;AN000
				;
			     C		MOV	BX,index		;;AN000
				;
			     C		CALL	INIT_SCROLL_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  INIT_SCROLL_W_LIST
			     C	;
			     C	;	Sets up the scroll field with the speci
				fied index onto the
			     C	;	refresh field table.  The colour index 
				table is set to a
			     C	;	different colour to indicate that it is
				 not the active field.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INIT_SCROLL_W_LIST  MACRO input,list_seg,list_o
				ff,num_ele,max_width,max_title,index ;;AN000;
			     C		MOV	AX,input		;;AN000
				;
			     C		MOV	BX,max_title		;;AN000
				;
			     C		MOV	CX,num_ele		;;AN000
				;
			     C		MOV	DX,max_width		;;AN000
				;
			     C		MOV	SI,list_seg		;;AN000
				;
			     C		MOV	DI,list_off		;;AN000
				;
			     C		CALL	INIT_SCROLL_W_LIST_CALL ;;AN000
				;
			     C		MOV	AX,input		;;AN000
				;
			     C		MOV	BX,index		;;AN000
				;
			     C		CALL	INIT_SCROLL_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  INIT_SCROLL_W_NUM
			     C	;
			     C	;	Sets up the scroll field with the speci
				fied index onto the
			     C	;	refresh field table.  The colour index 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-125


				table is set to a
			     C	;	different colour to indicate that it is
				 not the active field.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INIT_SCROLL_W_NUM   MACRO input,num_ele,index ;
				;AN000;
			     C		MOV	AX,input		;;AN000
				;
			     C		MOV	CX,num_ele		;;AN000
				;
			     C		CALL	INIT_SCROLL_W_NUM_CALL	;;AN000
				;
			     C		MOV	AX,input		;;AN000
				;
			     C		MOV	BX,index		;;AN000
				;
			     C		CALL	INIT_SCROLL_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  INIT_SCROLL_COLOUR
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INIT_SCROLL_COLOUR  MACRO input,colour	;;AN000
				;
			     C		MOV	BX,input		;;AN000
				;get PCSLCTP field
			     C		MOV	AX,colour		;;AN000
				;
			     C		CALL	SET_SCROLL_COLOUR	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  SET_SCROLL
			     C	;
			     C	;	The SET_SCROLL will set a scroll field 
				specified to the required
			     C	;	index in a different colour index to in
				dicate it is NOT the
			     C	;	active field.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	SET_SCROLL   MACRO input,index		;;AN000
				;
			     C		MOV	AX,input		;;AN000
				;
			     C		MOV	BX,index		;;AN000
				;
			     C		CALL	SET_SCROLL_CALL 	;;AN000
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-126


				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  GET_FUNCTION
			     C	;
			     C	;	This routine is used to process screens
				 with NO scroll fields
			     C	;	or input fields.  The valid keys are sp
				ecified in the 'fkeys'
			     C	;	list.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	GET_FUNCTION	MACRO	fkeys		;;AN000
				;
			     C		MOV	CX,fkeys&_LEN		;;AN000
				;
			     C		LEA	DX,fkeys		;;AN000
				;
			     C		CALL	GET_FUNCTION_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  INIT_STRING
			     C	;
			     C	;	INIT_STRING is used to add the input en
				try field onto the
			     C	;	refresh field table.  Unlike the scroll
				 fields, the colour
			     C	;	index is maintained for the input field
				.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INIT_STRING  MACRO   input,string,max_string ;;
				AN000;
			     C		MOV	AX,input		;;AN000
				;
			     C		LEA	BX,string		;;AN000
				;
			     C		MOV	SI,max_string		;;AN000
				;
			     C		CALL	INIT_STRING_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  SET_STRING
			     C	;
			     C	;	This set an input field (already contai
				ned in the refresh
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-127


			     C	;	field table) on the logical buffer to t
				he defined string.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	SET_STRING   MACRO   input,string,max_string ;;
				AN000;
			     C		MOV	AX,input		;;AN000
				;
			     C		LEA	BX,string		;;AN000
				;
			     C		MOV	SI,max_string		;;AN000
				;
			     C		CALL	SET_STRING_CALL 	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  GET_STRING
			     C	;
			     C	;	Causes the input field specified to bec
				ome the active input
			     C	;	field.	The keys that will exit this in
				put field are defined
			     C	;	in the 'fkeys' list.  The other charact
				ers valid for this
			     C	;	input field are contained in the ICB.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	GET_STRING  MACRO   input,string,max_string,fke
				ys ;;AN000;
			     C		MOV	AX,input		;;AN000
				;
			     C		LEA	BX,string		;;AN000
				;
			     C		MOV	CX,fkeys&_LEN		;;AN000
				;
			     C		LEA	DX,fkeys		;;AN000
				;
			     C		MOV	SI,max_string		;;AN000
				;
			     C		CALL	GET_STRING_CALL 	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  GET_NUMERIC
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	GET_NUMERIC MACRO   input,value,minimum,maximum
				,fkeys,string ;;AN000;
			     C		LOCAL	GN_0			;;AN000
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-128


			     C		LOCAL	GN_1			;;AN000
				;
			     C		MOV	AX,maximum		;;AN000
				;
			     C		LEA	BX,P_USER_STRING	;;AN000
				;
			     C		CALL	CONVERT_ASCII		;;AN000
				;
			     C		MOV	SI,AX			;;AN000
				;
			     C						;;
			     C		MOV	AX,value		;;AN000
				;
			     C	GN_0:	LEA	BX,string+2		;;AN000
				;
			     C		CALL	CONVERT_ASCII		;;AN000
				;
			     C		MOV	string,AX		;;AN000
				;
			     C						;;
			     C		LEA	BX,string		;;AN000
				;
			     C		MOV	AX,input		;;AN000
				;
			     C		MOV	CX,fkeys&_LEN		;;AN000
				;
			     C		LEA	DX,fkeys		;;AN000
				;
			     C		CALL	GET_STRING_CALL 	;;AN000
				;
			     C						;;
			     C		LEA	BX,P_USER_STRING	;;AN000
				;
			     C		MOV	CX,S_USER_STRING	;;AN000
				;
			     C		CALL	CONVERT_NUMERIC 	;;AN000
				;
			     C						;;
			     C		CMP	N_USER_FUNC,ESCAPE	;;AN000
				;
			     C		JE	GN_1			;;AN000
				;
			     C						;;
			     C		MOV	BX,minimum		;;AN000
				;
			     C		MOV	CX,maximum		;;AN000
				;
			     C		CALL	CHECK_MIN_MAX		;;AN000
				;
			     C		JC	GN_0			;;AN000
				;
			     C						;;
			     C	GN_1:	MOV	N_USER_NUMERIC,AX	;;AN000
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-129


			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  INIT_NUMERIC
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INIT_NUMERIC MACRO   input,value,maximum,string
				 ;;AN000;
			     C		MOV	AX,maximum		;;AN000
				;
			     C		LEA	BX,P_USER_STRING	;;AN000
				;
			     C		CALL	CONVERT_ASCII		;;AN000
				;
			     C		MOV	SI,AX			;;AN000
				;
			     C						;;
			     C		MOV	AX,value		;;AN000
				;
			     C		LEA	BX,string+2		;;AN000
				;
			     C		CALL	CONVERT_ASCII		;;AN000
				;
			     C		MOV	string,AX		;;AN000
				;
			     C						;;
			     C		LEA	BX,string		;;AN000
				;
			     C		MOV	AX,input		;;AN000
				;
			     C		CALL	INIT_STRING_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  SET_NUMERIC
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	SET_NUMERIC  MACRO   input,value,maximum,string
				 ;;AN000;
			     C		MOV	AX,maximum		;;AN000
				;
			     C		LEA	BX,P_USER_STRING	;;AN000
				;
			     C		CALL	CONVERT_ASCII		;;AN000
				;
			     C		MOV	SI,AX			;;AN000
				;
			     C						;;
			     C		MOV	AX,value		;;AN000
				;
			     C		LEA	BX,string		;;AN000
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-130


				;
			     C		CALL	CONVERT_ASCII		;;AN000
				;
			     C		MOV	string,AX		;;AN000
				;
			     C						;;
			     C		LEA	BX,string		;;AN000
				;
			     C		MOV	AX,input		;;AN000
				;
			     C		CALL	SET_STRING_CALL 	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  GET_SUPPORT
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INIT_SCROLL_STATUS MACRO input,status_id ;;AN00
				0;
			     C		MOV	AX,input		;;AN000
				;
			     C		LEA	SI,status_id		;;AN000
				;
			     C		CALL	INIT_SCROLL_STATUS_CALL ;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  INIT_SUPPORT
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INIT_SUPPORT	MACRO table,index,status ;;AN00
				0;
			     C		PUSH	SI			;;AN000
				;
			     C		LEA	SI,table		;;AN000
				;
			     C		MOV	BX,index		;;AN000
				;
			     C		DEC	BX			;;AN000
				;
			     C		SHL	BX,1			;;AN000
				;
			     C		MOV	AX,status		;;AN000
				;
			     C		MOV	[SI+BX],AX		;;AN000
				;
			     C		POP	SI			;;AN000
				;
			     C		ENDM				;;AN000
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-131


			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  RET_SUPPORT
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	RET_SUPPORT	MACRO table,index,status ;;AN00
				0;
			     C		PUSH	SI			;;AN000
				;
			     C		LEA	SI,table		;;AN000
				;
			     C		MOV	BX,index		;;AN000
				;
			     C		DEC	BX			;;AN000
				;
			     C		SHL	BX,1			;;AN000
				;
			     C		MOV	AX,[SI+BX]		;;AN000
				;
			     C		MOV	status,AX		;;AN000
				;
			     C		POP	SI			;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  TOGGLE_SUPPORT
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	TOGGLE_SUPPORT	MACRO table,index	;;AN000
				;
			     C		MOV	BX,index		;;AN000
				;
			     C		LEA	DX,table		;;AN000
				;
			     C		CALL	TOGGLE_SUPPORT_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACROS:  INITIALIZE_BCHAR
			     C	;
			     C	;	One needs to initialize the background 
				panel colour index
			     C	;	to match the colour attributes of the P
				arent panels.  The
			     C	;	index is based on panel #1 (which is as
				sumed to be a good
			     C	;	sample of the remaining panel colours.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INITIALIZE_BCHAR MACRO	character	;;AN000
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-132


				;
			     C		MOV	AL,character		;;AN000
				;Background character
			     C		MOV	PM_BASECHAR,AL		;;AN000
				;
			     C		PUSH	DI			;;AN000
				;
			     C		PUSH	DX			;;AN000
				;
			     C		PUSH	ES			;;AN000
				;
			     C		MOV	BX,1			;;AN000
				;get ES:DI pointer to panel #1
			     C		CALL	GET_PCB 		;;AN000
				;
			     C		PUSH	ES:[DI]+PCB_CCBID	;;AN000
				;get panel's color index
			     C		POP	AX			;;AN000
				;
			     C		DEC	AX			;;AN000
				;normalize index
			     C		POP	ES			;;AN000
				;
			     C		PUSH	ES			;;AN000
				;
			     C		MOV	DI,CRD_CCBVECOFF	;;AN000
				;
			     C		PUSH	CRD_CCBVECSEG		;;AN000
				;
			     C		POP	ES			;;AN000
				;
			     C		MOV	DX,12			;;AN000
				;12 entries per colour index
			     C		MUL	DX			;;AN000
				;
			     C		ADD	DI,AX			;;AN000
				;
			     C		MOV	AL,ES:[DI]		;;AN000
				;
			     C		POP	ES			;;AN000
				;
			     C		POP	DX			;;AN000
				;
			     C		POP	DI			;;AN000
				;
			     C		MOV	PM_BASEATTR,AL		;;AN000
				;set color attribute of background characters
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  RETURN_STRING
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-133


			     C	RETURN_STRING  MACRO   input,string,maximum ;;A
				N000;
			     C		MOV	AX,input		;;AN000
				;
			     C		MOV	DX,maximum		;;AN000
				;
			     C		LEA	SI,string		;;AN000
				;
			     C		CALL	RETURN_STRING_CALL	;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO:  HANDLE_ERROR
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	HANDLE_ERROR   MACRO   input,action	;;AN000
				;
			     C		LOCAL	CONTINUE		;;AN000
				;
			     C		MOV	BX,input		;;AN000
				;
			     C		MOV	CX,action		;;AN000
				;
			     C		CALL	HANDLE_ERROR_CALL	;;AN000
				;
			     C		JNC	CONTINUE		;;AN000
				;
			     C		CLEAR_SCREEN2			;;AC027
				;SEH ;AN000;
			     C		JMP	EXIT_SELECT		;;AN000
				;
			     C	CONTINUE:				;;AN000
				;
			     C		ENDM				;;AN000
				;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; MACRO: INIT_CHAR	      ;;AN000;JW
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INIT_CHAR    MACRO character,row,column,panid ;
				;AN000;JW
			     C		MOV  AX,row			;;AN000
				;JW
			     C		MOV  CX,column			;;AN000
				;JW
			     C		MOV  DL,character		;;AN000
				;JW
			     C		MOV  BX,panid			;;AN000
				;JW
			     C		CALL INIT_CHAR_CALL		;;AN000
				;JW
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-134


			     C		ENDM				;;AN000
				;JW
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
					INCLUDE    PAN-LIST.INC 	;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;	PAN-LIST.INC
			     C	;
			     C	;
			     C	;
			     C	;	OASIS PANEL ASSOCATION TABLE
			     C	;
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	PAN_WELCOME	EQU	 1	;AN000; Welcome
				 screen
 = 0002                      C	PAN_INTRO	EQU	 2	;AN000; Introdu
				ction screen
 = 0003                      C	PAN_CONFIRM	EQU	 3	;AN000; Confirm
				ation screen
 = 0004                      C	PAN_WORKSPACE	EQU	 4	;AN000; User me
				mory needs screen
 = 0005                      C	PAN_CTY_KYB	EQU	 5	;AN000; Country
				/Keyboard support screen
 = 0006                      C	PAN_COUNTRY	EQU	 6	;AN000; Country
				 Code Choice screen
 = 0007                      C	PAN_KEYBOARD	EQU	 7	;AN000; Keyboar
				d Code Choice screen
 = 0008                      C	PAN_KYBD_ALT	EQU	 8	;AN000; Alterna
				te keyboard screen
 = 0009                      C	PAN_DEST_DRIVE	EQU	 9	;AN000; Destina
				tion Drive screen
 = 000A                      C	PAN_DOS_LOC	EQU	10	;AN000; DOS Loc
				ation screen
 = 000B                      C	PAN_PRINTER	EQU	11	;AN000; Printer
				 Selection Screen
 = 000C                      C	PAN_PRT_TYPE	EQU	12	;AN000; Printer
				 type screen
 = 000D                      C	PAN_PARALLEL	EQU	13	;AN000; Paralle
				l printer port selection screen
 = 000E                      C	PAN_SERIAL	EQU	14	;AN000; Serial 
				printer port selection screen
 = 000F                      C	PAN_REVIEW	EQU	15	;AN000; Review 
				Selections Screen
 = 0010                      C	PAN_FUNC_DISK	EQU	16	;AN000; Review 
				selections made by SELECT - drive C:
 = 0010                      C	PAN_FUNC_DISKET EQU	16	;AN000; Review 
				selections made by SELECT - drive B:
 = 0011                      C	ERR_PRT_NO_HDWR EQU	17	;AN000;
 = 0012                      C	PAN_DOS_PARAM	EQU	18	;AN000; PC/DOS 
				parameters screen
 = 0013                      C	PAN_SHELL	EQU	19	;AN000; SHELL p
				arameters screen
 = 0014                      C	ERR_EXIT	EQU	20	;AN000; Unrecov
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-135


				erable error - exit
 = 0015                      C	PAN_FASTOPEN	EQU	21	;AN000; FASTOPE
				N support screen
 = 0016                      C	PAN_SHARE	EQU	22	;AN000; SHARE s
				upport screen
 = 0017                      C	PAN_GRAPHICS	EQU	23	;AN000; GRAPHIC
				S support screen
 = 0018                      C	PAN_EXP_MEMORY	EQU	24	;AN000; Expande
				d Memory support screen
 = 0019                      C	PAN_VDISK	EQU	25	;AN000; Virtual
				 Disk support screen
 = 001A                      C	PAN_CONFIG_PARS EQU	26	;AN000; CONFIG.
				SYS parameter screen
 = 001B                      C	PAN_FIXED_FIRST EQU	27	;AN000; Partiti
				ons support for first disk only
 = 001C                      C	PAN_FIXED_BOTH	EQU	28	;AN000; Partiti
				ons support for both disks
 = 001D                      C	PAN_REBOOT	EQU	29	;AN000; Reboot 
				screen
 = 001E                      C	PAN_DATE_TIME	EQU	30	;AN000; Install
				 Date/Time support screen
 = 001F                      C	PAN_FORMAT	EQU	31	;AN000; Format 
				Fixed Disk partition screen
 = 0020                      C	PAN_INST_PROMPT EQU	32	;AN000; Install
				ing PC DOS prompt screen
 = 0020                      C	PAN_INSTALL_DOS EQU	32	;AN000; Install
				ing PC DOS screen
 = 0021                      C	ERR_KEYB	EQU	33	;AN000; Error i
				n running the KEYB command
 = 0022                      C	PAN_COMPLETE1	EQU	34	;AN000; Install
				ing complete screen - disk
 = 0022                      C	PAN_COMPLETE2	EQU	34	;AN000; Install
				ing complete screen - diskette 720KB
 = 0022                      C	PAN_COMPLETE3	EQU	34	;AN000; Install
				ing complete screen - diskette 360KB
 = 0023                      C	SUB_COMP_KYS_1C EQU	35	;AN000; message
				 for reboot; diskette COMBINED (1.44MB)
 = 0024                      C	PAN_HPAN	EQU	36	;AN000; context
				ual help panel
 = 0025                      C	PAN_HBAR	EQU	37	;AN000; HORIZON
				TAL BAR
 = 0026                      C	SUB_CONT_OPTION EQU	38	;AN000; Enter t
				o continue or Esc to cancel
 = 0027                      C	SUB_PRINTER_1	EQU	39	;AN000; printer
				 no 1
			     C	
 = 0028                      C	CHILD_F3EXIT	EQU	40	;AN000; f3 exit
				 child panel
 = 0029                      C	SUB_FIXED_1	EQU	41	;AN000; fixed d
				isk 1
 = 002A                      C	SUB_LOG_DRIVE	EQU	42	;AN000; logical
				 drive JW
 = 002B                      C	SUB_REBOOT_KEYS EQU	43	;AN000; ctrl+al
				t+del to reboot line
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-136


 = 002C                      C	SUB_INSTALL_1	EQU	44	;AN000; copying
				 from diskette 1
 = 002D                      C	SUB_INSTALL_2	EQU	45	;AN000; copying
				 from diskette 2
 = 002E                      C	SUB_COMP_VER	EQU	46	;AN000; install
				 of DOS 4.00 complete
 = 002F                      C	SUB_COMP_KYS_1	EQU	47	;AN000; message
				 before reboot - disk
 = 0030                      C	SUB_COMP_KYS_2	EQU	48	;AN000; message
				 before reboot - diskette
			     C					;
 = 0031                      C	CHILD_F1HELP	EQU	49	;AN000; help ch
				ild panel
 = 0032                      C	CHILD_F9KEYS	EQU	50	;AN000; keys ch
				ild panel
 = 0033                      C	CHILD_QUIT	EQU	51	;AN000; escape 
				child panel
 = 0034                      C	CHILD_ENTER	EQU	52	;AN000; enter c
				hild panel
 = 0035                      C	SUB_COMP_REP	EQU	53	;AN000; Replace
				ment of DOS 4.00 complete
			     C					;
 = 0036                      C	PAN_WRITE_PROT	EQU	54	;AN000;
 = 0037                      C	PAN_DRIVE_ERROR EQU	55	;AN000;
 = 0038                      C	PAN_BAD_DISKET	EQU	56	;AN000;
 = 0039                      C	ERR_COPY_DISK	EQU	57	;AN000;
			     C					;
 = 003A                      C	SUB_INS_START_B EQU	58	;AN000;
 = 003B                      C	SUB_REM_SEL_A	EQU	59	;AN000;
 = 003C                      C	SUB_REM_START_B EQU	60	;AN000;
 = 003D                      C	SUB_REM_DOS_A	EQU	61	;AN000;
			     C					;
 = 003E                      C	ERR_BAD_PATH	EQU	62	;AN000;
 = 003F                      C	ERR_BAD_PFILE	EQU	63	;AN000;
 = 0040                      C	ERR_BAD_PPRO	EQU	64	;AN000;
 = 0041                      C	FORMAT_DISK	EQU	65	;AN000;
 = 0042                      C	FORMAT_DISKET	EQU	66	;AN000;
 = 0043                      C	ERR_BORDER	EQU	67	;AN000;
 = 0044                      C	ERR_DOS_DISK	EQU	68	;AN000;
 = 0045                      C	ERR_GENERAL	EQU	69	;AN000;
 = 0046                      C	PAN_DISKCOPY	EQU	70	;AN000;
 = 0047                      C	PAN_DSKCPY_SRC	EQU	71	;AN000;
 = 0048                      C	PAN_DSKCPY_TAR	EQU	72	;AN000;
 = 0049                      C	PAN_DSKCPY_CPY	EQU	73	;AN000;
 = 004A                      C	PAN_PARTIAL	EQU	74	;AC010;
			     C	
 = 004B                      C	FORMAT_SHELL	EQU	75	;AN000;DT One d
				rive format of SHELL diskette
 = 004C                      C	FORMAT_STARTUP	EQU	76	;AN000;DT One d
				rive format of STARTUP diskette
 = 004D                      C	SUB_REM_SHELL_360 EQU	77	;AN001;GHG D65 
				360KB
 = 004E                      C	SUB_REM_SELECT_360 EQU	78	;AN001;GHG D65 
				360KB
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-137


 = 004F                      C	SUB_REM_UTIL1_360 EQU	79	;AN001;GHG D65 
				360KB
 = 0050                      C	SUB_COPYING	EQU	80	;AN001;GHG D65 
				360KB
			     C	
 = 0051                      C	SUB_INS_WORK1_360 EQU	81	;AN000;DT 2 dri
				ve 360 installation
 = 0052                      C	SUB_INS_WORK2_360 EQU	82	;AN000;DT
					  "
 = 0053                      C	SUB_INS_WORK3_360 EQU	83	;AN000;DT
					  "
 = 0054                      C	SUB_INS_START_360 EQU	84	;AN000;DT
					  "
 = 0055                      C	SUB_INS_INSTALL_360 EQU 85	;AN000;DT
					  "
			     C					;
 = 0056                      C	SUB_INS_WORK1_S360   EQU 86	;AN000;DT 1 dri
				ve 360 installation
 = 0057                      C	SUB_INS_WORK2_S360   EQU 87	;AN000;DT
					  "
 = 0058                      C	SUB_INS_SHELL_S360   EQU 88	;AN000;DT
					  "
 = 0059                      C	SUB_INS_STARTT_S360  EQU 89	;AN000;DT
					  "
			     C	
 = 005A                      C	PAN_START360	     EQU 90	;AN000;DT
					  "
 = 005B                      C	SUB_COMP_KYS_3	     EQU 91	;AN000;DT messa
				ge before reboot - diskette
			     C	
 = 005C                      C	SUB_INSTALL_COPY     EQU 92	;AN000;DT inser
				t INSTALL copy
 = 005D                      C	SUB_INS_OPER2	     EQU 93	;AN000;DT
 = 005E                      C	PAN_EXP_MEMORY2      EQU 94	;AN000;JW Expan
				ded Memory support screen
 = 005F                      C	PAN_START720	     EQU 95	;AN000;DT Diske
				tte introduction 720KB
 = 0060                      C	PAN_START1440	     EQU 96	;AN000;DT Diske
				tte introduction 1440KB
 = 0061                      C	ERR_INS_INSTALL      EQU 97	;AN060;JW Inser
				t the install diskette
 = 0062                      C	PAN_CHOOSE_SHELL     EQU 98	; MS-DOS Shell 
				option
 = 0063                      C	SUB_INS_WORKING_A    EQU 99	; Insert the WO
				RKING disk in drive A
 = 0064                      C	SUB_INS_MSSHELL_A    EQU 100	; Insert the MS
				-SHELL disk in drive A
 = 0065                      C	SUB_INS_SHELL_DISKS  EQU 101	; Ins. MS-SHELL
				 in A; SHELL in B
 = 0066                      C	SUB_INS_OP_WORK      EQU 102	; Ins. OPERATIN
				G in A; WORKING in B
 = 0067                      C	SUB_INS_WORK3_A	     EQU 103	; Ins. WORKING3
				 in drive A
			     C	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-138


 = 0001                      C	SCR_DOS_SUPPORT EQU	 1	;AN000; memory 
				workspace list
 = 0002                      C	SCR_CTY_KYB	EQU	 2	;AN000; type of
				 country/keyboard list
 = 0003                      C	SCR_CTY_1	EQU	 3	;AN000; list of
				 countries - code 001 to 046
 = 0004                      C	SCR_CTY_2	EQU	 4	;AN000; list of
				 countries - code 047 to 972
 = 0005                      C	SCR_KYB_1	EQU	 5	;AN000; list of
				 keyboards - code BE to NO
 = 0006                      C	SCR_KYB_2	EQU	 6	;AN000; list of
				 keyboards - code PO to none
 = 0007                      C	SCR_FR_KYB	EQU	 7	;AN000; list of
				 alternate French keyboards
 = 0008                      C	SCR_IT_KYB	EQU	 8	;AN000; list of
				 alternate Italian keyboards
 = 0009                      C	SCR_UK_KYB	EQU	 9	;AN000; list of
				 alternate UK keyboards
 = 000A                      C	SCR_DEST_B_C	EQU	10	;AN111; install
				 drive list JW
 = 000B                      C	SCR_PRT_TYPE	EQU	11	;AN000; list of
				 printers supported
 = 000C                      C	SCR_PARALLEL	EQU	12	;AN000; list of
				 parallel printer ports
 = 000D                      C	SCR_SERIAL	EQU	13	;AN000; list of
				 serial printer ports
 = 000E                      C	SCR_PRT_REDIR	EQU	14	;AN000; list of
				 redirected parallel printer ports
 = 000F                      C	SCR_REVIEW	EQU	15	;AN000; accept/
				view SELECT generated options
 = 0010                      C	SCR_FUNC_DISK	EQU	16	;AN000; list of
				 functions supported - disk
 = 0011                      C	SCR_FUNC_DISKET EQU	17	;AN000; list of
				 functions supported - diskette
 = 0012                      C	SCR_FIXED_FIRST EQU	18	;AN000; first f
				ixed disk unused - partition support list
 = 0013                      C	SCR_FIXED_BOTH	EQU	19	;AN000; first f
				ixed disk used - partition support list
 = 0014                      C	SCR_FORMAT	EQU	20	;AN000; fixed d
				isk partition format
 = 0015                      C	SCR_CONTEXT_HLP EQU	21	;AN000;
 = 0015                      C	SCR_INDEX_HLP	EQU	21	;AN000;
 = 0016                      C	SCR_TITLE_HLP	EQU	22	;AN000;
 = 0017                      C	SCR_ACC_CTY	EQU	23	;AN000;
 = 0018                      C	SCR_ACC_KYB	EQU	24	;AN000;
 = 0019                      C	SCR_ACC_PRT	EQU	25	;AN000;
 = 001A                      C	SCR_COPY_DEST	EQU	26	;AN000;JW DOS l
				ocation choices
 = 001B                      C	SCR_DEST_A_C	EQU	27	;AN111; install
				 drive list JW
 = 001C                      C	SCR_CHOOSE_SHELL EQU	28	; MS-DOS Shell 
				option
			     C					;
 = 0001                      C	STR_DOS_LOC	EQU	 1	;AN000; DOS loc
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-139


				ation field
 = 0002                      C	STR_EXT_PARMS	EQU	 2	;AN000; externa
				l diskette parameters
 = 0003                      C	STR_DOS_PATH	EQU	 3	;AN000; DOS pat
				h
 = 0004                      C	STR_DOS_APPEND	EQU	 4	;AN000; APPEND 
				path
 = 0005                      C	STR_DOS_PROMPT	EQU	 5	;AN000; PROMPT 
				path
 = 0006                      C	STR_SHELL	EQU	 6	;AN000; SHELL p
				arameters
 = 0007                      C	STR_KSAM	EQU	 7	;AN000; KSAM pa
				rameters
 = 0008                      C	STR_FASTOPEN	EQU	 8	;AN000; FASTOPE
				N parameters
 = 0009                      C	STR_SHARE	EQU	 9	;AN000; SHARE p
				arameters
 = 000A                      C	STR_GRAPHICS	EQU	10	;AN000; GRAPHIC
				S parameters
 = 000B                      C	STR_XMAEM	EQU	11	;AN000; XMAEM e
				xpanded memory parameter
 = 000C                      C	STR_XMA2EMS	EQU	12	;AN000; XMA2EMS
				 expanded memory parameter
 = 000D                      C	STR_VDISK	EQU	13	;AN000; VDISK p
				arameter
 = 000E                      C	STR_BREAK	EQU	14	;AN000; BREAK p
				arameter
 = 000F                      C	STR_BUFFERS	EQU	15	;AN000; BUFFERS
				 parameter
 = 0010                      C	STR_DOS_APPEND_P EQU	 16	;AN000; APPEND 
				parameter   JW
 = 0011                      C	STR_FCBS	EQU	17	;AN000; FCBS pa
				rameter
 = 0012                      C	STR_FILES	EQU	18	;AN000; FILES p
				arameter
 = 0013                      C	STR_LASTDRIVE	EQU	19	;AN000; LASTDRI
				VE parameter
 = 0014                      C	STR_STACKS	EQU	20	;AN000; STACKS 
				parameter
 = 0015                      C	STR_VERIFY	EQU	21	;AN000; VERIFY 
				parameter
			     C	
 = 0016                      C	NUM_PRINTER	EQU	22	;AN000; no of p
				rinters
 = 0017                      C	NUM_EXT_DISK	EQU	23	;AN000; no of e
				xternal diskettes
 = 0018                      C	NUM_YEAR	EQU	24	;AN000; YEAR
 = 0019                      C	NUM_MONTH	EQU	25	;AN000; MONTH
 = 001A                      C	NUM_DAY 	EQU	26	;AN000; DAY
 = 001B                      C	NUM_HOUR	EQU	27	;AN000; HOUR
 = 001C                      C	NUM_MINUTE	EQU	28	;AN000; MINUTE
 = 001D                      C	NUM_SECOND	EQU	29	;AN000; SECOND
 = 001E                      C	STR_DEF_CP	EQU	30	;AN000; Default
				 CodePage for the SELECT.DAT file
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-140


 = 001F                      C	STR_SWISS_KEYB	EQU	31	;AN000; Default
				 SWISS Keyboard
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
					INCLUDE    SELECT.INC		;AN000;
			     C	;----------------------------------------------
				-------------------------------+
			     C	;	SELECT.INC			
								      :
			     C	;					
								      :
			     C	;					
								      :
			     C	;  Dialog Equates			
								      :
			     C	;					
								      :
			     C	;  These values will eventually be defined by t
				he dialog manager	      :
			     C	;					
								      :
			     C	;----------------------------------------------
				-------------------------------+
			     C	;
			     C	; Help ID equates
			     C	;
 = 0001                      C	HCB_KEYS       EQU  1			     ;A
				N000;help on keys text
 = 0002                      C	HCB_HELP       EQU  2			     ;A
				N000;help on help text
			     C	;
			     C	; Color ID equates
			     C	;
 = 0001                      C	CLR_CLR        EQU  1			     ;A
				N000;shipped text mode color index
 = 0002                      C	CLR_MON        EQU  2			     ;A
				N000;shipped monochrome color index
			     C	;
			     C	; Sound equates
			     C	;
 = 9C40                      C	SND_DURA       EQU  40000		     ;A
				N000;duration of error beep
 = 01B8                      C	SND_FREQ       EQU  440 		     ;A
				N000;frequency of error beep
			     C	;
			     C	; Size equates
			     C	;
 = 0F7F                      C	MAX_MEMPAR     EQU  0F7FH		     ;A
				C091;SEH reduce area to 62K to help 256K mem pr
				oblem;AN000;size of buffer in 16 byte paraghp (
				64KB)
 = 012B                      C	MAX_MEMLVB     EQU  012BH		     ;A
				N000;size of buffer in 16 byte paraghp (4240 BY
				TES)
 = 0032                      C	MAX_RETKSZ     EQU  50			     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-141


				N000;max # of bytes in return key buff
 = 2000                      C	MAX_HELPSZ     EQU  2000H		     ;A
				N000;max # of bytes in help text buff (8KB)
 = 0062                      C	MAX_PANNUM     EQU  98		   ;AC111;JW ;m
				ax num of panels possible in mem
 = 001C                      C	MAX_SCRNUM     EQU  28		   ;AC111;JW ;m
				ax num of scroll possible in mem
 = 0002                      C	MAX_CHDQUE     EQU  2			     ;A
				N000;max # of child queues to save
 = 0005                      C	MAX_PANQUE     EQU  5			     ;A
				N000;max # of panel queues to save
 = 0005                      C	MAX_NUMCHD     EQU  5			     ;A
				N000;max # of parent panels queued
 = 0005                      C	MAX_NUMPAN     EQU  5			     ;A
				N000;max # of child panels queued
 = 000C                      C	MAX_CLRECD     EQU  12			     ;A
				N000;num of bytes per PCPANEL color rc
			     C	;
			     C	; Keystroke equates
			     C	;
 = 3B00                      C	KEY_HELP       EQU  3B00H		     ;A
				N000;F1=Help
 = 3C00                      C	KEY_SWIT       EQU  3C00H		     ;A
				N000;F2=Switch
 = 3F00                      C	KEY_INDX       EQU  3F00H		     ;A
				N000;F5=Index
 = 4300                      C	KEY_KEYS       EQU  4300H		     ;A
				N000;F9=Keys
 = 000D                      C	KEY_SELT       EQU  000DH		     ;A
				N000;Enter
 = 001B                      C	KEY_QUIT       EQU  001BH		     ;A
				N000;Esc=Quit
			     C	;
			     C	; Miscellaneous equates
			     C	;
 = 0002                      C	VECSEGLEN      EQU  2			     ;A
				N000;vector segment length
 = 0002                      C	VECOFFLEN      EQU  2			     ;A
				N000;vector offset length
			     C	
			     C		INCLUDE PCEQUATE.INC		     ;A
				N000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCSCRRD option bit equates (SRD_OPT1)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	SRD_INITIAL    EQU  0000000000000001B	     ;A
				N000;initialize SCB and filespec buff
 = 0002                      C	SRD_READONE    EQU  0000000000000010B	     ;A
				N000;read field specified by SRD_ID
 = 0004                      C	SRD_APPEND     EQU  0000000000000100B	     ;A
				N000;match field ID are issued new ID
 = 0008                      C	SRD_READALL    EQU  0000000000001000B	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-142


				N000;read all FLDS in specified file
 = 0010                      C	SRD_ALLOCRES   EQU  0000000000010000B	     ;A
				N000;allocate reserved PCSLCTP space
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCSCRRD error bit equates (SRD_ERROR)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	SRD_BUFSIZE    EQU  0000000000000001B	     ;A
				N000;buffer size is too small
 = 0002                      C	SRD_NOFIELDS   EQU  0000000000000010B	     ;A
				N000;file does not contain fields
 = 0004                      C	SRD_NOTCASFILE EQU  0000000000000100B	     ;A
				N000;file object list does not exist
 = 0008                      C	SRD_FIELDSFULL EQU  0000000000001000B	     ;A
				N000;max num FLDS read into SCB vect
 = 0010                      C	SRD_NOINITIAL  EQU  0000000000010000B	     ;A
				N000;make initialize call first
 = 0020                      C	SRD_NOFIELDID  EQU  0000000000100000B	     ;A
				N000;specified field ID not found
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCHLPRD option bit equates (HRD_OPT1)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	HRD_TOPIC      EQU  0000000000000001B	      ;
				AN000;process help TOPIC(S) index
 = 0002                      C	HRD_TEXT       EQU  0000000000000010B	      ;
				AN000;process HELP or ERROR text
 = 0004                      C	HRD_DISPID     EQU  0000000000000100B	      ;
				AN000;display unique id on topic list
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCHLPRD error bit equates (HRD_ERROR)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	HRD_BUFSIZE    EQU  0000000000000001B	      ;
				AN000;buffer size is too small
 = 0002                      C	HRD_NOHLPOBJ   EQU  0000000000000010B	      ;
				AN000;file does not contain helps
 = 0004                      C	HRD_NOOBJLST   EQU  0000000000000100B	      ;
				AN000;file object list does not exist
 = 0008                      C	HRD_NOHELPID   EQU  0000000000001000B	      ;
				AN000;requested id was not found
 = 0010                      C	HRD_NOTCASFILE EQU  0000000000010000B	      ;
				AN000;not a valid cas file
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCSTRST equates
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	SSC_TBSL       EQU  0000000000000001B	     ;A
				N000;use two byte string length
 = 0002                      C	SSC_PTSB       EQU  0000000000000010B	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-143


				N000;pointer points to string buffer
 = 0004                      C	SSC_VTSAO      EQU  0000000000000100B	     ;A
				N000;vector table is string addr only
 = 0008                      C	SSC_VTASO      EQU  0000000000001000B	     ;A
				N000;vector table addr is seg:offset
 = 0010                      C	SSC_SLSB       EQU  0000000000010000B	     ;A
				N000;string length is in string buffer
 = 0020                      C	SSC_SBTC       EQU  0000000000100000B	     ;A
				N000;string buffer has term. character
 = 0001                      C	SSC_VTE        EQU  1			     ;A
				N000;error in vector table
 = 0002                      C	SSC_SBE        EQU  2			     ;A
				N000;error in string buffer
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCSLCTP Option word one (SCB_OPT1)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	SCB_UC	       EQU  0000000000000001B	     ;A
				N000;upper case option
 = 0002                      C	SCB_WRAP       EQU  0000000000000010B	     ;A
				N000;wrap option
 = 0004                      C	SCB_FRBF       EQU  0000000000000100B	     ;A
				N000;force return before first option
 = 0008                      C	SCB_FRAL       EQU  0000000000001000B	     ;A
				N000;force return after last option
 = 0010                      C	SCB_LL	       EQU  0000000000010000B	     ;A
				N000;lock line
 = 0020                      C	SCB_UKS        EQU  0000000000100000B	     ;A
				N000;use keystroke
 = 0040                      C	SCB_RD	       EQU  0000000001000000B	     ;A
				N000;return after display option
 = 0080                      C	SCB_RUK        EQU  0000000010000000B	     ;A
				N000;return unused keys option
 = 0100                      C	SCB_UI	       EQU  0000000100000000B	     ;A
				N000;use index option
 = 0200                      C	SCB_TRN        EQU  0000001000000000B	     ;A
				N000;translate character
 = 0400                      C	SCB_MON        EQU  0000010000000000B	     ;A
				N000;convert to upper case monocasing
 = 0800                      C	SCB_DBCS       EQU  0000100000000000B	     ;A
				N000;check for double byte chars
 = 1000                      C	SCB_TBL        EQU  0001000000000000B	     ;A
				N000;use given DBCS range table
 = 2000                      C	SCB_DCHECK     EQU  0010000000000000B	     ;A
				N000;display check mark characters
 = 4000                      C	SCB_DACTIVE    EQU  0100000000000000B	     ;A
				N000;display active string indicators
 = 8000                      C	SCB_DPOINT     EQU  1000000000000000B	     ;A
				N000;display selection pointer string
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCSLCTP Option word two (SCB_OPT2)
			     C	;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-144


			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	SCB_CS	       EQU  0000000000000001B	     ;A
				N000;clear screen on entry option
 = 0002                      C	SCB_ROTN       EQU  0000000000000010B	     ;A
				N000;reset option to normal on return
 = 0004                      C	SCB_UET        EQU  0000000000000100B	     ;A
				N000;use existing text option
 = 0008                      C	SCB_CFO        EQU  0000000000001000B	     ;A
				N000;cursor follows option
 = 0010                      C	SCB_LCOX       EQU  0000000000010000B	     ;A
				N000;leave cursor on exit
 = 0020                      C	SCB_IPAGE      EQU  0000000000100000B	     ;A
				N000;instant paging
 = 0040                      C	SCB_PM1        EQU  0000000001000000B	     ;A
				N000;paging is minus one line
 = 0080                      C	SCB_UIND       EQU  0000000010000000B	     ;A
				N000;display up, dn, lf, rg indicators
 = 0100                      C	SCB_UNCA       EQU  0000000100000000B	     ;A
				N000;use normal color array
 = 0200                      C	SCB_DYN        EQU  0000001000000000B	     ;A
				N000;option array is dynamicly created
 = 0400                      C	SCB_LANDR      EQU  0000010000000000B	     ;A
				N000;left and right scrolling active
 = 0800                      C	SCB_CPHY       EQU  0000100000000000B	     ;A
				N000;color array is physical attributs
 = 1000                      C	SCB_NUML       EQU  0001000000000000B	     ;A
				N000;generate num list in opt strings
 = 2000                      C	SCB_SKIP       EQU  0010000000000000B	     ;A
				N000;skip inactive option strings
 = 4000                      C	SCB_SHIGH      EQU  0100000000000000B	     ;A
				N000;highlight the selected opt strgs
 = 8000                      C	SCB_AHIGH      EQU  1000000000000000B	     ;A
				N000;highlight the active option strgs
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCSLCTP Option word three (SCB_OPT3)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	SCB_SELACT     EQU  0000000000000001B	     ;A
				N000;allow selection of inactive elem
 = 0002                      C	SCB_SELEXC     EQU  0000000000000010B	     ;A
				N000;exclusive selection of one elemet
 = 0004                      C	SCB_EXCSING    EQU  0000000000000100B	     ;A
				N000;one element is always selected
 = 0008                      C	SCB_NUMUIND    EQU  0000000000001000B	     ;A
				N000;display line number count
 = 0010                      C	SCB_CHIGH      EQU  0000000000010000B	     ;A
				N000;hilight cursored and selected stg
 = 0020                      C	SCB_NUMS       EQU  0000000000100000B	     ;A
				N000;auto 0-9 number selection
 = 0040                      C	SCB_FINDE      EQU  0000000001000000B	     ;A
				N000;auto character search
 = 0080                      C	SCB_RELUIND    EQU  0000000010000000B	     ;A
				N000;rel row/col used w/dirct indicato
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-145


 = 0100                      C	SCB_RELSCR     EQU  0000000100000000B	     ;A
				N000;rel row/col used w/scroll field
 = 0200                      C	SCB_LVBOVR     EQU  0000001000000000B	     ;A
				N000;use video buffer seg:off override
 = 0400                      C	SCB_FM	       EQU  0000010000000000B	     ;A
				N000;make call to dynamic format rout
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCSLCTP Select Array Option (SCB_SELSEG:SCB_S
				ELOFF)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	SCB_SELECTON   EQU  0000000000000001B	     ;A
				N000;element selected
 = 0002                      C	SCB_ACTIVEON   EQU  0000000000000010B	     ;A
				N000;element active
 = 0004                      C	SCB_SKIPON     EQU  0000000000000100B	     ;A
				N000;element should be skipped
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCINCHA option equates (INC_OPT)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	INC_KWAIT      EQU  0000000000000001B	     ;k
				eystroke
 = 0002                      C	INC_UTRAN      EQU  0000000000000010B	     ;t
				ranslate keys using user table
 = 0004                      C	INC_UDBCS      EQU  0000000000000100B	     ;D
				BCS processed using user table
 = 0008                      C	INC_DDBCS      EQU  0000000000001000B	     ;D
				BCS processed using DOS table
 = 0010                      C	INC_UMONO      EQU  0000000000010000B	     ;m
				onocase keys using user table
 = 0020                      C	INC_AMONO      EQU  0000000000100000B	     ;m
				onocase keys using USA algorithm
 = 0040                      C	INC_RSCAN      EQU  0000000001000000B	     ;r
				eturn scan codes for norm chars
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCINCHA option equates (INC_STAT)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	INC_KFND       EQU  0000000000000001B	     ;A
				N000;character found in buffer
 = 0002                      C	INC_DBCS       EQU  0000000000000010B	     ;A
				N000;character found is double byte
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCCLRRD error bit equates (CRD_ERROR)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	CRD_BUFSIZE	EQU  0000000000000001B	     ;A
				N000;buffer size is too small
 = 0002                      C	CRD_NOCOLORS	EQU  0000000000000010B	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-146


				N000;file does not contain colors
 = 0004                      C	CRD_NOTCASFILE	EQU  0000000000000100B	     ;A
				N000;file object list does not exist
 = 0008                      C	CRD_IDNOTFOUND	EQU  0000000000001000B	     ;A
				N000;color index ID not found
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCPANRD option bit equates (PRD_OPT1)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	PRD_INITIAL    EQU  0000000000000001B	     ;A
				N000;initialize PCB and filespec buff
 = 0002                      C	PRD_READONE    EQU  0000000000000010B	     ;A
				N000;read pan specified by PRD_ID
 = 0004                      C	PRD_APPEND     EQU  0000000000000100B	     ;A
				N000;match pans ID are issued new ID
 = 0008                      C	PRD_READALL    EQU  0000000000001000B	     ;A
				N000;read all pans in specified file
 = 0010                      C	PRD_SIZEMALL   EQU  0000000000010000B	     ;A
				N000;reserve space for panel sizing
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCPANRD error bit equates (PRD_ERROR)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	PRD_BUFSIZE    EQU  0000000000000001B	     ;A
				N000;buffer size is too small
 = 0002                      C	PRD_NOPANELS   EQU  0000000000000010B	     ;A
				N000;file does not contain panels
 = 0004                      C	PRD_NOTCASFILE EQU  0000000000000100B	     ;A
				N000;file object list does not exist
 = 0008                      C	PRD_PANELSFULL EQU  0000000000001000B	     ;A
				N000;max num pans read into PCB vect
 = 0010                      C	PRD_NOINITIAL  EQU  0000000000010000B	     ;A
				N000;make initialize call first
 = 0020                      C	PRD_NOPANELID  EQU  0000000000100000B	     ;A
				N000;specified panel ID not found
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCDISPQ option equates (QM_OPT1)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	QM_INIT        EQU  0000000000000001B	     ;A
				N000;Initialize working buffer
 = 0002                      C	QM_PUSHCHD     EQU  0000000000000010B	     ;A
				N000;Add child number
 = 0004                      C	QM_RVMCHD      EQU  0000000000000100B	     ;A
				N000;Remove specific child number
 = 0008                      C	QM_POPCHD      EQU  0000000000001000B	     ;A
				N000;Pop (n) number of child cur queue
 = 0010                      C	QM_PUSHPAN     EQU  0000000000010000B	     ;A
				N000;Add panel number
 = 0020                      C	QM_RVMPAN      EQU  0000000000100000B	     ;A
				N000;Remove specific panel number
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-147


 = 0040                      C	QM_POPPAN      EQU  0000000001000000B	     ;A
				N000;Pop (n) number of panls cur queue
 = 0080                      C	QM_PUSHCQU     EQU  0000000010000000B	     ;A
				N000;Push current child queue
 = 0100                      C	QM_POPCQU      EQU  0000000100000000B	     ;A
				N000;Pop last child queue
 = 0200                      C	QM_PUSHPQU     EQU  0000001000000000B	     ;A
				N000;Push current panel queue
 = 0400                      C	QM_POPPQU      EQU  0000010000000000B	     ;A
				N000;Pop last panel queue pushed
 = 0800                      C	QM_CLSCHD      EQU  0000100000000000B	     ;A
				N000;Clear current child queue.
 = 1000                      C	QM_CLSPAN      EQU  0001000000000000B	     ;A
				N000;Clear current panel queue.
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	; PCDISPQ option equates (QM_OPT2)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	QM_BREAKON     EQU  0000000000000001B	     ;A
				N000;break option is on
 = 0002                      C	QM_BREAKOFF    EQU  0000000000000010B	     ;A
				N000;break option is off
 = 0004                      C	QM_SRFON       EQU  0000000000000100B	     ;A
				N000;selected refresh option is on
 = 0008                      C	QM_SRFOFF      EQU  0000000000001000B	     ;A
				N000;selected refresh option is off
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCDISPQ error equates (QM_ERROR)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	QM_ERRMP       EQU  0000000000000001B	     ;A
				N000;max number of panels added
 = 0002                      C	QM_ERRMC       EQU  0000000000000010B	     ;A
				N000;max number of childs added
 = 0004                      C	QM_ERRMPQ      EQU  0000000000000100B	     ;A
				N000;max number of panel queues pushed
 = 0008                      C	QM_ERRMCQ      EQU  0000000000001000B	     ;A
				N000;max number of child queues pushed
 = 0010                      C	QM_ERROP       EQU  0000000000010000B	     ;A
				N000;max number of panel queues popped
 = 0020                      C	QM_ERROC       EQU  0000000000100000B	     ;A
				N000;max number of child queues popped
 = 0040                      C	QM_ERRBU       EQU  0000000001000000B	     ;A
				N000;inadequate buffer size avail
 = 0080                      C	QM_ERRPN       EQU  0000000010000000B	     ;A
				N000;specified panel not found
 = 0100                      C	QM_ERRCN       EQU  0000000100000000B	     ;A
				N000;specified child not found
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCPANEL option bit equates (PM_OPT1)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-148


 = 0001                      C	PM_RF	       EQU  0000000000000001B	     ;A
				N000;do not refresh display
 = 0002                      C	PM_SRF	       EQU  0000000000000010B	     ;A
				N000;selective PVB refresh from LVB
 = 0004                      C	PM_BK	       EQU  0000000000000100B	     ;A
				N000;panel break function active
 = 0008                      C	PM_CL	       EQU  0000000000001000B	     ;A
				N000;initialize LVB to base char/attr
 = 0010                      C	PM_DOA	       EQU  0000000000010000B	     ;A
				N000;display childs in active parent
 = 0020                      C	PM_DOV	       EQU  0000000000100000B	     ;A
				N000;use child row, col, color overrid
 = 0040                      C	PM_DOQ	       EQU  0000000001000000B	     ;A
				N000;disp all child in parent chd tabl
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCPANEL error equates for (PM_ERROR)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	PM_PANPDQ      EQU  0000000000000001B	     ;A
				N000;invalid parent PDQ or start num
 = 0002                      C	PM_PCBVEC      EQU  0000000000000010B	     ;A
				N000;invalid PCB vector entry found
 = 0004                      C	PM_UNKNPANS    EQU  0000000000000100B	     ;A
				N000;unknown panel source found
 = 0008                      C	PM_CHDTAB      EQU  0000000000001000B	     ;A
				N000;set error with child table
 = 0010                      C	PM_COLORX      EQU  0000000000010000B	     ;A
				N000;panel's color index out of range
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCPANEL Parent and Child Display Queue option
				 bit equates (PT_OPT)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	PT_BK	       EQU  0000000000000001B	     ;A
				N000;panel break on
 = 0002                      C	PT_SRF	       EQU  0000000000000010B	     ;A
				N000;selective refresh of panel to PVB
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCPANEL Panel Control Block option equates fo
				r individual panels (PCB_OPT1)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	PCB_CRE        EQU  0000000000000001B	     ;A
				N000;Create panel from scratch
 = 0002                      C	PCB_CMP        EQU  0000000000000010B	     ;A
				N000;Use compress text form in memory
 = 0004                      C	PCB_EXP        EQU  0000000000000100B	     ;A
				N000;Use expanded text form in memory
 = 0008                      C	PCB_MXP        EQU  0000000000001000B	     ;A
				N000;Use mixed text/attr form in memoy
 = 0010                      C	PCB_LB	       EQU  0000000000010000B	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-149


				N000;Use logical border
 = 0020                      C	PCB_ASZ        EQU  0000000000100000B	     ;A
				N000;Allow sizing of panel
 = 0040                      C	PCB_ASC        EQU  0000000001000000B	     ;A
				N000;Allow scrolling of panel
 = 0080                      C	PCB_LAB        EQU  0000000010000000B	     ;A
				N000;Use the defined panel label
 = 0100                      C	PCB_DTB        EQU  0000000100000000B	     ;A
				N000;Draw top border (graphics only)
 = 0200                      C	PCB_DBB        EQU  0000001000000000B	     ;A
				N000;Draw bottom border (graphic only)
 = 0400                      C	PCB_DLB        EQU  0000010000000000B	     ;A
				N000;Draw left border (graphics only)
 = 0800                      C	PCB_DRB        EQU  0000100000000000B	     ;A
				N000;Draw right border (graphics only)
 = 1000                      C	PCB_DSHADOW    EQU  0001000000000000B	     ;A
				N000;Draw shadow (graphics only)
 = 2000                      C	PCB_PELCOORD   EQU  0010000000000000B	     ;A
				N000;row/col in pel coordinates (grap)
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCINSTR option bit equates (INS_OPT)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	INS_FKS        EQU  0000000000000001B	     ;A
				N000;find keystroke
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCGVIDO Status equates (GV_STAT1)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	GV_TV	       EQU  0000000000000001B	     ;A
				N000;TopView is present
 = 0002                      C	GV_CGA	       EQU  0000000000000010B	     ;A
				N000;CGA is present
 = 0004                      C	GV_EGA	       EQU  0000000000000100B	     ;A
				N000;EGA is present
 = 0008                      C	GV_PGA	       EQU  0000000000001000B	     ;A
				N000;PGA is present
 = 0010                      C	GV_MGA	       EQU  0000000000010000B	     ;A
				N000;MGA is present
 = 0020                      C	GV_EGAA        EQU  0000000000100000B	     ;A
				N000;EGA is active card
 = 0040                      C	GV_CGAA        EQU  0000000001000000B	     ;A
				N000;CGA is active card
 = 0080                      C	GV_EGACM       EQU  0000000010000000B	     ;A
				N000;EGA is set to monochrome
 = 0100                      C	GV_PGAEM       EQU  0000000100000000B	     ;A
				N000;PGA is in color emulation mode
 = 0200                      C	GV_HS	       EQU  0000001000000000B	     ;A
				N000;display requires sync check 1=Y
 = 0400                      C	GV_64K	       EQU  0000010000000000B	     ;A
				N000; 64K memory on EGA card
 = 0800                      C	GV_128K        EQU  0000100000000000B	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-150


				N000;128K memory on EGA card
 = 1000                      C	GV_192K        EQU  0001000000000000B	     ;A
				N000;192K memory on EGA card
 = 2000                      C	GV_256K        EQU  0010000000000000B	     ;A
				N000;256K memory on EGA card
 = 4000                      C	GV_UM	       EQU  0100000000000000B	     ;A
				N000;error unknown moniter or config
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCGVIDO Status equates (GV_STAT2)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	GV_TVW	       EQU  0000000000000001B	     ;A
				N000;App is 'well behaved' under TV
 = 0002                      C	GV_P5140       EQU  0000000000000010B	     ;A
				N000;P12 with LCD
 = 0004                      C	GV_P5153       EQU  0000000000000100B	     ;A
				N000;P12 with color
 = 0008                      C	GV_P5151       EQU  0000000000001000B	     ;A
				N000;P12 with monochrome
 = 0010                      C	GV_COLOR       EQU  0000000000010000B	     ;A
				N000;color mode
 = 0020                      C	GV_TEXTGRAPH   EQU  0000000000100000B	     ;A
				N000;graphics mode
 = 0040                      C	GV_MONOP       EQU  0000000001000000B	     ;A
				N000;monochrome adapter is primary
 = 0080                      C	GV_CGAP        EQU  0000000010000000B	     ;A
				N000;CGA adapter is primary card
 = 0100                      C	GV_EGAP        EQU  0000000100000000B	     ;A
				N000;EGA adapter is primary card
 = 0200                      C	GV_TURBOP      EQU  0000001000000000B	     ;A
				N000;Turbo graphics adapter is primary
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCINPUT option equates.
			     C	;
			     C	;
			     C	; PCINPUT Option equates (IN_OPT)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	IN_UTRAN       EQU  0000000000000001B	     ;A
				N000;translate keys using user table
 = 0002                      C	IN_ADBCS       EQU  0000000000000010B	     ;A
				N000;DBCS option active
 = 0004                      C	IN_UDBCS       EQU  0000000000000100B	     ;A
				N000;DBCS processed using user table
 = 0008                      C	IN_DDBCS       EQU  0000000000001000B	     ;A
				N000;DBCS processed using DOS table
 = 0010                      C	IN_UMONO       EQU  0000000000010000B	     ;A
				N000;monocase keys using user table
 = 0020                      C	IN_AMONO       EQU  0000000000100000B	     ;A
				N000;monocase keys using USA algorithm
 = 0040                      C	IN_LICBX       EQU  0000000001000000B	     ;A
				N000;load ICB off:seg and exit
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-151


 = 0080                      C	IN_LVBOV       EQU  0000000010000000B	     ;A
				N000;use video buffer seg:off override
			     C						     ;
 = 0001                      C	IN_RANG        EQU  0000000000000001B	     ;A
				N000;ICB ID out of vector range
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; Input Field Control Block Equates
			     C	;
			     C	; ICB_OPT1  Option word one equates
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	ICB_ECL 	EQU  0000000000000001B	      ;
				AN000;set specified color on entry
 = 0002                      C	ICB_XCL 	EQU  0000000000000010B	      ;
				AN000;set specified color on exit
 = 0004                      C	ICB_USC 	EQU  0000000000000100B	      ;
				AN000;use color attribute string
 = 0008                      C	ICB_BEN 	EQU  0000000000001000B	      ;
				AN000;display entry delimiters
 = 0010                      C	ICB_BEX 	EQU  0000000000010000B	      ;
				AN000;display exit delimiters
 = 0020                      C	ICB_BOX 	EQU  0000000000100000B	      ;
				AN000;display border delimiters
 = 0040                      C	ICB_MUS 	EQU  0000000001000000B	      ;
				AN000;plus and minus display active
 = 0080                      C	ICB_SMU 	EQU  0000000010000000B	      ;
				AN000;starting default is negative
 = 0100                      C	ICB_OUT 	EQU  0000000100000000B	      ;
				AN000;display default and accept input
 = 0200                      C	ICB_CLR 	EQU  0000001000000000B	      ;
				AN000;clear default on first entry
 = 0400                      C	ICB_PSW 	EQU  0000010000000000B	      ;
				AN000;password
 = 0800                      C	ICB_RJU 	EQU  0000100000000000B	      ;
				AN000;right justification is activated
 = 1000                      C	ICB_SWK 	EQU  0001000000000000B	      ;
				AN000;switch entry dir key active
 = 2000                      C	ICB_RTA 	EQU  0010000000000000B	      ;
				AN000;right arrow editing
 = 4000                      C	ICB_LFA 	EQU  0100000000000000B	      ;
				AN000;left arrow editing
 = 8000                      C	ICB_BKS 	EQU  1000000000000000B	      ;
				AN000;backspace editing
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; ICB_OPT2  Option word two equates
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	ICB_INS 	EQU  0000000000000001B	      ;
				AN000;insert key editing
 = 0002                      C	ICB_DEL 	EQU  0000000000000010B	      ;
				AN000;delete key editing
 = 0004                      C	ICB_HOM 	EQU  0000000000000100B	      ;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-152


				AN000;home key editing
 = 0008                      C	ICB_CTE 	EQU  0000000000001000B	      ;
				AN000;control + end key editing
 = 0010                      C	ICB_END 	EQU  0000000000010000B	      ;
				AN000;end key editing
 = 0020                      C	ICB_AXC 	EQU  0000000000100000B	      ;
				AN000;auto enter on cursor
 = 0040                      C	ICB_AXD 	EQU  0000000001000000B	      ;
				AN000;auto enter on data
 = 0080                      C	ICB_CSW 	EQU  0000000010000000B	      ;
				AN000;wrap the cursor end to end
 = 0100                      C	ICB_UPC 	EQU  0000000100000000B	      ;
				AN000;lower case to upper conversion
 = 0200                      C	ICB_UFK 	EQU  0000001000000000B	      ;
				AN000;use supplied keystroke as 1 key
 = 0400                      C	ICB_UDO 	EQU  0000010000000000B	      ;
				AN000;undo key replaces default
 = 0800                      C	ICB_TSD 	EQU  0000100000000000B	      ;
				AN000;thousands separators during inpu
 = 1000                      C	ICB_TSA 	EQU  0001000000000000B	      ;
				AN000;thousands separators after entry
 = 2000                      C	ICB_TSR 	EQU  0010000000000000B	      ;
				AN000;return thousand separators
 = 4000                      C	ICB_PAD 	EQU  0100000000000000B	      ;
				AN000;pad zeros to precision
 = 8000                      C	ICB_WRP 	EQU  1000000000000000B	      ;
				AN000;word wrap in windowed field
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; ICB_OPT3  Option word three equates
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	ICB_WIN        EQU  0000000000000001B	     ;A
				N000;windowing wrap of field
 = 0002                      C	ICB_WAE        EQU  0000000000000010B	     ;A
				N000;up and down arrow editing
 = 0004                      C	ICB_TBX        EQU  0000000000000100B	     ;A
				N000;exit if arrows reach top/bottom
 = 0008                      C	ICB_HOR        EQU  0000000000001000B	     ;A
				N000;horizontial windowing
 = 0010                      C	ICB_WHM        EQU  0000000000010000B	     ;A
				N000;full window Home key
 = 0020                      C	ICB_WEN        EQU  0000000000100000B	     ;A
				N000;full window End key
 = 0040                      C	ICB_WCE        EQU  0000000001000000B	     ;A
				N000;full window Ctrl-End key
 = 0080                      C	ICB_WDL        EQU  0000000010000000B	     ;A
				N000;full window Delete key
 = 0100                      C	ICB_WAR        EQU  0000000100000000B	     ;A
				N000;full window arrow keys
 = 0200                      C	ICB_WBS        EQU  0000001000000000B	     ;A
				N000;full window backspace key
 = 0400                      C	ICB_FGS        EQU  0000010000000000B	     ;A
				N000;use the ICB_STATUS status values
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-153


 = 0800                      C	ICB_SCR        EQU  0000100000000000B	     ;A
				N000;display of scroll flag active
 = 1000                      C	ICB_NUM        EQU  0001000000000000B	     ;A
				N000;display of numlock flag active
 = 2000                      C	ICB_CAP        EQU  0010000000000000B	     ;A
				N000;display of caps flag active
 = 4000                      C	ICB_FIN        EQU  0100000000000000B	     ;A
				N000;display of insert flag active
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; ICB_STATUS status word equates
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	ICB_SDEF       EQU  0000000000000001B	     ;A
				N000;default value changed
 = 0002                      C	ICB_SMUS       EQU  0000000000000010B	     ;A
				N000;minus sign active
 = 0004                      C	ICB_SPUS       EQU  0000000000000100B	     ;A
				N000;plus sign active
 = 0008                      C	ICB_STRU       EQU  0000000000001000B	     ;A
				N000;default value was truncated
 = 0010                      C	ICB_SSCR       EQU  0000000000010000B	     ;A
				N000;scroll lock flag on at exit/entry
 = 0020                      C	ICB_SNUM       EQU  0000000000100000B	     ;A
				N000;num lock flag on at exit/entry
 = 0040                      C	ICB_SCAP       EQU  0000000001000000B	     ;A
				N000;caps lock flag on at exit/entry
 = 0080                      C	ICB_SINS       EQU  0000000010000000B	     ;A
				N000;insert flag on at exit/entry
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCWWRAP option bit equates (WWP_OPT1)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	WWP_LEFTJUST   EQU  0000000000000001B	     ;A
				N000;process with left straight edge
 = 0002                      C	WWP_RIGHTJUST  EQU  0000000000000010B	     ;A
				N000;process with right straight edge
 = 0004                      C	WWP_LEFTNRIGHT EQU  0000000000000100B	     ;A
				N000;process with left and right edge
 = 0008                      C	WWP_HYPHEN     EQU  0000000000001000B	     ;A
				N000;hyphenate word(s)
 = 0010                      C	WWP_DESTBUFFER EQU  0000000000010000B	     ;A
				N000;Use specified destination buffer
 = 0020                      C	WWP_SRCBUFFER  EQU  0000000000100000B	     ;A
				N000;Use the same buf as the text
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCWWRAP error bit equates (WWP_ERROR)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	WWP_BUFSIZE    EQU  0000000000000001B	     ;A
				N000;buffer size is too small
 = 0002                      C	WWP_DUPSYMBOL  EQU  0000000000000010B	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-154


				N000;WWP_HYSMBOL and WWP_SRCHYSMB
			     C						     ; 
				are set to same character
 = 0004                      C	WWP_LONGWORD   EQU  0000000000000100B	     ;A
				N000;word is longer than WWP_WIDTH
 = 0008                      C	WWP_NOBUFFER   EQU  0000000000001000B	     ;A
				N000;no address to src or dest buf
 = 0010                      C	WWP_NOJUSTOPT  EQU  0000000000010000B	     ;A
				N000;no justification option was set
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; Help options (WR_HLPOPT, WR_HLPPAN, WR_HLPDIS
				)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0001                      C	HLP_CONT       EQU  0000000000000001B	     ;A
				N000;contextual help
 = 0002                      C	HLP_KEYS       EQU  0000000000000010B	     ;A
				N000;keys help
 = 0004                      C	HLP_HELP       EQU  0000000000000100B	     ;A
				N000;help-on-help
 = 0008                      C	HLP_INDX       EQU  0000000000001000B	     ;A
				N000;help index
 = 0010                      C	HLP_OVER       EQU  0000000000010000B	     ;A
				N000;help row and column overrides
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; Internal equates
			     C	;
			     C	;
			     C	; Internal keystroke equates
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 4800                      C	UPARROW        EQU  72*256		     ;A
				N000;up arrow
 = 5000                      C	DNARROW        EQU  80*256		     ;A
				N000;down arrow
 = 4B00                      C	LFARROW        EQU  75*256		     ;A
				N000;left arrow
 = 4D00                      C	RTARROW        EQU  77*256		     ;A
				N000;right arrow
 = 0049                      C	PGUP	       EQU  73			     ;A
				N000;
 = 0051                      C	PGDN	       EQU  81			     ;A
				N000;
 = 001B                      C	ESCAPE	       EQU  27			     ;A
				N000;
 = 000D                      C	ENTER	       EQU  13			     ;A
				N000;
 = 0020                      C	SPACE	       EQU  32			     ;A
				N000;
 = 0009                      C	TAB	       EQU   9			     ;A
				N000;
 = 003B                      C	F1	       EQU  59			     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-155


				N000;
 = 003C                      C	F2	       EQU  60			     ;A
				N000;
 = 003D                      C	F3	       EQU  61			     ;A
				N000;
 = 003E                      C	F4	       EQU  62			     ;A
				N000;
 = 003F                      C	F5	       EQU  63			     ;A
				N000;
 = 0040                      C	F6	       EQU  64			     ;A
				N000;
 = 0041                      C	F7	       EQU  65			     ;A
				N000;
 = 0042                      C	F8	       EQU  66			     ;A
				N000;
 = 0043                      C	F9	       EQU  67			     ;A
				N000;
 = 0044                      C	F10	       EQU  68			     ;A
				N000;
					INCLUDE    CASTRUC.INC		;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;	CASTRUC.INC
			     C	;
			     C	;
			     C	;
			     C	;
			     C	;
			     C	; PCPANEL PCB Structure
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	PCB_PB	       STRUC			     ;A
				N000;
 0000  0000                  C	PCB_OPT1       DW   0			     ;A
				N000;option word
 0002  00                    C	PCB_OPT2       DB   0			     ;A
				N000;option 2 added
 0003  00                    C	PCB_OPT3       DB   0			     ;A
				N000;option 3 added
 0004  00                    C	PCB_OPT4       DB   0			     ;A
				N000;option 4 added
 0005  0000                  C	PCB_UROW       DW   0			     ;A
				N000;row location of panel
 0007  0000                  C	PCB_UCOL       DW   0			     ;A
				N000;column location of panel
 0009  0000                  C	PCB_WIDTH      DW   0			     ;A
				N000;text char width of panel
 000B  0000                  C	PCB_MAXSIZE    DW   0			     ;A
				N000;Max poss panel sizing in text
 000D  0000                  C	PCB_CCBID      DW   0			     ;A
				N000;Index number of log color
 000F  0008[                 C	PCB_BORDER     DB   8  DUP(0)		     ;A
				N000;8 log border characters
	   00                C	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-156


			 ]   C	
			     C	
 0017  0000                  C	PCB_COMPLEN    DW   0			     ;A
				N000;Length compress panel in mem
 0019  0000                  C	PCB_COMPOFF    DW   0			     ;A
				N000;Off addr compressed panel
 001B  0000                  C	PCB_COMPSEG    DW   0			     ;A
				N000;Seg addr compressed panel
 001D  0000                  C	PCB_EXPANDLEN  DW   0			     ;A
				N000;Length expanded panel in mem
 001F  0000                  C	PCB_EXPANDOFF  DW   0			     ;A
				N000;Off addr of expanded panel in
 0021  0000                  C	PCB_EXPANDSEG  DW   0			     ;A
				N000;Seg addr of expanded panel in
 0023  0000                  C	PCB_MIXEDLEN   DW   0			     ;A
				N000;Len of the mixed panel in mem
 0025  0000                  C	PCB_MIXEDOFF   DW   0			     ;A
				N000;Off addr of mixed panel in mem
 0027  0000                  C	PCB_MIXEDSEG   DW   0			     ;A
				N000;Seg addr of mixed panel in mem
 0029  0000                  C	PCB_LABELLEN   DW   0			     ;A
				N000;Len of the panel label
 002B  0000                  C	PCB_LABELOFF   DW   0			     ;A
				N000;Off addr of the panel label
 002D  0000                  C	PCB_LABELSEG   DW   0			     ;A
				N000;Seg addr of the panel label
 002F  0000                  C	PCB_LABELROW   DW   0			     ;A
				N000;Beg row of title relative to pan
 0031  0000                  C	PCB_LABELCOL   DW   0			     ;A
				N000;Beg col of title relative to pan
 0033  0000                  C	PCB_FPANLEN    DW   0			     ;A
				N000;Len of the panel stored in file
 0035  0000                  C	PCB_FNAMEOFF   DW   0			     ;A
				N000;Off address of full filespec
 0037  0000                  C	PCB_FNAMESEG   DW   0			     ;A
				N000;Seg address of full filespec
 0039  0000                  C	PCB_FTEXTLOCL  DW   0			     ;A
				N000;Lower off word of the beg off
 003B  0000                  C	PCB_FTEXTLOCH  DW   0			     ;A
				N000;High off word of the beg off
 003D  0000                  C	PCB_LROW       DW   0			     ;A
				N000;lower right corner (graphs only)
 003F  0000                  C	PCB_LCOL       DW   0			     ;A
				N000;lower left corner (graphs only)
 0041  00                    C	PCB_VERTSHADE  DB   0			     ;A
				N000;vertical shadow mask (grap only)
 0042  00                    C	PCB_HORZSHADE  DB   0			     ;A
				N000;horizontal shadow mask (graphs)
 0043  0000                  C	PCB_GFILLOFF   DW   0			     ;A
				N000;offset of wind char fill bit map
 0045  0000                  C	PCB_GFILLSEG   DW   0			     ;A
				N000;segmnt of wind char fill bit map
 0047  0000                  C	PCB_SCRSV1OFF  DW   0			     ;A
				N000;off scr buffer save 10H, 12H
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-157


 0049  0000                  C	PCB_SCRSV2OFF  DW   0			     ;A
				N000;off scr buffer save 11H
 004B  0000                  C	PCB_SCRSAVSEG  DW   0			     ;A
				N000;segment of screen buffer save
 004D  0000                  C	PCB_RESERVED   DW   0			     ;A
				N000;reserved
 004F  0000                  C	PCB_CHILDNUM   DW   0			     ;A
				N000;Number of child panel entries
 0051  0000                  C	PCB_CHILDOFF   DW   0			     ;A
				N000;Off address of child panel table
 0053  0000                  C	PCB_CHILDSEG   DW   0			     ;A
				N000;Seg address of child panel table
 0055                        C	PCB_PB	       ENDS			     ;A
				N000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCSLCTP Structure
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	SCB_PB	       STRUC			     ;A
				N000;
 0000  0000                  C	SCB_OPT1       DW   0			     ;A
				N000;option word one
 0002  0000                  C	SCB_OPT2       DW   0			     ;A
				N000;option word two
 0004  0000                  C	SCB_OPT3       DW   0			     ;A
				N000;option word three
 0006  0000                  C	SCB_OPT4       DW   0			     ;A
				N068;SEH option word four
 0008  0000                  C	SCB_FREQ       DW   0			     ;A
				N000;error beep frequency
 000A  0000                  C	SCB_ROW        DW   0			     ;A
				N000;upper left row
 000C  0000                  C	SCB_COL        DW   0			     ;A
				N000;upper left column
 000E  0000                  C	SCB_RELROW     DW   0			     ;A
				N000;relative upper left row
 0010  0000                  C	SCB_RELCOL     DW   0			     ;A
				N000;relative upper left column
 0012  0000                  C	SCB_WIDTH      DW   0			     ;A
				N000;line width
 0014  0000                  C	SCB_NUMLINE    DW   0			     ;A
				N000;number of lines
 0016  0000                  C	SCB_TOPELE     DW   0			     ;A
				N000;number of element on top
 0018  0000                  C	SCB_NUMELE     DW   0			     ;A
				N000;number of elements
 001A  0000                  C	SCB_CURELE     DW   0			     ;A
				N000;current element
 001C  0000                  C	SCB_NUMCOL     DW   0			     ;A
				N000;maximun number of cols to scroll
 001E  0000                  C	SCB_CURCOL     DW   0			     ;A
				N000;display offset into opt strings
 0020  0000                  C	SCB_NLISTCOL   DW   0			     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-158


				N000;num list txt col offset in strg
 0022  00                    C	SCB_NLISTSEP   DB   0			     ;A
				N000;numbered list separator
 0023  0000                  C	SCB_SKLEN      DW   0			     ;A
				N000;select keystroke string length
 0025  0000                  C	SCB_SKOFF      DW   0			     ;A
				N000;select keystroke string offset
 0027  0000                  C	SCB_SKSEG      DW   0			     ;A
				N000;select keystroke string segment
 0029  0000                  C	SCB_RLLEN      DW   0			     ;A
				N000;return/leave string length
 002B  0000                  C	SCB_RLOFF      DW   0			     ;A
				N000;return/leave string offset
 002D  0000                  C	SCB_RLSEG      DW   0			     ;A
				N000;return/leave string segment
 002F  0000                  C	SCB_RELEN      DW   0			     ;A
				N000;return/erase string length
 0031  0000                  C	SCB_REOFF      DW   0			     ;A
				N000;return/erase string offset
 0033  0000                  C	SCB_RESEG      DW   0			     ;A
				N000;return/erase string segment
 0035  0000                  C	SCB_UALEN      DW   0			     ;A
				N000;up arrow string length
 0037  0000                  C	SCB_UAOFF      DW   0			     ;A
				N000;up arrow string offset
 0039  0000                  C	SCB_UASEG      DW   0			     ;A
				N000;up arrow string segment
 003B  0000                  C	SCB_DALEN      DW   0			     ;A
				N000;down arrow string length
 003D  0000                  C	SCB_DAOFF      DW   0			     ;A
				N000;down arrow string offset
 003F  0000                  C	SCB_DASEG      DW   0			     ;A
				N000;down arrow string segment
 0041  0000                  C	SCB_LALEN      DW   0			     ;A
				N000;left arrow string length
 0043  0000                  C	SCB_LAOFF      DW   0			     ;A
				N000;left arrow string offset
 0045  0000                  C	SCB_LASEG      DW   0			     ;A
				N000;left arrow string segment
 0047  0000                  C	SCB_RALEN      DW   0			     ;A
				N000;right arrow string length
 0049  0000                  C	SCB_RAOFF      DW   0			     ;A
				N000;right arrow string offset
 004B  0000                  C	SCB_RASEG      DW   0			     ;A
				N000;right arrow string segment
 004D  0000                  C	SCB_PULEN      DW   0			     ;A
				N000;page-up string length
 004F  0000                  C	SCB_PUOFF      DW   0			     ;A
				N000;page-up string offset
 0051  0000                  C	SCB_PUSEG      DW   0			     ;A
				N000;page-up string segment
 0053  0000                  C	SCB_PDLEN      DW   0			     ;A
				N000;page-down string length
 0055  0000                  C	SCB_PDOFF      DW   0			     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-159


				N000;page-down string offset
 0057  0000                  C	SCB_PDSEG      DW   0			     ;A
				N000;page-down string segment
 0059  0000                  C	SCB_PILEN      DW   0			     ;A
				N000;pointer indicator strg length
 005B  0000                  C	SCB_PIOFF      DW   0			     ;A
				N000;pointer indicator string offset
 005D  0000                  C	SCB_PISEG      DW   0			     ;A
				N000;pointer indicator string segment
 005F  0000                  C	SCB_PICOL      DW   0			     ;A
				N000;pointer ind txt col off into stg
 0061  0000                  C	SCB_AILEN      DW   0			     ;A
				N000;active indicator strg length
 0063  0000                  C	SCB_AIOFF      DW   0			     ;A
				N000;active indicator string offset
 0065  0000                  C	SCB_AISEG      DW   0			     ;A
				N000;active indicator string segment
 0067  0000                  C	SCB_AICOL      DW   0			     ;A
				N000;active ind txt col off into stg
 0069  0000                  C	SCB_CILEN      DW   0			     ;A
				N000;check mark text string length
 006B  0000                  C	SCB_CIOFF      DW   0			     ;A
				N000;check mark text string offset
 006D  0000                  C	SCB_CISEG      DW   0			     ;A
				N000;check mark text string segment
 006F  0000                  C	SCB_CICOL      DW   0			     ;A
				N000;check mark offset into opt strg
 0071  0000                  C	SCB_UILEN      DW   0			     ;A
				N000;up indicator string length
 0073  0000                  C	SCB_UIOFF      DW   0			     ;A
				N000;up indicator string offset
 0075  0000                  C	SCB_UISEG      DW   0			     ;A
				N000;up indicator string segment
 0077  0000                  C	SCB_UIROW      DW   0			     ;A
				N000;up indicator row location
 0079  0000                  C	SCB_UICOL      DW   0			     ;A
				N000;up indicator column location
 007B  0000                  C	SCB_DILEN      DW   0			     ;A
				N000;down indicator string length
 007D  0000                  C	SCB_DIOFF      DW   0			     ;A
				N000;down indicator string offset
 007F  0000                  C	SCB_DISEG      DW   0			     ;A
				N000;down indicator string segment
 0081  0000                  C	SCB_DIROW      DW   0			     ;A
				N000;down indicator row location
 0083  0000                  C	SCB_DICOL      DW   0			     ;A
				N000;down indicator column locaiton
 0085  0000                  C	SCB_LILEN      DW   0			     ;A
				N000;left indicator string length
 0087  0000                  C	SCB_LIOFF      DW   0			     ;A
				N000;left indicator string offset
 0089  0000                  C	SCB_LISEG      DW   0			     ;A
				N000;left indicator string segment
 008B  0000                  C	SCB_LIROW      DW   0			     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-160


				N000;left indicator row location
 008D  0000                  C	SCB_LICOL      DW   0			     ;A
				N000;left indicator column location
 008F  0000                  C	SCB_RILEN      DW   0			     ;A
				N000;right indicator string length
 0091  0000                  C	SCB_RIOFF      DW   0			     ;A
				N000;right indicator string offset
 0093  0000                  C	SCB_RISEG      DW   0			     ;A
				N000;right indicator string segment
 0095  0000                  C	SCB_RIROW      DW   0			     ;A
				N000;right indicator row location
 0097  0000                  C	SCB_RICOL      DW   0			     ;A
				N000;right indicator column locaiton
 0099  0000                  C	SCB_NCRAYOFF   DW   0			     ;A
				N000;normal color array offset
 009B  0000                  C	SCB_NCRAYSEG   DW   0			     ;A
				N000;normal color array segment
 009D  0000                  C	SCB_CCBID      DW   0			     ;A
				N000;logical color index number
 009F  0000                  C	SCB_CCBVECNUM  DW   0			     ;A
				N000;number color index table entries
 00A1  0000                  C	SCB_CCBVECOFF  DW   0			     ;A
				N000;offset addr of color index table
 00A3  0000                  C	SCB_CCBVECSEG  DW   0			     ;A
				N000;segment addr of color index tabl
 00A5  0000                  C	SCB_INDEXOFF   DW   0			     ;A
				N000;index array offset
 00A7  0000                  C	SCB_INDEXSEG   DW   0			     ;A
				N000;index array segment
 00A9  0000                  C	SCB_SELOFF     DW   0			     ;A
				N000;element selection array offset
 00AB  0000                  C	SCB_SELSEG     DW   0			     ;A
				N000;element selection array segment
 00AD  0000                  C	SCB_OAOPT      DW   0			     ;A
				N000;option array option word
 00AF  0000                  C	SCB_OAPOFF     DW   0			     ;A
				N000;option array pointer offset
 00B1  0000                  C	SCB_OAPSEG     DW   0			     ;A
				N000;option array pointer segment
 00B3  0000                  C	SCB_OASLEN     DW   0			     ;A
				N000;option array string length
 00B5  0000                  C	SCB_OASSEG     DW   0			     ;A
				N000;option array string segment
 00B7  00                    C	SCB_OASTERMC   DB   0			     ;A
				N000;option array string term char
 00B8  0000                  C	SCB_KS	       DW   0			     ;A
				N000;keystroke
 00BA  0000                  C	SCB_LVBOFF     DW   0			     ;A
				N000;log vid buf offset override
 00BC  0000                  C	SCB_LVBSEG     DW   0			     ;A
				N000;log vid buf segment override
 00BE  0000                  C	SCB_FMOPT1     DW   0			     ;A
				N000;general purpose format hook opt
 00C0  0000                  C	SCB_FMOPT2     DW   0			     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-161


				N000;general purpose format hook opt
 00C2  0000                  C	SCB_TRANLEN    DW   0			     ;A
				N000;length of translation table
 00C4  0000                  C	SCB_TRANOFF    DW   0			     ;A
				N000;offset of translation table
 00C6  0000                  C	SCB_TRANSEG    DW   0			     ;A
				N000;segment of translation table
 00C8  0000                  C	SCB_MONOOFF    DW   0			     ;A
				N000;monocasing table offset
 00CA  0000                  C	SCB_MONOSEG    DW   0			     ;A
				N000;monocasing table segment
 00CC  0000                  C	SCB_DBCSLEN    DW   0			     ;A
				N000;dbcs table length
 00CE  0000                  C	SCB_DBCSOFF    DW   0			     ;A
				N000;dbcs table offset
 00D0  0000                  C	SCB_DBCSSEG    DW   0			     ;A
				N000;dbcs table segment
 00D2  0000                  C	SCB_FONTOFF    DW   0			     ;A
				N068;SEH offset of font descriptor block
 00D4  0000                  C	SCB_FONTSEG    DW   0			     ;A
				N068;SEH segment of font descriptor block
 00D6                        C	SCB_PB	       ENDS			     ;A
				N000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	CHD_PB	STRUC				     ;A
				N000;
 0000  0000                  C	CHD_PCB DW	0			     ;A
				N000;child PCB element number
 0002  0000                  C	CHD_ROW DW	0			     ;A
				N000;row override
 0004  0000                  C	CHD_COL DW	0			     ;A
				N000;column override
 0006  0000                  C	CHD_INX DW	0			     ;A
				N000;color index pointer override
 0008  0000                  C		DW	0			     ;A
				N000;function key attribute
 000A  00 00                 C		DB	0,0			     ;A
				N000;keystroke associated with child
 000C  0000                  C		DW	0			     ;A
				N000;option word
 000E                        C	CHD_PB	ENDS				     ;A
				N000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; Input Field Control Block (ICB) Structure
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	ICB_PB	       STRUC			     ;A
				N000;begin input field control block
 0000  0000                  C	ICB_OPT1       DW   0			     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-162


				N000;option word one
 0002  0000                  C	ICB_OPT2       DW   0			     ;A
				N000;option word two
 0004  0000                  C	ICB_OPT3       DW   0			     ;A
				N000;option word three
 0006  0000                  C	ICB_OPT4       DW   0			     ;A
				N000;option word four
 0008  0000                  C	ICB_ROW        DW   0			     ;A
				N000;upper left corner field row
 000A  0000                  C	ICB_COL        DW   0			     ;A
				N000;upper left corner field column
 000C  0000                  C	ICB_WIDTH      DW   0			     ;A
				N000;number of chars before wrapping
 000E  0000                  C	ICB_CCBID      DW   0			     ;A
				N000;color index number assigned
 0010  0000                  C	ICB_STATUS     DW   0			     ;A
				N000;default change/minus status
 0012  0000                  C	ICB_CURCHAR    DW   0			     ;A
				N000;cursor character pos in field
 0014  0000                  C	ICB_HRSTART    DW   0			     ;A
				N000;NEW ADD...Hor scroll support
 0016  0000                  C	ICB_SOUND      DW   0			     ;A
				N000;frequency of error beep
 0018  0000                  C	ICB_KEYRET     DW   0			     ;A
				N000;ASCII code of the key returned
 001A  0000                  C	ICB_ENDBYTE    DW   0			     ;A
				N000;length of data entered into fld
 001C  0000                  C	ICB_FIELDLEN   DW   0			     ;A
				N000;length of input field
 001E  0000                  C	ICB_FIELDOFF   DW   0			     ;A
				N000;offset of input field
 0020  0000                  C	ICB_FIELDSEG   DW   0			     ;A
				N000;segment of input field
 0022  0000                  C	ICB_ATTROFF    DW   0			     ;A
				N000;offset of color attribute buffer
 0024  0000                  C	ICB_ATTRSEG    DW   0			     ;A
				N000;segment of color attr buffer
 0026  0000                  C	ICB_DEFLEN     DW   0			     ;A
				N000;length of field's default value
 0028  0000                  C	ICB_DEFOFF     DW   0			     ;A
				N000;offset field's default value
 002A  0000                  C	ICB_DEFSEG     DW   0			     ;A
				N000;segment field's default value
 002C  0000                  C	ICB_RETLEN     DW   0			     ;A
				N000;length of return string
 002E  0000                  C	ICB_RETOFF     DW   0			     ;A
				N000;offset of return string
 0030  0000                  C	ICB_RETSEG     DW   0			     ;A
				N000;segment of return string
 0032  0000                  C	ICB_ALLLEN     DW   0			     ;A
				N000;length of allow chars
 0034  0000                  C	ICB_ALLOFF     DW   0			     ;A
				N000;offset of allow chars
 0036  0000                  C	ICB_ALLSEG     DW   0			     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-163


				N000;segment of allow chars
 0038  0000                  C	ICB_SKIPLEN    DW   0			     ;A
				N000;length of skip chars
 003A  0000                  C	ICB_SKIPOFF    DW   0			     ;A
				N000;offset of skip chars
 003C  0000                  C	ICB_SKIPSEG    DW   0			     ;A
				N000;segment of skip chars
 003E  0000                  C	ICB_ALL1LEN    DW   0			     ;A
				N000;length of allow once chars
 0040  0000                  C	ICB_ALL1OFF    DW   0			     ;A
				N000;offset of allow once chars
 0042  0000                  C	ICB_ALL1SEG    DW   0			     ;A
				N000;segment of allow once chars
 0044  0000                  C	ICB_DECPOS     DW   0			     ;A
				N000;precision of decimal point
 0046  0000                  C	ICB_RANUML1    DW   0			     ;A
				N000;low numeric range (low intrgr)
 0048  0000                  C	ICB_RANUMH1    DW   0			     ;A
				N000;low numeric range (high intrgr)
 004A  0000                  C	ICB_RANUML2    DW   0			     ;A
				N000;high numeric range (low intrgr)
 004C  0000                  C	ICB_RANUMH2    DW   0			     ;A
				N000;high numeric range (high intrgr)
 004E  0000                  C	ICB_MANDPROW   DW   0			     ;A
				N000;beginning row of minus and plus
 0050  0000                  C	ICB_MANDPCOL   DW   0			     ;A
				N000;beginning col of minus & plus
 0052  0000                  C	ICB_MINUSLEN   DW   0			     ;A
				N000;length of minus sign string
 0054  0000                  C	ICB_MINUSOFF   DW   0			     ;A
				N000;offset of minus sign string
 0056  0000                  C	ICB_MINUSSEG   DW   0			     ;A
				N000;segment of minus sign string
 0058  0000                  C	ICB_PLUSLEN    DW   0			     ;A
				N000;length of plus sign string
 005A  0000                  C	ICB_PLUSOFF    DW   0			     ;A
				N000;offset of plus sign string
 005C  0000                  C	ICB_PLUSSEG    DW   0			     ;A
				N000;segment of plus sign string
 005E                        C	ICB_PB	       ENDS			     ;A
				N000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
					INCLUDE    DATA.MAC		;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;
			     C	;
			     C	;	DATA.MAC
			     C	;
			     C	;
			     C	; Define data segment
			     C	;
			     C	;  The following variables are defined in the d
				ata segment and are used as
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-164


			     C	;  parameter block structures for specific CAS 
				routine calls.  The
			     C	;  initialization of these variables will event
				ually occur by the dialog.
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;;;;;;;;;;;;;;;;;
			     C						
							;
			     C		PUBLIC	QM_OPT1,QM_ID		
							;AN000;
			     C		PUBLIC	WR_DRETLEN,WR_DRETOFF,WR_DATA2L
				EN		;AN000;
			     C		PUBLIC	WR_MAXMEMPAR,WR_DATA2SEG,WR_DAT
				A2OFF		;AN000;
			     C		PUBLIC	WR_LVBMEM,WR_LVBSEG,WR_LVBOFF,W
				R_LVBLEN 	;AN000;
			     C		PUBLIC	WR_ERROR,PM_BASECHAR,PM_BASEATT
				R,QM_ACTIVEPAN	;AN000;
			     C		PUBLIC	WR_DRETSEG,QM_OPT2	
							;AN000;
			     C		PUBLIC	CRD_CCBVECOFF,CRD_CCBVECSEG,INC
				_KS		;AN000;
			     C		PUBLIC	IN_ICBID,WR_REFBUF	
							;AN000;
			     C		PUBLIC	WR_HLPOPT,WR_HLPROW,WR_HCBCONT,
				WR_SCBID 	;AN000;
			     C		PUBLIC	IN_CCBVECOFF,IN_CCBVECSEG
							;AN000;
			     C		PUBLIC WR_REFNUM,WR_REFOFF,WR_REFSEG,WR
				_REFCNT		;AN000;
			     C		PUBLIC WR_REFIELDCNT,WR_REFID	
							;AN000;
			     C		PUBLIC WR_MAXREFID		
							;AN000;
			     C		PUBLIC WR_MAXHELPSZ		
							;AN000;
			     C		PUBLIC HRD_BUFSEG		
							;AN000;
			     C		PUBLIC HRD_BUFOFF		
							;AN000;
			     C		PUBLIC HRD_BUFLEN		
							;AN000;
			     C		PUBLIC IN_CURNOR		;AN000;
				JW
			     C						;
 0000                        C	DATA	SEGMENT BYTE PUBLIC 'DATA'      ;AN000;
			     C						;
			     C		EXTRN	WR_ICBVEC:WORD		;AN000;
			     C		EXTRN	KD_BACKSPACE:BYTE	;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCGVIDO Parameter Block
			     C	;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-165


			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0000  0000                  C	GV_STAT1       DW   0			;AN000;
				low bit flag indicating status
 0002  0000                  C	GV_STAT2       DW   0			;AN000;
				high bit flag indicating status
 0004  0000                  C	GV_SCRWIDTH    DW   0			;AN000;
				# of attr and char in one line
 0006  0000                  C	GV_SCRLEN      DW   0			;AN000;
				# of bytes per video buffer page
 0008  00                    C	GV_CURPAGENUM  DB   0			;AN000;
				current active page
 0009  00                    C	GV_VIDMODE     DB   0			;AN000;
				current video state/mode
 000A  0000                  C	GV_BASE_6845   DW   0			;AN000;
				base port address of 6845
 000C  0000                  C	GV_STAT_6845   DW   0			;AN000;
				status port address of 6845
 000E  0000                  C	GV_PHYOFF      DW   0			;AN000;
				phy video buffer offset
 0010  0000                  C	GV_PHYOFFPAGE  DW   0			;AN000;
				phys vid buf off adj for page
 0012  0000                  C	GV_PHYSEG      DW   0			;AN000;
				phy video buffer segment
 0014  0000                  C	GV_OSLOGOFF    DW   0			;AN000;
				operating sys log vid buff os
 0016  0000                  C	GV_OSLOGSEG    DW   0			;AN000;
				operating sys log vid buff seg
 0018  0000                  C	GV_APLOGOFF    DW   0			;AN000;
				application log vid buf offset
 001A  0000                  C	GV_APLOGSEG    DW   0			;AN000;
				application log vid buf segment
 001C  0000                  C	GV_CSH	       DW   0			;AN000;
				character height in scan lines
 001E  0000                  C	GV_CSW	       DW   0			;AN000;
				character width in scan lines
 0020  0000                  C	GV_NUMLINES    DW   0			;AN000;
				number of rows in text screen
 0022  0000                  C	GV_CURPOS0     DW   0			;AN000;
				cursor position for page 0  R/C
 0024  0000                  C	GV_CURPOS1     DW   0			;AN000;
				cursor position for page 1
 0026  0000                  C	GV_CURPOS2     DW   0			;AN000;
				cursor position for page 2
 0028  0000                  C	GV_CURPOS3     DW   0			;AN000;
				cursor position for page 3
 002A  0000                  C	GV_CURPOS4     DW   0			;AN000;
				cursor position for page 4
 002C  0000                  C	GV_CURPOS5     DW   0			;AN000;
				cursor position for page 5
 002E  0000                  C	GV_CURPOS6     DW   0			;AN000;
				cursor position for page 6
 0030  0000                  C	GV_CURPOS7     DW   0			;AN000;
				cursor position for page 7
 0032  0000                  C	GV_CURMOD0     DW   0			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-166


				cursor mode for page 0
 0034  0000                  C	GV_CURMOD1     DW   0			;AN000;
				cursor mode for page 1
 0036  0000                  C	GV_CURMOD2     DW   0			;AN000;
				cursor mode for page 2
 0038  0000                  C	GV_CURMOD3     DW   0			;AN000;
				cursor mode for page 3
 003A  0000                  C	GV_CURMOD4     DW   0			;AN000;
				cursor mode for page 4
 003C  0000                  C	GV_CURMOD5     DW   0			;AN000;
				cursor mode for page 5
 003E  0000                  C	GV_CURMOD6     DW   0			;AN000;
				cursor mode for page 6
 0040  0000                  C	GV_CURMOD7     DW   0			;AN000;
				cursor mode for page 7
 0042  0000                  C	GV_CURROW      DW   0			;AN000;
				cursor row location
 0044  0000                  C	GV_CURCOL      DW   0			;AN000;
				cursor column location
 0046  0000                  C	GV_CURSTART    DW   0			;AN000;
				cursor size (starline)
 0048  0000                  C	GV_CUREND      DW   0			;AN000;
				cursor size (endline)
 004A  0000                  C	GV_CURWIDTH    DW   0			;AN000;
				cursor width
 004C  0000                  C	GV_CURATTR     DW   0			;AN000;
				cursor attribute
 004E  00                    C	GV_COLORBITS   DB   0			;AN000;
				color bits (graphics mode)
 004F  0000                  C	GV_ERRCODE     DW   0			;AN000;
				error code
 0051  0028[                 C	GV_RESERVED    DB   40 DUP(0)		;AN000;
				reserved locations
	   00                C	
			 ]   C	
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCINSTR parameter block
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0079  0000                  C	INS_OPT        DW   0			;AN000;
				option word
 007B  0000                  C	INS_KS	       DW   0			;AN000;
				keystroke
 007D  0000                  C	INS_FLEN       DW   0			;AN000;
				length of find string
 007F  0000                  C	INS_FOFF       DW   0			;AN000;
				offset of find string
 0081  0000                  C	INS_FSEG       DW   0			;AN000;
				segment of find string
 0083  0000                  C	INS_SLEN       DW   0			;AN000;
				length of string to search
 0085  0000                  C	INS_SOFF       DW   0			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-167


				offset of string to search
 0087  0000                  C	INS_SSEG       DW   0			;AN000;
				segment of string to search
 0089  0000                  C	INS_SPOFF      DW   0			;AN000;
				position to start seach
 008B  0000                  C	INS_RSLT       DW   0			;AN000;
				result
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCHLPRD parameter block
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 008D  0000                  C	HRD_OPT1       DW   0			;AN000;
				option word
 008F  0000                  C	HRD_BUFLEN     DW   0			;AN000;
				length of avail buffer
 0091  0000                  C	HRD_BUFOFF     DW   0			;AN000;
				offset of buffer
 0093  0000                  C	HRD_BUFSEG     DW   0			;AN000;
				segment of buffer
 0095  0000                  C	HRD_ID	       DW   0			;AN000;
				ID of help text
 0097  06D4 R                C	HRD_FILSPOFF   DW   WR_HLPBUF		;AN000;
				offset of filespec
 0099  ---- R                C	HRD_FILSPSEG   DW   DATA		;AN000;
				segment of filespec
 009B  0000                  C	HRD_TOPICNUM   DW   0			;AN000;
				max num of helps
 009D  0000                  C	HRD_TOPICLEN   DW   0			;AN000;
				Length of longest topic
 009F  0000                  C	HRD_TOPICOFF   DW   0			;AN000;
				offset to table of offsets
 00A1  0000                  C	HRD_TOPICSEG   DW   0			;AN000;
				segment to table of offsets
 00A3  0000                  C	HRD_TEXTLEN    DW   0			;AN000;
				Length of help text
 00A5  0000                  C	HRD_TEXTOFF    DW   0			;AN000;
				offset to help text
 00A7  0000                  C	HRD_TEXTSEG    DW   0			;AN000;
				Segment to help text
 00A9  0000                  C	HRD_ERROR      DW   0			;AN000;
				errors
 00AB  0000                  C	HRD_DOSERROR   DW   0			;AN000;
				DOS error conditions
 00AD  0030[                 C	HRD_RESERVED   DB   48	DUP(0)		;AN000;
				reserved for internal use
	   00                C	
			 ]   C	
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCSCRRD parameter block
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-168


 00DD  0000                  C	SRD_OPT1       DW   0			;AN000;
				option word
 00DF  0000                  C	SRD_BUFLEN     DW   0			;AN000;
				length of avail buffer
 00E1  0000                  C	SRD_BUFOFF     DW   0			;AN000;
				offset of buffer
 00E3  0000                  C	SRD_BUFSEG     DW   0			;AN000;
				segment of buffer
 00E5  0000                  C	SRD_ID	       DW   0			;AN000;
				ID number to read
 00E7  06C9 R                C	SRD_FILSPEOFF  DW   WR_SCRBUF		;AN000;
				offset of filespec
 00E9  ---- R                C	SRD_FILSPESEG  DW   DATA		;AN000;
				segment of filespec
 00EB  0000                  C	SRD_SCBVECNUM  DW   0			;AN000;
				num SCBs in vector
 00ED  0000                  C	SRD_SCBVECOFF  DW   0			;AN000;
				offset of SCB vector
 00EF  0000                  C	SRD_SCBVECSEG  DW   0			;AN000;
				segment of SCB vector
 00F1  0000                  C	SRD_MAXNUMSCB  DW   0			;AN000;
				max # flds poss in memry at once
 00F3  0000                  C	SRD_ERROR      DW   0			;AN000;
				errors
 00F5  0000                  C	SRD_DOSERROR   DW   0			;AN000;
				DOS error conditions
 00F7  0032[                 C	SRD_RESERVED   DB   50 DUP(0)		;AN000;
				reserved for internal use
	   00                C	
			 ]   C	
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCINCHA parameter block
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0129  0000                  C	INC_OPT        DW   0			     ;A
				N000;option word
 012B  0000                  C	INC_STAT       DW   0			     ;A
				N000;status word
 012D  0000                  C	INC_KS	       DW   0			     ;A
				N000;keystroke found
 012F  0000                  C	INC_TRANLEN    DW   0			     ;A
				N000;length of translation table
 0131  0000                  C	INC_TRANOFF    DW   0			     ;A
				N000;offset of translation table
 0133  0000                  C	INC_TRANSEG    DW   0			     ;A
				N000;segment of translation table
 0135  0000                  C	INC_DBCSLEN    DW   0			     ;A
				N000;length of DBCS table
 0137  0000                  C	INC_DBCSOFF    DW   0			     ;A
				N000;offset of DBCS table
 0139  0000                  C	INC_DBCSSEG    DW   0			     ;A
				N000;segment of DBCS table
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-169


 013B  0000                  C	INC_MONOOFF    DW   0			     ;A
				N000;offset of monocasing table
 013D  0000                  C	INC_MONOSEG    DW   0			     ;A
				N000;segment of monocasing table
 013F  000C[                 C	INC_RESERVED   DB   12 DUP(0)		     ;A
				N000;reserved for internal use
	   00                C	
			 ]   C	
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCCLRRD parameter block
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 014B  0000                  C	CRD_OPT1       DW   0			;AN000;
				option word
 014D  0000                  C	CRD_BUFLEN     DW   0			;AN000;
				length of avail buffer
 014F  0000                  C	CRD_BUFOFF     DW   0			;AN000;
				offset of buffer
 0151  0000                  C	CRD_BUFSEG     DW   0			;AN000;
				segment of buffer
 0153  0000                  C	CRD_ID	       DW   0			;AN000;
				color index ID number to read
 0155  06C9 R                C	CRD_FILSPEOFF  DW   WR_CLRBUF		;AN000;
				offset of filespec
 0157  ---- R                C	CRD_FILSPESEG  DW   DATA		;AN000;
				segment of filespec
 0159  0000                  C	CRD_CCBVECLEN  DW   0			;AN000;
				length of index in bytes
 015B  0000                  C	CRD_CCBVECOFF  DW   0			;AN000;
				offset of color index
 015D  0000                  C	CRD_CCBVECSEG  DW   0			;AN000;
				segment of color index
 015F  0000                  C	CRD_ERROR      DW   0			;AN000;
				errors
 0161  0000                  C	CRD_DOSERROR   DW   0			;AN000;
				DOS error conditions
 0163  0022[                 C	CRD_RESERVED   DB   34 DUP(0)		;AN000;
				reserved for internal use
	   00                C	
			 ]   C	
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCPANRD parameter block
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0185  0000                  C	PRD_OPT1       DW   0			;AN000;
				option word
 0187  0000                  C	PRD_BUFLEN     DW   0			;AN000;
				length of avail buffer
 0189  0000                  C	PRD_BUFOFF     DW   0			;AN000;
				offset of buffer
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-170


 018B  0000                  C	PRD_BUFSEG     DW   0			;AN000;
				segment of buffer
 018D  0000                  C	PRD_ID	       DW   0			;AN000;
				PCB number to read
 018F  000B                  C	PRD_FILSPELEN  DW   WR_PANLEN		;AN000;
				length of filespec
 0191  06C9 R                C	PRD_FILSPEOFF  DW   WR_PANBUF		;AN000;
				offset of filespec
 0193  ---- R                C	PRD_FILSPESEG  DW   DATA		;AN000;
				segment of filespec
 0195  0000                  C	PRD_PCBVECNUM  DW   0			;AN000;
				num PCBs in vector
 0197  0000                  C	PRD_PCBVECOFF  DW   0			;AN000;
				offset of PCB vector
 0199  0000                  C	PRD_PCBVECSEG  DW   0			;AN000;
				segment of PCB vector
 019B  0000                  C	PRD_MAXNUMPAN  DW   0			;AN000;
				max # pans poss in memry at once
 019D  0000                  C	PRD_ERROR      DW   0			;AN000;
				errors
 019F  0000                  C	PRD_DOSERROR   DW   0			;AN000;
				DOS error conditions
 01A1  0030[                 C	PRD_RESERVED   DB   48 DUP(0)		;AN000;
				reserved for internal use
	   00                C	
			 ]   C	
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCDISPQ Parameter Block
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 01D1  0000                  C	QM_OPT1        DW   0			;AN000;
				option word one
 01D3  0000                  C	QM_OPT2        DW   0			;AN000;
				option word two
 01D5  0000                  C	QM_ID	       DW   0			;AN000;
				parent/child PCB number
 01D7  0000                  C	QM_ACTIVEPAN   DW   0			;AN000;
				current active parent panel
 01D9  0000                  C	QM_COLOROVER   DW   0			;AN000;
				parent/child override color indx
 01DB  0000                  C	QM_ROWOVER     DW   0			;AN000;
				parent/child override row
 01DD  0000                  C	QM_COLUMOVER   DW   0			;AN000;
				parent/child override column
 01DF  0000                  C	QM_MAXCHDQUE   DW   0			;AN000;
				max # of child queues to save
 01E1  0000                  C	QM_MAXPANQUE   DW   0			;AN000;
				max # of panel queues to save
 01E3  0000                  C	QM_MAXNUMCHD   DW   0			;AN000;
				max # of parent panels queued
 01E5  0000                  C	QM_MAXNUMPAN   DW   0			;AN000;
				max # of child panels queued
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-171


 01E7  0000                  C	QM_PCBVECNUM   DW   0			;AN000;
				number of PCB elements in vector
 01E9  0000                  C	QM_PCBVECOFF   DW   0			;AN000;
				offset of PCB vector
 01EB  0000                  C	QM_PCBVECSEG   DW   0			;AN000;
				segment of PCB vector
 01ED  0000                  C	QM_BUFLEN      DW   0			;AN000;
				length of avail buffer
 01EF  0000                  C	QM_BUFOFF      DW   0			;AN000;
				offset of buffer
 01F1  0000                  C	QM_BUFSEG      DW   0			;AN000;
				segment of buffer
 01F3  0000                  C	QM_PANQUENUM   DW   0			;AN000;
				returns number in parent PDQ
 01F5  0000                  C	QM_PANQUEOFF   DW   0			;AN000;
				returns parent PDQ offset
 01F7  0000                  C	QM_PANQUESEG   DW   0			;AN000;
				returns parent PDQ segment
 01F9  0000                  C	QM_CHDQUENUM   DW   0			;AN000;
				returns number in child PDQ
 01FB  0000                  C	QM_CHDQUEOFF   DW   0			;AN000;
				returns child PDQ offset
 01FD  0000                  C	QM_CHDQUESEG   DW   0			;AN000;
				returns child PDQ segment
 01FF  0000                  C	QM_RETKEYSLEN  DW   0			;AN000;
				active child keys buffer length
 0201  0000                  C	QM_RETKEYSOFF  DW   0			;AN000;
				active child keys buffer offset
 0203  0000                  C	QM_RETKEYSSEG  DW   0			;AN000;
				active child keys buffer segmente
 0205  0000                  C	QM_ERROR       DW   0			;AN000;
				returns error status
 0207  0042[                 C	QM_RESERVED    DB   66 DUP(0)		;AN000;
				reserved for internal use
	   00                C	
			 ]   C	
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCPANEL Parameter Control Block
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0249  0000                  C	PM_OPT1        DW   0			;AN000;
				option word
 024B  0000                  C	PM_PANPDQNUM   DW   0			;AN000;
				beg/ending parent PDQ number
 024D  0000                  C	PM_PANBRKOFF   DW   0			;AN000;
				panel off in lvb of break panel
 024F  0000                  C	PM_PANBRKID    DW   0			;AN000;
				ID number of break panel
 0251  0000                  C	PM_ACTIVEPAN   DW   0			;AN000;
				current active parent panel PCB
 0253  00                    C	PM_BASECHAR    DB   0			;AN000;
				text background character
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-172


 0254  00                    C	PM_BASEATTR    DB   0			;AN000;
				color attribute of back char
 0255  0000                  C	PM_PANQUENUM   DW   0			;AN000;
				number of panels in parent queue
 0257  0000                  C	PM_PANQUEOFF   DW   0			;AN000;
				offset address of parent queue
 0259  0000                  C	PM_PANQUESEG   DW   0			;AN000;
				segment address of parent queue
 025B  0000                  C	PM_CHDQUENUM   DW   0			;AN000;
				number panels in child queue
 025D  0000                  C	PM_CHDQUEOFF   DW   0			;AN000;
				offset of child queue
 025F  0000                  C	PM_CHDQUESEG   DW   0			;AN000;
				segment of child queue
 0261  0000                  C	PM_PCBVECNUM   DW   0			;AN000;
				number of index elements
 0263  0000                  C	PM_PCBVECOFF   DW   0			;AN000;
				off addr of vect pointing to pan
 0265  0000                  C	PM_PCBVECSEG   DW   0			;AN000;
				seg addr of vect pointing to pan
 0267  0000                  C	PM_CCBVECNUM   DW   0			;AN000;
				number color index table entries
 0269  0000                  C	PM_CCBVECOFF   DW   0			;AN000;
				offset addr of color index table
 026B  0000                  C	PM_CCBVECSEG   DW   0			;AN000;
				segment addr of color index tabl
 026D  0000                  C	PM_LVBLEN      DW   0			;AN000;
				number bytes in logical vid buf
 026F  0000                  C	PM_LVBOFF      DW   0			;AN000;
				offset of logical video buffer
 0271  0000                  C	PM_LVBSEG      DW   0			;AN000;
				segment of logical video buffer
 0273  0000                  C	PM_LVBWIDTH    DW   0			;AN000;
				width of log vid buf in bytes
 0275  00                    C	PM_TRANS_C     DB   0			;AN000;
				character indicating trans field
 0276  00                    C	PM_TRANS_A     DB   0			;AN000;
				attribute indicating trans field
 0277  0000                  C	PM_REFVECNUM   DW   0			;AN000;
				number refresh table entries
 0279  0000                  C	PM_REFVECOFF   DW   0			;AN000;
				offset of refresh table
 027B  0000                  C	PM_REFVECSEG   DW   0			;AN000;
				segment of refresh table
 027D  0000                  C	PM_ERROR       DW   0			;AN000;
				error conditions
 027F  01A1[                 C	PM_RESERVED    DB   417 DUP (0) 	;AN000;
				reserved for internal use
	   00                C	
			 ]   C	
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCINPUT parameter block
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-173


			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0420  0020                  C	IN_OPT	       DW   IN_AMONO		     ;A
				N000;option word one
 0422  0001                  C	IN_ICBID       DW   1			     ;A
				N000;current input field to process
 0424  0000                  C	IN_ICBOFF      DW   0			     ;A
				N000;returned offset of current ICB
 0426  0000                  C	IN_ICBSEG      DW   0			     ;A
				N000;returned segment of current ICB
 0428  001F                  C	IN_ICBVECNUM   DW   31			     ;A
				N000;number of ICB entires in vector
 042A  0000 E                C	IN_ICBVECOFF   DW   WR_ICBVEC		     ;A
				N000;offset of ICB vector
 042C  ---- R                C	IN_ICBVECSEG   DW   DATA		     ;A
				N000;segment of ICB vector
 042E  0000                  C	IN_CCBVECOFF   DW   0			     ;A
				N000;offset of color index table
 0430  0000                  C	IN_CCBVECSEG   DW   0			     ;A
				N000;segment of color index table
 0432  0607                  C	IN_CURNOR      DW   0607H		     ;A
				N000;normal cursor size
 0434  0207                  C	IN_CURINS      DW   0207H		     ;A
				N000;cursor size in insert mode
 0436  0000                  C	IN_TRANLEN     DW   0			     ;A
				N000;length of key translation table
 0438  0000                  C	IN_TRANOFF     DW   0			     ;A
				N000;offset of key translation table
 043A  0000                  C	IN_TRANSEG     DW   0			     ;A
				N000;segment of key translation table
 043C  0000                  C	IN_MONOOFF     DW   0			     ;A
				N000;offset of monocasing table
 043E  0000                  C	IN_MONOSEG     DW   0			     ;A
				N000;segment of monocasing table
 0440  0000                  C	IN_DBCSLEN     DW   0			     ;A
				N000;length double byte range table
 0442  0000                  C	IN_DBCSOFF     DW   0			     ;A
				N000;offset double byte range table
 0444  0000                  C	IN_DBCSSEG     DW   0			     ;A
				N000;segment double byte range table
 0446  0000 E                C	IN_KEYSOFF     DW   KD_BACKSPACE	     ;A
				N000;offset of keystroke definitions
 0448  ---- R                C	IN_KEYSSEG     DW   DATA		     ;A
				N000;segment of keystroke definitions
 044A  0000                  C	IN_CAPROW      DW   0			     ;A
				N000;row of caps lock flag
 044C  0000                  C	IN_CAPCOL      DW   0			     ;A
				N000;col of caps lock flag
 044E  0000                  C	IN_CAPLEN      DW   0			     ;A
				N000;length of caps lock flag text
 0450  0000                  C	IN_CAPOFF      DW   0			     ;A
				N000;offset of caps lock flag text
 0452  0000                  C	IN_CAPSEG      DW   0			     ;A
				N000;segment of caps lock flag text
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-174


 0454  0000                  C	IN_INSROW      DW   0			     ;A
				N000;row of insert flag
 0456  0000                  C	IN_INSCOL      DW   0			     ;A
				N000;col of insert flag
 0458  0000                  C	IN_INSLEN      DW   0			     ;A
				N000;length of insert flag text
 045A  0000                  C	IN_INSOFF      DW   0			     ;A
				N000;offset of insert flag text
 045C  0000                  C	IN_INSSEG      DW   0			     ;A
				N000;segment of insert flag text
 045E  0000                  C	IN_NUMROW      DW   0			     ;A
				N000;row of num lock flag
 0460  0000                  C	IN_NUMCOL      DW   0			     ;A
				N000;col of num lock flag
 0462  0000                  C	IN_NUMLEN      DW   0			     ;A
				N000;length of num lock flag text
 0464  0000                  C	IN_NUMOFF      DW   0			     ;A
				N000;offset of num lock flag text
 0466  0000                  C	IN_NUMSEG      DW   0			     ;A
				N000;segment of num lock flag text
 0468  0000                  C	IN_SCRROW      DW   0			     ;A
				N000;row of scroll lock flag
 046A  0000                  C	IN_SCRCOL      DW   0			     ;A
				N000;col of scroll lock flag
 046C  0000                  C	IN_SCRLEN      DW   0			     ;A
				N000;length of scroll lock flag text
 046E  0000                  C	IN_SCROFF      DW   0			     ;A
				N000;offset of scroll lock flag text
 0470  0000                  C	IN_SCRSEG      DW   0			     ;A
				N000;segment of scroll lock flag text
 0472  00 00                 C	IN_THOUSEP     DB   0,0 		     ;A
				N000;thousands separator
 0474  0000                  C	IN_THOUPOS     DW   0			     ;A
				N000;space between thousnd separators
 0476  00 00                 C	IN_DECSEP      DB   0,0 		     ;A
				N000;decimal separator
 0478  5B 5D                 C	IN_DELIMITEN   DB   '[]'                     ;A
				N000;left & right bracket char - on
 047A  20 20                 C	IN_DELIMITEX   DB   '  '                     ;A
				N000;left & right bracket char - off
 047C  3C 3E                 C	IN_DELIMITDIR  DB   '<>'                     ;A
				N000;direction delimitors (horz wind)
 047E  DA C4 BF B3           C	IN_BORDEREN	db 0DAh, 0C4h, 0BFh, 0B3h
 0482  B3 C0 C4 D9           C			db 0B3h, 0C0h, 0C4h, 0D9h
			     C						;AN000;
				8 border char (�Ŀ�����) entry
 0486  31 32 33 34 35 36     C	IN_BORDEREX    DB   '12345678'               ;A
				N000;8 border char (�Ŀ�����) exit
       37 38                 C	
 048E  0000                  C	IN_LVBOFF      DW   0			     ;A
				N000;log vid buf offset override
 0490  0000                  C	IN_LVBSEG      DW   0			     ;A
				N000;log vid buf segment override
 0492  0000                  C	IN_CURINSOFF   DW   0			     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-175


				N000;offset insert cursor bit map   (W)
 0494  0000                  C	IN_CURINSSEG   DW   0			     ;A
				N000;segment insert cursor bit map  (W)
 0496  0000                  C	IN_CURRPLOFF   DW   0			     ;A
				N000;offset replace cursor bit map  (W)
 0498  0000                  C	IN_CURRPLSEG   DW   0			     ;A
				N000;segment replace cursor bit map (W)
 049A  0000                  C	IN_DELOFF      DW   0			     ;A
				N000;offset delimiter bit maps		      =
				W
 049C  0000                  C	IN_DELSEG      DW   0			     ;A
				N000;segment delimiter bit maps		      =
				W
 049E  0000                  C	IN_ERROR       DW   0			     ;A
				N000;error word
 04A0  01C2[                 C	IN_RESERVED    DB   450  DUP(0) 	     ;A
				N000;reserved for internal use
	   00                C	
			 ]   C	
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCWWRAP parameter block
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0662  0000                  C	WWP_OPT1       DW   0			     ;A
				N000;option word
 0664  0000                  C	WWP_SRCTXTLEN  DW   0			     ;A
				N000;the length of actual text
 0666  0000                  C	WWP_SRCTXTOFF  DW   0			     ;A
				N000;the offset to actual text
 0668  0000                  C	WWP_SRCTXTSEG  DW   0			     ;A
				N000;the segment to actual text
 066A  0000                  C	WWP_SRCBUFLEN  DW   0			     ;A
				N000;lenght of the entire buffer
 066C  0000                  C	WWP_DESBUFLEN  DW   0			     ;A
				N000;the length of dest buffer
 066E  0000                  C	WWP_DESBUFOFF  DW   0			     ;A
				N000;the offset to dest buffer
 0670  0000                  C	WWP_DESBUFSEG  DW   0			     ;A
				N000;the segment to dest buffer
 0672  0035                  C	WWP_WIDTH      DW   53			     ;A
				N000;width of the # of char on a line
 0674  0000                  C	WWP_NUMLINES   DW   0			     ;A
				N000;Number of actual line process
 0676  40                    C	WWP_FORMAT     DB   '@'                      ;A
				N000;Used to indicate the begin formt
 0677  40                    C	WWP_NOFORMAT   DB   '@'                      ;A
				N000;Used to indicate the format off
 0678  23                    C	WWP_SRCHYSMB   DB   '#'                      ;A
				N000;Symbol that is used as hyphen
 0679  2D                    C	WWP_HYSYMBOL   DB   '-'                      ;A
				N000;Actual hyphen symbol
 067A  26                    C	WWP_SPACESYM   DB   '&'                      ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-176


				N000;symbol for padding spaces at EOL
 067B  0000                  C	WWP_ERROR      DW   0			     ;A
				N000;Internal error conditions
 067D  0005[                 C	WWP_RESERVED   DB   5 DUP(0)		     ;A
				N000;reserved for internal use
	   00                C	
			 ]   C	
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; PCMBEEP parameter block
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0682  01B8                  C	MB_FREQUENCY   DW   SND_FREQ		;AN000;
				beep frequency
 0684  9C40                  C	MB_DURATION    DW   SND_DURA		;AN000;
				beep duration
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;   Input field management internal variables:
			     C	;
			     C	; Miscellaneous internal variables
			     C	;
 0686  0000                  C	WR_ICBID       DW   0			;AN000;
				general ICB ID number
 0688  0000 E                C	WR_ICBVECOFF   DW   WR_ICBVEC		;AN000;
				ICB vector address
 068A  ---- R                C	WR_ICBVECSEG   DW   DATA		;AN000;
				ICB vector address
			     C	;
			     C	;   Return key string internal variables:
			     C	; Dynamic return key string variables to add to
				 complete return string
			     C	;
 068C  0000                  C	WR_DRETLEN     DW   0			     ;A
				N000;dynamic return string length
 068E  0000                  C	WR_DRETOFF     DW   0			     ;A
				N000;dynamic return string offset
 0690  0000                  C	WR_DRETSEG     DW   0			     ;A
				N000;dynamic return string segment
			     C	;
			     C	; Complete return key string buffer variables
			     C	;
 0692  0000                  C	WR_CRETLEN     DW   0			     ;A
				N000;current length of complete ret sg
 0694  0000                  C	WR_CRETOFF     DW   0			     ;A
				N000;current offset of complete ret sg
 0696  0000                  C	WR_CRETSEG     DW   0			     ;A
				N000;current segment of complete ret s
			     C	;
			     C	;   Help management internal variables:
			     C	;
			     C	; Help options, status, filespec, and override 
				variables
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-177


			     C	;
 0698  0000                  C	WR_HLPOPT      DW   0			     ;A
				N000;help options
 069A  0000                  C	WR_HLPPAN      DW   0			     ;A
				N000;help child panels that are active
 069C  0000                  C	WR_HLPDIS      DW   0			     ;A
				N000;help status
 069E  0000                  C	WR_HLPROW      DW   0			     ;A
				N000;help row override
 06A0  0000                  C	WR_HLPCOL      DW   0			     ;A
				N000;help column override
			     C	;
			     C	; Help text ID variables
			     C	;
 06A2  0000                  C	WR_HCBCONT     DW   0			     ;A
				N000;current contextual help ID
 06A4  0002                  C	WR_HCBHELP     DW   HCB_HELP		     ;A
				N000;help-on-help ID
 06A6  0001                  C	WR_HCBKEYS     DW   HCB_KEYS		     ;A
				N000;help on keys ID
			     C	;
			     C	; Help scroll ID variable
			     C	;
 06A8  0015                  C	WR_SCBCONT     DW   SCR_CONTEXT_HLP	     ;A
				N000;scroll contextual help ID
 06AA  0015                  C	WR_SCBINDX     DW   SCR_CONTEXT_HLP	     ;A
				N000;scroll indexed help ID
			     C	;
			     C	; Help panel ID variables
			     C	;
 06AC  0031                  C	WR_PCBHELP     DW   CHILD_F1HELP	       
				;AN000;F1=Help
 06AE  0000                  C	WR_PCBSWIT     DW   0			       
				;AN000;F2=Switch
 06B0  0000                  C	WR_PCBINDX     DW   0			       
				;AN000;F5=Index
 06B2  0032                  C	WR_PCBKEYS     DW   CHILD_F9KEYS	       
				;AN000;F9=Keys
 06B4  0024                  C	WR_PCBHPAN     DW   PAN_HPAN		       
				;AN000;contextual help panel
 06B6  0033                  C	WR_PCBQUIT     DW   CHILD_QUIT		       
				;AN000;Esc=Quit
 06B8  0034                  C	WR_PCBENTR     DW   CHILD_ENTER 	       
				;AN000;Enter
 06BA  0043                  C	WR_PCBERROR    DW   ERR_BORDER		       
				;AN000;Error panel
			     C	;
			     C	; Help keystroke variables
			     C	;
 06BC  3B00                  C	WR_KEYHELP     DW   KEY_HELP		     ;A
				N000;F1=Help
 06BE  3C00                  C	WR_KEYSWIT     DW   KEY_SWIT		     ;A
				N000;F2=Switch
 06C0  3F00                  C	WR_KEYINDX     DW   KEY_INDX		     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-178


				N000;F5=Index
 06C2  4300                  C	WR_KEYKEYS     DW   KEY_KEYS		     ;A
				N000;F9=Keys
 06C4  000D                  C	WR_KEYSELT     DW   KEY_SELT		     ;A
				N000;Enter
 06C6  001B                  C	WR_KEYQUIT     DW   KEY_QUIT		     ;A
				N000;Esc=Quit
			     C	
 06C8  1B                    C	WR_RETHLPBUF   DB   ESCAPE		     ;A
				N000;help dynamic return keys
 = 0001                      C	WR_RETHLPLEN   EQU  ($-WR_RETHLPBUF)	     ;A
				N000;
			     C	;-----------------------
			     C	;
			     C	;  Management internal variables:
			     C	;
 06C9                        C	WR_PANBUF      LABEL BYTE		     ;A
				N000;
 06C9                        C	WR_SCRBUF      LABEL BYTE		     ;A
				N000;
 06C9  53 45 4C 45 43 54     C	WR_CLRBUF      DB   'SELECT.DAT',0           ;A
				N000;filespec
       2E 44 41 54 00        C	
 = 000B                      C	WR_CLRLEN      EQU  ($-WR_CLRBUF)	     ;A
				N000;
 = 000B                      C	WR_SCRLEN      EQU  ($-WR_SCRBUF)	     ;A
				N000;
 = 000B                      C	WR_PANLEN      EQU  ($-WR_PANBUF)	     ;A
				N000;
			     C	;-----------------------
 06D4  53 45 4C 45 43 54     C	WR_HLPBUF      DB   'SELECT.HLP',0           ;A
				N000;filespec
       2E 48 4C 50 00        C	
 = 000B                      C	WR_HLPLEN      EQU  ($-WR_HLPBUF)	     ;A
				N000;
			     C	;
			     C	; Panel Field Refresh Relationship Table
			     C	;
			     C	;	  Format = DW  Panel control block numb
				er
			     C	;		   DW  Total number of fields i
				n this record
			     C	;		   DW  Object type ID
			     C	;		   DW  Field ID
			     C	;
			     C	;		   DW  Object type ID
			     C	;		   DW  Field ID
			     C	;
			     C	; Panel Field Refresh Table Location
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 06DF  0001                  C	WR_REFNUM      DW   1		;AN000;number o
				f PCB entries
 06E1  06E7 R                C	WR_REFOFF      DW   WR_REFBUF	;AN000;offset o
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-179


				f table
 06E3  ---- R                C	WR_REFSEG      DW   DATA	;AN000;segment 
				of table
 06E5  0000                  C	WR_REFCNT      DW   0		;AN000;refresh 
				counter
			     C	
 06E7  0000                  C	WR_REFBUF      DW   0		;AN000; PCB num
				ber
 06E9  0000                  C	WR_REFIELDCNT  DW   0		;AN000; #fields
				 with this PCB
 06EB  0000 0000             C	WR_REFID       DW   0,0 	;AN000; Object 
				ID 1, Field ID 1
 06EF  0000 0000             C		       DW   0,0 	;AN000; Object 
				ID 2, Field ID 2
 06F3  0000 0000             C		       DW   0,0 	;AN000; Object 
				ID 3, Field ID 3
 06F7  0000 0000             C		       DW   0,0 	;AN000; Object 
				ID 4, Field ID 4
 06FB  0000 0000             C		       DW   0,0 	;AN000; Object 
				ID 5, Field ID 5
 06FF  0000 0000             C		       DW   0,0 	;AN000; Object 
				ID 6, Field ID 6
 0703  0000 0000             C		       DW   0,0 	;AN000; Object 
				ID 7, Field ID 7
 0707  0000 0000             C		       DW   0,0 	;AN000; Object 
				ID 8, Field ID 8
 070B  0000 0000             C		       DW   0,0 	;AN000; Object 
				ID 9, Field ID 9
 070F  0000 0000             C		       DW   0,0 	;AN000; Object 
				ID10, Field ID10
 = 0014                      C	WR_MAXREFID    EQU  ($-WR_REFID)/2;AN000;
			     C	
 0713  0000                  C	WR_SCBID       DW   0			     ;A
				N000;current PCSLCTP ID number
 0715  0000                  C	WR_ERROR       DW   0			     ;A
				N000;0= no error, 1= error condition
			     C	;
			     C	; Memory allocation variables - needs to suppor
				t multiple segment table
			     C	;
 0717  0000                  C	WR_DATA2SEG    DW   0			     ;A
				N000;segment of allocated buffer
 0719  0000                  C	WR_DATA2OFF    DW   0			     ;A
				N000;offset of allocated buffer
 071B  0000                  C	WR_DATA2LEN    DW   0			     ;A
				N000;length of allocated buffer
			     C	;
 071D  0000                  C	WR_LVBSEG      DW   0			     ;A
				N000;segment of LVB (logical video buffer)
 071F  0000                  C	WR_LVBOFF      DW   0			     ;A
				N000;offset of LVB
 0721  0000                  C	WR_LVBLEN      DW   0			     ;A
				N000;length of LVB
			     C	;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-180


			     C	; Maximum limits for data
			     C	;
 0723  012B                  C	WR_LVBMEM      DW   MAX_MEMLVB		     ;A
				N000;size of LVB in 16 byte paraghp
 0725  0F7F                  C	WR_MAXMEMPAR   DW   MAX_MEMPAR		     ;A
				N000;size of memory in 16 byte paraghp
 0727  0032                  C	WR_MAXRETKSZ   DW   MAX_RETKSZ		     ;A
				N000;max size of return key buffer
 0729  2000                  C	WR_MAXHELPSZ   DW   MAX_HELPSZ		     ;A
				N000;max size of help text buffer
 072B  0062                  C	WR_MAXPANNUM   DW   MAX_PANNUM		     ;A
				N000;max # of panels possible in memry
 072D  001C                  C	WR_MAXSCRNUM   DW   MAX_SCRNUM		     ;A
				N000;max # of scroll possible in memry
 072F  0002                  C	WR_MAXCHDQUE   DW   MAX_CHDQUE		     ;A
				N000;max # of child queues to save
 0731  0005                  C	WR_MAXPANQUE   DW   MAX_PANQUE		     ;A
				N000;max # of panel queues to save
 0733  0005                  C	WR_MAXNUMCHD   DW   MAX_NUMCHD		     ;A
				N000;max # of parent panels queued
 0735  0005                  C	WR_MAXNUMPAN   DW   MAX_NUMPAN		     ;A
				N000;max # of child panels queued
 0737  000C                  C	WR_MAXCLRECD   DW   MAX_CLRECD		     ;A
				N000;num # bytes per color record
			     C	
 0739  00                    C	LVB_INITED     DB   0			     ;A
				N000;flag for LVB allocated
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 073A                        C	DATA	       ENDS			     ;A
				N000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-181


			     C	PAGE					     ;A
				N000;
			     C	
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Variable(s) for Conditional Assembly
				;
				;    These conditional assembly values are decl
				ared and set in an external
				;    file and included during assembly.
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
					INCLUDE CASVAR.INC	;AN000;
			     C	;
			     C	; Revised:  02-15-88
			     C	;
 = 0000                      C	CASRM	       EQU  0			     ;S
				et to zero (0) to create an
			     C						     ; 
				object module to put in the
			     C						     ; 
				CAS Library.  Set to one (1)
			     C						     ; 
				to create the CAS Routine
			     C						     ; 
				Manager version of the routine.
			     C	;
 = 0001                      C	CASFAR	       EQU  1			     ;S
				et to zero (0) to create an
			     C						     ; 
				object module that is called
			     C						     ; 
				as a near procedure.  Set to
			     C						     ; 
				one (1) to create an object
			     C						     ; 
				module that is called as a far
			     C						     ; 
				procedure.
			     C	;
 = 0001                      C	COPYRIGHT      EQU  1			     ;S
				et to zero (0) to include
			     C						     ; 
				Copyright 1988 Microsoft
			     C						     ; 
				(1) to exclude Copyright 1988 Microsoft
			     C						     ; 
				notice.
			     C	;
 = 0002                      C	SMODE	       EQU  2			     ;S
				et to one (1) for Interpertive
			     C						     ; 
				BASIC. Set to two (2) for
			     C						     ; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-182


				Compiled BASIC.
			     C	;
 = 007F                      C	CASINT	       EQU  7FH 		     ;C
				AS Routine Manager interupt
			     C	;
 = 1234                      C	CASFILEID      EQU  01234H		     ;T
				his CAS file identification
			     C						     ; 
				is found at the beginning of all
			     C						     ; 
				CAS files in the first word
 = 00FF                      C	PANELOBJID     EQU  0FFH		     ;T
				his is the panel object
			     C						     ; 
				identification number that is
			     C						     ; 
				found inside a valid CAS file's
			     C						     ; 
				object list when panels have
			     C						     ; 
				been saved inside a file
 = 00FE                      C	HELPOBJID      EQU  0FEH		     ;T
				his is the help/error object
			     C						     ; 
				identification number that is
			     C						     ; 
				found inside a valid CAS file's
			     C						     ; 
				object list when helps have
			     C						     ; 
				been saved inside a file
 = 00FD                      C	COLOROBJID     EQU  0FDH		     ;T
				his is the color object
			     C						     ; 
				identification number that is
			     C						     ; 
				found inside a valid CAS file's
			     C						     ; 
				object list when colors have
			     C						     ; 
				been saved inside a file
 = 00FC                      C	INPUTOBJID     EQU  0FCH		     ;T
				his is the input object
			     C						     ; 
				identification number that is
			     C						     ; 
				found inside a valid CAS file's
			     C						     ; 
				object list when input fields
			     C						     ; 
				have been saved inside a file
 = 00FB                      C	DIALOGOBJID    EQU  0FBH		     ;T
				his is the dialog object
			     C						     ; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-183


				identification number that is
			     C						     ; 
				found inside a valid CAS file's
			     C						     ; 
				object list when dialogs have
			     C						     ; 
				been saved inside a file
 = 00FA                      C	SCROLLOBJID    EQU  0FAH		     ;T
				his is the scroll field object
			     C						     ; 
				identification number that is
			     C						     ; 
				found inside a valid CAS file's
			     C						     ; 
				object list when scroll fields
			     C						     ; 
				have been saved inside a file
 = 00F9                      C	TRANSOBJID     EQU  0F9H		     ;T
				his is the translation object
			     C						     ; 
				identification number that is
			     C						     ; 
				found inside a valid CAS file's
			     C						     ; 
				object list when a translation
			     C						     ; 
				table has been saved inside a
			     C						     ; 
				file
 = 00F8                      C	GRAPHOBJID     EQU  0F8H		     ;T
				his is the graphic field object
			     C						     ; 
				identification number that is
			     C						     ; 
				found inside a valid CAS file's
			     C						     ; 
				object list when a graphic
			     C						     ; 
				fields has been saved inside a
			     C						     ; 
				file
 = 00F7                      C	MENUOBJID      EQU  0F7H		     ;T
				his is the maintain menu object
			     C						     ; 
				identification number that is
			     C						     ; 
				found inside a valid CAS file's
			     C						     ; 
				object list when a menu table
			     C						     ; 
				has been saved inside a file
 = 0014                      C	MAXNUMOBJS     EQU  20			     ;M
				aximum possible number of
			     C						     ; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-184


				objects types reserved in CAS
			     C						     ; 
				data files.  (i.e. panel, help,
			     C						     ; 
				error, color, input objects,,,)
			     C	;
			     C	LIBVER	       MACRO
			     C		       DB   "Version 4.0"            ;C
				AS library version number
			     C	ENDM
			     C	;
			     C	INCLUDE        CASRN.INC		     ;I
				nclude the CAS routine numbers
			     C	;
			     C	; CAS Routine Numbers
			     C	;
			     C	; Revised:  10-05-87
			     C	;
 = 3009                      C	BX_RN          EQU  3009H             ;DRAWBOX 
				   PCBOXDR   FABOXDR
 = 2100                      C	CC_RN          EQU  2100H             ;CALCLOR 
				   PCCOLOR   FACOLOR
 = 2101                      C	CR_RN          EQU  2101H             ;CROWCOL 
				   PCROWCL   FAROWCL
 = 5000                      C	CE_RN          EQU  5000H             ;CRITERR 
				   PCCRITE   FACRITE
 = 3001                      C	CM_RN          EQU  3001H             ;COMPRSS 
				   PCCOMPS   FACOMPS
 = 210B                      C	CRD_RN         EQU  210BH             ;        
				   PCCLRRD
 = 210C                      C	CWR_RN         EQU  210CH             ;        
				   PCCLRWR
 = 4001                      C	DTS_RN         EQU  4001H             ;DATES   
				   PCDATES   FADATES
 = 1300                      C	FF_RN          EQU  1300H             ;FINDFLS 
				   PCFINDF   FAFINDF
 = 2102                      C	GV_RN          EQU  2102H             ;GETVIDO 
				   PCGVIDO   FAGVIDO
 = 4000                      C	GE_RN          EQU  4000H             ;GETEQUP 
				   PCGEQUP   FAGEQUP
 = 2108                      C	HWR_RN         EQU  2108H             ;        
				   PCHLPRD
 = 2109                      C	HRD_RN         EQU  2109H             ;        
				   PCHLPWR
 = 300B                      C	INS_RN         EQU  300BH             ;INSTRG  
				   PCINSTR   FAINSTR
 = 3000                      C	I2S_RN         EQU  3000H             ;CIS     
				   PCIN2ST   FAIN2ST
 = 2400                      C	MB_RN          EQU  2400H             ;MAKEBEEP
				   PCMBEEP   FAMBEEP
 = 3002                      C	MO_RN          EQU  3002H             ;MOVECON 
				   PCMOVEC   FAMOVEC
 = 3003                      C	MI_RN          EQU  3003H             ;MOVEINT 
				   PCMOVEI   FAMOVEI
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-185


 = 1200                      C	MS_RN          EQU  1200H             ;TRACKER 
				   PCTRACK
 = 3004                      C	MX_RN          EQU  3004H             ;MOVEMIX 
				   PCMOVEM   FAMOVEM
 = 2103                      C	PM_RN          EQU  2103H             ;PANMAN  
				   PCPANEL   FAPANEL
 = 2106                      C	PWR_RN         EQU  2106H             ;        
				   PCPANWR
 = 210A                      C	PRD_RN         EQU  210AH             ;        
				   PCPANRD
 = 2111                      C	QM_RN          EQU  2111H             ;        
				   PCDISPQ
 = 2107                      C	SF_RN          EQU  2107H             ;SETFLAG 
				   PCSTATF   FASTATF
 = 2104                      C	SV_RN          EQU  2104H             ;SETVIDO 
				   PCSVIDO   FASVIDO
 = 1102                      C	SK_RN          EQU  1102H             ;SIMKEY  
				   PCSIMKY   FASIMKY
 = 210D                      C	SRD_RN         EQU  210DH             ;        
				   PCSCRRD
 = 210E                      C	SWR_RN         EQU  210EH             ;        
				   PCSCRWR
 = 300D                      C	SM_RN          EQU  300DH             ;        
				   PCPANSM
 = 2105                      C	SCB_RN         EQU  2105H             ;SLCTOPT 
				   PCSLCTP
 = 2105                      C	SO_RN          EQU  2105H             ;SLCTOPT 
				             FASLCTP
 = 3005                      C	SS_RN          EQU  3005H             ;STRGSRT 
				   PCSORTS   FASORTS
 = 300A                      C	SSC_RN         EQU  300AH             ;STRSTRC 
				   PCSTRST   FASTRST
 = 4002                      C	TMS_RN         EQU  4002H             ;TIMES   
				   PCTIMES   FATIMES
 = 3007                      C	WN_RN          EQU  3007H             ;WINDOW  
				   PCWINDO   FAWINDO
 = 300E                      C	S2I_RN         EQU  300EH             ;        
				   PCST2IN
 = 300F                      C	WWP_RN         EQU  300FH             ;        
				   PCWWRAP             PCGRPRD
 = 3010                      C	GWR_RN         EQU  3010H             ;        
				   PCGRPWR             PCGRPWR
 = 3011                      C	GRD_RN         EQU  3011H             ;        
				   PCGRPRD             PCGRPRD
 = 3012                      C	IWR_RN         EQU  3012H             ;        
				   PCINPWR             PCINPWR
 = 3013                      C	IRD_RN         EQU  3013H             ;        
				   PCINPRD             PCINPRD
 = 3014                      C	M1_RN          EQU  3014H             ;        
				                       PCMSDRV
 = 3014                      C	M1_RN          EQU  3014H             ;        
				                       PCIBMDRV
 = 3015                      C	INC_RN         EQU  3015H             ;        
				   PCINCHA             PCINCHA
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-186


 = 3016                      C	DBC_RN         EQU  3016H             ;        
				   PCINDBC             PCINDBC
 = 3017                      C	C0H_RN         EQU  3017H             ;        
				   PCGEQUP
 = 3018                      C	MRD_RN         EQU  3018H             ;
 = 3019                      C	NWR_RN         EQU  3019H             ;
 = 301A                      C	IN_RN          EQU  301AH             ;        
				   PCINPUT             PCINPUT
 = 301B                      C	MG_RN          EQU  301BH             ;        
				   PCINPUT             PCINPUT
 = 301C                      C	MWR_RN         EQU  301CH             ;        
				   PCMEUWR             PCMEUWR
			     C	;
			     C	
			     C	;
								;
					EXTRN	DISK_PANEL:WORD ;AN000;
					EXTRN	SEARCH_FILE:WORD;AN000;
					EXTRN	FK_ENT:BYTE	;AN000;
					EXTRN	FK_ENT_LEN:ABS	;AN000;
					EXTRN	E_FILE_ATTR:ABS ;AN000;
					EXTRN	E_RETURN:ABS	;AN000;
					EXTRN	ACTIVE:BYTE	;AN000;
					EXTRN	ALTERNATE:BYTE	;AN000;
					EXTRN	LCD:ABS 	;AN000;
					EXTRN	E_RETURN:ABS	;AN000;
					EXTRN	ERROR_ACTIVE:BYTE;AN000;
					EXTRN	MEM_SIZE:WORD	;AN024;
								;;;;;;;;;
					EXTRN	DISPLAY_MESSAGE_ROUTINE:FAR ;AN
				024;
					EXTRN	HOOK_INT_24:FAR 	;AN000;
					EXTRN	RESTORE_INT_24:FAR	;AN000;
					EXTRN	FIND_FILE_ROUTINE:FAR	;AN000;
					EXTRN	GET_FUNCTION_CALL:NEAR	;AN000;
					EXTRN	HANDLE_CHILDREN:NEAR	;AN000;
					EXTRN	PREPARE_PANEL_CALL:NEAR ;AN000;
					EXTRN	ALLOCATE_HELP:FAR	;AN024;
					EXTRN	DEALLOCATE_HELP:FAR	;AN024;
					EXTRN	ALLOCATE_LVB:FAR	;AN024;
					EXTRN	DEALLOCATE_LVB:FAR	;AN024;
				
				;
				; Table at OFFSET 0 of panel file
				;
				EXT_FILE STRUC				;AN024;
 0000  0000			 PCBS	 DW	 0			;AN024;
				offset of PCB vector table
 0002  0000			 NPCBS	 DW	 0			;AN024;
				number of PCBs
 0004  0000			 SCBS	 DW	 0			;AN024;
				offset of SCB vector table
 0006  0000			 NSCBS	 DW	 0			;AN024;
				number of SCBs
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-187


 0008  0000			 COLTBL  DW	 0			;AN024;
				offset of COLOR attribute table
 000A  0000			 NCOLTBL DW	 0			;AN024;
				number of COLOR attribute sets
 000C  0000			 MONTBL  DW	 0			;AN024;
				offset of MONO attribute table
 000E  0000			 NMONTBL DW	 0			;AN024;
				number of MONO attribute sets
 0010				EXT_FILE ENDS				;AN024;
									;
 073A				DATA	  SEGMENT BYTE PUBLIC 'DATA'    ;AN024;
 073A  53 45 4C 45 43 54	CFILE	  DB   'SELECT.DAT',0           ;AN024;
				compressed panel file
       2E 44 41 54 00		
 = 00FF				REPCHAR   EQU  255			;AN024;
				character used as repeat flag
 0745				DATA	  ENDS				;AN024;
				 					
							;AN000;
									;
				IF CASFAR				;AN000;
				   IFE CASRM				;AN000;
					       EXTRN   INPUT:FAR	;AN000;
					       EXTRN   HLPRD:FAR	;AN000;
					       EXTRN   SLCTP:FAR	;AN000;
					       EXTRN   PANEL:FAR	;AN000;
					       EXTRN   DISPQ:FAR	;AN000;
					       EXTRN   INCHA:FAR	;AN000;
					       EXTRN   MBEEP:FAR	;AN000;
					       EXTRN   INSTRN:FAR	;AN000;
					       EXTRN   GVIDO:FAR	;AN000;
					       EXTRN   WWRAP:FAR	;AN000;
				   ENDIF				;AN000;
									;
 0000				SELECT	SEGMENT PARA PUBLIC 'SELECT'    ;AN000;
				segment for far routine
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; IF NEAR procedure, then define segment and EX
				TRN
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				ENDIF					;AN000;
					ASSUME	CS:SELECT,DS:DATA,ES:DATA ;AN00
				0;
				
					PUBLIC	CURSOROFF,PCGVIDO_CALL,INITIALI
				ZE;AN000;
					PUBLIC	GET_KEY,PCDISPQ_CALL,PCPANEL_CA
				LL;AN000;
					PUBLIC	GET_SCROLL_CALL,PCINPUT_CALL,CU
				RSORON;AN000;
					PUBLIC	GET_SCB,GET_PCB,GET_ICB,PCMBEEP
				_CALL,PCSLCTP_CALL;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-188


					EXTRN	GET_HELP_ID:NEAR	;AN000;
					EXTRN	ADJUST_DOWN:NEAR	;AN000;
					EXTRN	ADJUST_UP:NEAR		;AN000;
					EXTRN	INIT_SCROLL_CALL:NEAR	;AN000;
					EXTRN	INIT_PQUEUE_CALL:NEAR	;AN000;
					EXTRN	DISPLAY_PANEL_CALL:NEAR ;AN000;
					EXTRN	HANDLE_ERROR_CALL:FAR	;AN006;
				JW
					EXTRN	EXIT_SELECT:NEAR	;AN006;
				JW
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; GET_SCROLL_CALL
				;
				;	  Process scroll field relative to curr
				ent active panel.
				;	  Automatically handle help request, di
				splay and interaction.
				;
				; Entry:  WR_DRETSEG   = Segment of dynamic ret
				urn key string
				;	  WR_DRETOFF   = Offset of dynamic retu
				rn key string
				;	  WR_DRETLEN   = Length of dynamic retu
				rn key string
				;
				;	  WR_HCBCONT   = ID of the desired cont
				extual help text
				;
				;	  WR_SCBID     = SCB Number of scroll f
				ield
				;
				;	  AX	     0 = Use default highlight 
				and scroll list position
				;		     1 = Initialize highlight a
				nd scroll list position
				;			 to the top of the list
				;
				; Exit:   AX	       = Contains keystroke
				;	  BX	       = Current element
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				PUSHH	MACRO	REG_LIST	;;AN000;
					IRP	REG,<REG_LIST>	;;AN000;
					PUSH	REG		;;AN000; save r
				egisters
					ENDM			;;AN000;
						ENDM		;;AN000;
								;;
				POPP	MACRO	REG_LIST	;;AN000;
					IRP	REG,<REG_LIST>	;;AN000;
					POP	REG		;;AN000; return
				 registers to initial state
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-189


					ENDM			;;AN000;
						ENDM		;;AN000;
								;;
				DOSCALL   MACRO 		;;AN000;
					  INT	  21H		;;AN000; call t
				o DOS
					  ENDM			;;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0000				GET_SCROLL_CALL PROC NEAR		;AN000;
 0000  51				       PUSH CX			;AN000;
 0001  52				       PUSH DX			;AN000;
 0002  56				       PUSH SI			;AN000;
 0003  57				       PUSH DI			;AN000;
 0004  06				       PUSH ES			;AN000;
				;					;
				; Initialize to top			;
				;					;
 0005  8B 1E 0713 R			       MOV  BX,WR_SCBID 	;AN000;
				get PCSLCTP field
 0009  E8 07EF R			       CALL GET_SCB		;AN000;
				ES:DI points to SCB
				;					;
 000C  3D 0000				       CMP  AX,0		;AN000;
				check to start list & highlight
 000F  74 0A				       JE   GS10		;AN000;
				 at top
				;					;
 0011  26: C7 45 16 0001		       MOV  ES:[DI]+SCB_TOPELE,1;AN000;
				intialize parameters
 0017  26: 89 45 1A			       MOV  ES:[DI]+SCB_CURELE,AX;AN000
				;
				;					;
				; Locate PCB data and initialize SCB	;
				;					;
 001B  8B 1E 01D7 R		GS10:	       MOV  BX,QM_ACTIVEPAN	;AN000;
				get the active panel number
 001F  E8 07C6 R			       CALL GET_PCB		;AN000;
				ES:DI address of panel PCB
									;
 0022  26: FF 75 05			       PUSH ES:[DI]+PCB_UROW	;AN000;
				    ;get active panel row
 0026  26: FF 75 07			       PUSH ES:[DI]+PCB_UCOL	;AN000;
				    ;get active panel column
 002A  26: FF 75 0D			       PUSH ES:[DI]+PCB_CCBID	;AN000;
				get active panel color index
									;
 002E  8B 1E 0713 R			       MOV  BX,WR_SCBID 	;AN000;
				get PCSLCTP field
 0032  E8 07EF R			       CALL GET_SCB		;AN000;
				ES:DI points to SCB
									;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-190


 0035  26: 8F 85 009D			       POP  ES:[DI]+SCB_CCBID	;AN000;
				get the panel's current color ind
 003A  26: 8F 45 10			       POP  ES:[DI]+SCB_RELCOL	;AN000;
				set the panel's relative column
 003E  26: 8F 45 0E			       POP  ES:[DI]+SCB_RELROW	;AN000;
				set the panel's relative row
				;
				; Build actual return string in complete buffer
				;
 0042  E8 019A R			       CALL SET_RETKEYS 	     ;A
				N000;create complete return string
 0045  E8 01EE R			       CALL SET_NUMKEYS 	     ;A
				N000;GHG
				
 0048  FF 36 0696 R			       PUSH WR_CRETSEG		     ;A
				N000;initialize SCB with complete
 004C  26: 8F 45 2D			       POP  ES:[DI]+SCB_RLSEG	     ;A
				N000; return string information
				
 0050  FF 36 0694 R			       PUSH WR_CRETOFF		     ;A
				N000;
 0054  26: 8F 45 2B			       POP  ES:[DI]+SCB_RLOFF	     ;A
				N000;
				
 0058  FF 36 0692 R			       PUSH WR_CRETLEN		     ;A
				N000;
 005C  26: 8F 45 29			       POP  ES:[DI]+SCB_RLLEN	     ;A
				N000;
				;
				; Process scroll field
				;
 0060  26: 83 25 DF			       AND  ES:[DI]+SCB_OPT1,NOT SCB_UK
				S;AN000;
									    ;se
				t to not use keystrokes
 0064  E8 0A23 R			       CALL PCSLCTP_CALL	     ;A
				N000;display scroll field
				
 0067  26: 8B 5D 1A			       MOV  BX,ES:[DI]+SCB_CURELE    ;A
				N000;get last current element
 006B  26: 8B 85 00B8			       MOV  AX,ES:[DI]+SCB_KS	     ;A
				N000;get last keystroke
				;
				;
				; determine if current element has specific con
				textual help text
				;
 0070  C7 06 0698 R 0010		       MOV  WR_HLPOPT,HLP_OVER	       
				;AN000;GHG position help panel with default
 0076  50				       PUSH AX			       
				;AN000;GHG
 0077  8B 1E 0713 R			       MOV  BX,WR_SCBID 	       
				;AN000;GHG
 007B  26: 8B 45 1A			       MOV  AX,ES:[DI]+SCB_CURELE      
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-191


				;AN000;GHG
 007F  E8 0000 E			       CALL ADJUST_DOWN 	       
				;AN000;GHG
 0082  8B C8				       MOV  CX,AX		       
				;AN000;GHG
 0084  B8 0002				       MOV  AX,2		       
				;AN000;GHG
 0087  E8 0000 E			       CALL GET_HELP_ID 	       
				;AN000;GHG
 008A  A3 06A2 R			       MOV  WR_HCBCONT,AX	       
				;AN000;GHG get current contextual help ID
 008D  32 E4				       XOR  AH,AH		       
				;AN000;GHG
 008F  8A C6				       MOV  AL,DH		       
				;AN000;GHG
 0091  A3 069E R			       MOV  WR_HLPROW,AX	       
				;AN000;GHG row override of 6
 0094  8A C2				       MOV  AL,DL		       
				;AN000;GHG
 0096  A3 06A0 R			       MOV  WR_HLPCOL,AX	       
				;AN000;GHG row override of 6
 0099  58				       POP  AX			       
				;AN000;GHG
				
 009A  E8 02A5 R			       CALL CHK_NUMKEYS 	     ;A
				N000;GHG
 009D  E8 0251 R			       CALL CHK_RETKEYS 	     ;A
				N000;check if used by other routine
 00A0  E3 03				       JCXZ GS20		     ;A
				N000;keystroke not used elsewhere
				
 00A2  E9 001B R			       JMP  GS10		     ;A
				N000;keystroke used elswhere, continu
									     ; 
				from last position
				;
				; Exit
				;
 00A5  26: 8B 5D 1A		GS20:	       MOV  BX,ES:[DI]+SCB_CURELE    ;A
				N000;return current element
				;
				; display the selected option and exit immediat
				ely
				;
 00A9  50				       PUSH AX			     ;A
				N008;JW
 00AA  53				       PUSH BX			     ;A
				N008;JW
 00AB  26: 83 0D 40			       OR   ES:[DI]+SCB_OPT1,SCB_RD  ;A
				N008;JW
 00AF  E8 0A23 R			       CALL PCSLCTP_CALL	     ;A
				N008;JW display scroll field and exit
 00B2  26: 83 25 BF			       AND  ES:[DI]+SCB_OPT1,NOT SCB_RD
				 ;AN008;JW
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-192


 00B6  5B				       POP  BX			     ;A
				N008;JW
 00B7  58				       POP  AX			     ;A
				N008;JW
				
 00B8  07				       POP  ES			     ;A
				N000;
 00B9  5F				       POP  DI			     ;A
				N000;
 00BA  5E				       POP  SI			     ;A
				N000;
 00BB  5A				       POP  DX			     ;A
				N000;
 00BC  59				       POP  CX			     ;A
				N000;
				
 00BD  C3				       RET			     ;A
				N000;
 00BE				GET_SCROLL_CALL ENDP			     ;A
				N000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-193


				PAGE					     ;A
				N000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; GET_INPUT_CALL
				;
				;	  Process input field relative to curre
				nt active panel.
				;	  Automatically handle help request, di
				splay and interaction.
				;
				; Entry:  WR_DRETSEG   = Segment of dynamic ret
				urn key string
				;	  WR_DRETOFF   = Offset of dynamic retu
				rn key string
				;	  WR_DRETLEN   = Length of dynamic retu
				rn key string
				;
				;	  WR_HCBCONT   = ID of the desired cont
				extual help text
				;
				;	  IN_ICBID     = ICB Number of input fi
				eld
				;
				; Exit:   AX	       = Contains keystroke
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
					PUBLIC GET_INPUT_CALL		     ;A
				N000;GHG
 00BE				GET_INPUT_CALL PROC NEAR		     ;A
				N000;GHG
 00BE  51				       PUSH CX			     ;A
				N000;GHG
 00BF  52				       PUSH DX			     ;A
				N000;GHG
 00C0  56				       PUSH SI			     ;A
				N000;GHG
 00C1  57				       PUSH DI			     ;A
				N000;GHG
 00C2  06				       PUSH ES			     ;A
				N000;GHG
									     ;G
				HG
 00C3  8B 1E 0422 R			       MOV  BX,IN_ICBID 	     ;A
				N000;GHG get PCSLCTP field
 00C7  E8 0818 R			       CALL GET_ICB		     ;A
				N000;GHG ES:DI points to SCB
									     ;G
				HG
 00CA  E8 019A R		GI10:	       CALL SET_RETKEYS 	     ;A
				N000;GHG create complete return string
									     ;G
				HG
 00CD  FF 36 0696 R			       PUSH WR_CRETSEG		     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-194


				N000;GHG initialize SCB with complete
 00D1  26: 8F 45 30			       POP  ES:[DI]+ICB_RETSEG	     ;A
				N000;GHG  return string information
									     ;G
				HG
 00D5  FF 36 0694 R			       PUSH WR_CRETOFF		     ;A
				N000;GHG
 00D9  26: 8F 45 2E			       POP  ES:[DI]+ICB_RETOFF	     ;A
				N000;GHG
									     ;G
				HG
 00DD  FF 36 0692 R			       PUSH WR_CRETLEN		     ;A
				N000;GHG
 00E1  26: 8F 45 2C			       POP  ES:[DI]+ICB_RETLEN	     ;A
				N000;GHG
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Process input field
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 00E5  E8 0A9C R			       CALL PCINPUT_CALL	     ;A
				N000;GHG display input field
									     ;G
				HG
					       PUSHH   <SI,DI,ES,DS>	     ;A
				N000;GHG
 00E8  56                    2		PUSH	SI		; 
 00E9  57                    2		PUSH	DI		; 
 00EA  06                    2		PUSH	ES		; 
 00EB  1E                    2		PUSH	DS		; 
 00EC  26: FF 75 1E			       PUSH	ES:[DI]+ICB_FIELDOFF ;A
				N000;GHG
 00F0  26: FF 75 20			       PUSH	ES:[DI]+ICB_FIELDSEG ;A
				N000;GHG
 00F4  26: FF 75 28			       PUSH	ES:[DI]+ICB_DEFOFF   ;A
				N000;GHG
 00F8  26: FF 75 2A			       PUSH	ES:[DI]+ICB_DEFSEG   ;A
				N000;GHG
									     ;G
				HG
 00FC  26: 8B 4D 1C			       MOV	CX,ES:[DI]+ICB_FIELDLEN
				;AN000;GHG
 0100  0B C9				       OR	CX,CX		     ;A
				N000;GHG
 0102  74 07				       JE	GI_11		     ;A
				N000;GHG
									     ;G
				HG
 0104  07				       POP	ES		     ;A
				N000;GHG
 0105  5F				       POP	DI		     ;A
				N000;GHG
 0106  1F				       POP	DS		     ;A
				N000;GHG
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-195


 0107  5E				       POP	SI		     ;A
				N000;GHG
 0108  FC				       CLD			     ;A
				N000;GHG
 0109  F3/ A4				       REP	MOVSB		     ;A
				N000;GHG
 010B				GI_11:	       POPP    <DS,ES,DI,SI>	     ;A
				N000;GHG
 010B  1F                    2		POP	DS		; 
 010C  07                    2		POP	ES		; 
 010D  5F                    2		POP	DI		; 
 010E  5E                    2		POP	SI		; 
 010F  26: FF 75 1A			       PUSH	ES:[DI]+ICB_ENDBYTE  ;A
				N000;GHG
 0113  26: 8F 45 26			       POP	ES:[DI]+ICB_DEFLEN   ;A
				N000;GHG
									     ;G
				HG
 0117  26: 8B 45 18			       MOV  AX,ES:[DI]+ICB_KEYRET    ;A
				N000;GHG get last keystroke
				;					      G
				HG
				;
				; determine if current element has specific con
				textual help text
				;
									     ;G
				HG
 011B  C7 06 0698 R 0010		       MOV  WR_HLPOPT,HLP_OVER	     ;A
				N000;GHG position help panel with default
 0121  50				       PUSH AX			     ;A
				N000;GHG
 0122  B8 0001				       MOV  AX,1		     ;A
				N000;GHG
 0125  8B 1E 0422 R			       MOV  BX,IN_ICBID 	     ;A
				N000;GHG
 0129  E8 0000 E			       CALL GET_HELP_ID 	     ;A
				N000;GHG
 012C  A3 06A2 R			       MOV  WR_HCBCONT,AX	     ;A
				N000;GHG get current contextual help ID
 012F  32 E4				       XOR  AH,AH		     ;A
				N000;GHG
 0131  8A C6				       MOV  AL,DH		     ;A
				N000;GHG
 0133  A3 069E R			       MOV  WR_HLPROW,AX	     ;A
				N000;GHG row override
 0136  8A C2				       MOV  AL,DL		     ;A
				N000;GHG
 0138  A3 06A0 R			       MOV  WR_HLPCOL,AX	     ;A
				N000;GHG col override
 013B  58				       POP  AX			     ;A
				N000;GHG
									     ;G
				HG
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-196


 013C  E8 0951 R			       CALL CURSOROFF		     ;A
				N000;GHG Turn cursor OFF!!!!
 013F  E8 0251 R			       CALL CHK_RETKEYS 	     ;A
				N000;GHG check if used by other routine
 0142  E3 02				       JCXZ GI20		     ;A
				N000;GHG keystroke not used elsewhere
									     ;G
				HG
 0144  EB 84				       JMP  GI10		     ;A
				N000;GHG keystroke used elswhere, continue
									     ;G
				HG from last position
 0146  07			GI20:	       POP  ES			     ;A
				N000;GHG
 0147  5F				       POP  DI			     ;A
				N000;GHG
 0148  5E				       POP  SI			     ;A
				N000;GHG
 0149  5A				       POP  DX			     ;A
				N000;GHG
 014A  59				       POP  CX			     ;A
				N000;GHG
									     ;G
				HG
 014B  C3				       RET			     ;A
				N000;GHG
 014C				GET_INPUT_CALL ENDP			     ;A
				N000;GHG
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-197


				PAGE					     ;A
				N000;GHG
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;G
				HG
				;
				; GET_INPUT
				;
				;	  Process input field relative to curre
				nt active panel.
				;	  Automatically handle help request, di
				splay and interaction.
				;
				;
				; Entry:   WR_DRETSEG = Segment of call's retur
				n key string
				;	   WR_DRETOFF = Offset of call's return
				 key string
				;	   WR_DRETLEN = Length of call's return
				 key string
				;
				;	   WR_HCBCONT	= ID of the desired con
				textual help text
				;
				;
				; Exit:   AX	   = Contains Keystroke
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 014C				GET_INPUT      PROC NEAR		 ;AN000
				;
 014C  C3				       RET			 ;AN000
				;
 014D				GET_INPUT      ENDP			 ;AN000
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; GET_KEY
				;
				;	   Get a keystroke from the keyboard an
				d return to calling routine
				;	   if not used.  This routine uses the 
				string of return keys and
				;	   builds the complete set of return ke
				ys.  Once the complete set of
				;	   return keys is built, the CAS keyboa
				rd routine is called to look
				;	   for a keystroke.  When a keystroke i
				s pressed, the CAS routine
				;	   returns and the keystroke is checked
				 to determine if help should
				;	   be processed.  If the keystroke is n
				ot used by help, then it is
				;	   returned to the calling routine for 
				use.
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-198


				; Entry:   WR_DRETSEG = Segment of call's retur
				n key string
				;	   WR_DRETOFF = Offset of call's return
				 key string
				;	   WR_DRETLEN = Length of call's return
				 key string
				;
				; Exit:    AX = Contains unused keystroke retur
				ned from call
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 014D				GET_KEY        PROC NEAR		;AN000;
				
 014D  51				       PUSH CX			;AN000;
				save registers
				;
				; Create complete return key string
				;
 014E  B8 0000			CGK10:	       MOV  AX,0		;AN000;
				clear to zero
									;
 0151  E8 019A R			       CALL SET_RETKEYS 	;AN000;
				create complete return string
									;
 0154  FF 36 0696 R			       PUSH WR_CRETSEG		;AN000;
				initialize PCINSTR parameters
 0158  8F 06 0087 R			       POP  INS_SSEG		;AN000;
				 with complete return string data
									;
 015C  FF 36 0694 R			       PUSH WR_CRETOFF		;AN000;
 0160  8F 06 0085 R			       POP  INS_SOFF		;AN000;
									;
 0164  FF 36 0692 R			       PUSH WR_CRETLEN		;AN000;
 0168  8F 06 0083 R			       POP  INS_SLEN		;AN000;
				;					;
				; Get keystroke from keyboard		;
				;					;
 016C  C7 06 0129 R 0001	CGK20:	      MOV  INC_OPT,INC_KWAIT	;AN000;
				wait for keystroke
 0172  E8 0979 R			      CALL PCINCHA_CALL 	;AN000;
				call CAS routine
				;
				; Check if keystroke is a valid return key
				;
 0175  C7 06 0079 R 0001		       MOV  INS_OPT,INS_FKS	;AN000;
				set find keystroke option
 017B  A1 012D R			       MOV  AX,INC_KS		;AN000;
				set keystroke to PCINSTR
 017E  A3 007B R			       MOV  INS_KS,AX		;AN000;
				 parameter
									;
 0181  E8 0A8C R			       CALL PCINSTR_CALL	;AN000;
				check if good key
									;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-199


 0184  F7 06 008B R FFFF		       TEST INS_RSLT,0FFFFH	;AN000;
				check if key found
 018A  75 05				       JNE  CGK30		;AN000;
				yes
									;
 018C  E8 0A13 R			       CALL PCMBEEP_CALL	;AN000;
				no
 018F  EB DB				       JMP  CGK20		;AN000;
				try again
				;
				; Check if help keystroke and process if yes
				;
 0191  E8 0251 R		CGK30:	       CALL CHK_RETKEYS 	;AN000;
				check keystroke
 0194  E3 02				       JCXZ CGKEXIT		;AN000;
				not used return to calling routin
 0196  EB B6				       JMP  CGK10		;AN000;
				if used by help, get another key
									;
 0198  59			CGKEXIT:       POP  CX			;AN000;
				restore registers
 0199  C3				       RET			;AN000;
 019A				GET_KEY        ENDP			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-200


				PAGE					;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; SET_RETKEYS
				;
				;	  Combine the calling routine's dynamic
				 return key string with
				;	  the return keys of the child panels c
				urrently displayed into
				;	  one complete return string.
				;
				; Entry:  WR_DRETSEG = Segment of call's dynami
				c return key string
				;	  WR_DRETOFF = Offset of call's dynamic
				 return key string
				;	  WR_DRETLEN = Length of call's dynamic
				 return key string
				;
				; Exit:   WR_CRETSEG = Segment of complete retu
				rn key string to use
				;	  WR_CRETOFF = Offset of complete retur
				n key string to use
				;	  WR_CRETLEN = Length of complete retur
				n key string to use
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 019A				SET_RETKEYS    PROC NEAR		;AN000;
 019A  51				       PUSH CX			;AN000;
 019B  52				       PUSH DX			;AN000;
 019C  57				       PUSH DI			;AN000;
 019D  56				       PUSH SI			;AN000;
 019E  06				       PUSH ES			;AN000;
 019F  1E				       PUSH DS			;AN000;
				;
				; do not exceed WR_MAXRETKSZ  buffer length
				;
				;
				; Move keystrokes from dynamic return key strin
				g to complete return strg buffer
				;
 01A0  FC				       CLD			;AN000;
				auto increment
 01A1  FF 36 0696 R			       PUSH WR_CRETSEG		;AN000;
				get segment of complete return
 01A5  07				       POP  ES			;AN000;
				 buffer
									;
 01A6  8B 3E 0694 R			       MOV  DI,WR_CRETOFF	;AN000;
				get offset of complete return
									;
 01AA  8B 0E 068C R			       MOV  CX,WR_DRETLEN	;AN000;
				get length of dynamic return strg
 01AE  8B D1				       MOV  DX,CX		;AN000;
				 and initialize DX counter
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-201


									;
 01B0  8B 36 068E R			       MOV  SI,WR_DRETOFF	;AN000;
				get offset of dynamic return strg
									;
 01B4  1E				       PUSH DS			;AN000;
				save data segment
									;
 01B5  FF 36 0690 R			       PUSH WR_DRETSEG		;AN000;
				get offset of dynamic return strg
 01B9  1F				       POP  DS			;AN000;
									;
 01BA  F3/ A4				       REP  MOVSB		;AN000;
				copy dynamic return key string
									; to co
				mplete return key buffer
 01BC  1F				       POP  DS			;AN000;
				restore data segment
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Add assigned keys from displayed child panels
				 to complete return buffer
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 01BD  8B 36 0201 R			       MOV  SI,QM_RETKEYSOFF	;AN000;
				get offset of return buffer
									;
 01C1  8B 0E 01FF R			       MOV  CX,QM_RETKEYSLEN	;AN000;
 01C5  03 D1				       ADD  DX,CX		;AN000;
				add length of return keys
									;
 01C7  1E				       PUSH DS			;AN000;
				save data segment
									;
 01C8  FF 36 0203 R			       PUSH QM_RETKEYSSEG	;AN000;
 01CC  1F				       POP  DS			;AN000;
				get segment of return buffer
									;
 01CD  F3/ A4				       REP  MOVSB		;AN000;
				copy string sent
									;
 01CF  1F				       POP  DS			;AN000;
				restore data segment
									;
 01D0  8B 0E 0727 R			       MOV  CX,WR_MAXRETKSZ	;AN061;
 01D4  2B CA				       SUB  CX,DX		;AN061;
 01D6  B0 00				       MOV  AL,0		;AN061;
 01D8  F3/ AA				       REP  STOSB		;AN061;
									;
 01DA  89 16 0692 R			       MOV  WR_CRETLEN,DX	;AN000;
				initialize current return string
				;					;
				; Exit					;
				;					;
 01DE  1F			SRK30:	       POP  DS			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-202


				restore registers
 01DF  07				       POP  ES			;AN000;
 01E0  5E				       POP  SI			;AN000;
 01E1  5F				       POP  DI			;AN000;
 01E2  5A				       POP  DX			;AN000;
 01E3  59				       POP  CX			;AN000;
 01E4  C3				       RET			;AN000;
 01E5				SET_RETKEYS    ENDP			;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; SET_NUMKEYS
				;
				; Entry:  WR_CRETSEG  = Segment of call's dynam
				ic return key string
				;	  WR_CRETOFF  = Offset of call's dynami
				c return key string
				;	  WR_CRETLEN  = Length of call's dynami
				c return key string
				;
				; Exit:   WR_CRETSEG' = Segment of complete ret
				urn key string to use
				;	  WR_CRETOFF' = Offset of complete retu
				rn key string to use
				;	  WR_CRETLEN' = Length of complete retu
				rn key string to use
				;
				;	GORD GIDDINGS
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 01E5  31 32 33 34 35 36	NUMKEYS        DB	'123456789'     ;AN000;
       37 38 39			
									;
 01EE				SET_NUMKEYS    PROC NEAR		;AN000;
 01EE  50				       PUSH AX			;AN000;
				save registers
 01EF  53				       PUSH BX			;AN000;
 01F0  51				       PUSH CX			;AN000;
 01F1  57				       PUSH DI			;AN000;
 01F2  56				       PUSH SI			;AN000;
 01F3  06				       PUSH ES			;AN000;
 01F4  1E				       PUSH DS			;AN000;
				;
				; Move numeric keystrokes into completed return
				 strg buffer
				;
 01F5  8B 1E 0713 R			       MOV  BX,WR_SCBID 	;AN000;
				get PCSLCTP field
 01F9  E8 07EF R			       CALL GET_SCB		;AN000;
				ES:DI points to SCB
									;
 01FC  26: F7 45 04 0020		       TEST ES:[DI]+SCB_OPT3,SCB_NUMS;A
				N000;
 0202  74 45				       JZ   SNK_30		;AN000;
									;
 0204  26: FF B5 00AB			       PUSH ES:[DI]+SCB_SELSEG	;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-203


 0209  26: FF B5 00A9			       PUSH ES:[DI]+SCB_SELOFF	;AN000;
 020E  26: FF 75 18			       PUSH ES:[DI]+SCB_NUMELE	;AN000;
 0212  59				       POP  CX			;AN000;
 0213  5F				       POP  DI			;AN000;
 0214  07				       POP  ES			;AN000;
 0215  33 C0				       XOR  AX,AX		;AN000;
									;
 0217  BB 0002			SNR_10:        MOV  BX,SCB_ACTIVEON	;AN000;
 021A  26: 39 1D			       CMP  ES:[DI],BX		;AN000;
 021D  75 01				       JNE  SNR_15		;AN000;
 021F  40				       INC  AX			;AN000;
 0220  47			SNR_15:        INC  DI			;AN000;
 0221  47				       INC  DI			;AN000;
 0222  E2 F3				       LOOP SNR_10		;AN000;
									;
 0224  3D 0009				       CMP  AX,9		;AN000;
 0227  76 03				       JBE  SNR_20		;AN000;
 0229  B8 0009				       MOV  AX,9		;AN000;
 022C  8B C8			SNR_20:        MOV  CX,AX		;AN000;
									;
 022E  FF 36 0694 R			       PUSH WR_CRETOFF		;AN000;
				get offset of complete return
 0232  FF 36 0696 R			       PUSH WR_CRETSEG		;AN000;
				get segment of complete return
 0236  07				       POP  ES			;AN000;
 0237  5F				       POP  DI			;AN000;
									;
 0238  03 3E 0692 R			       ADD  DI,WR_CRETLEN	;AN000;
				get length of dynamic return strg
 023C  01 0E 0692 R			       ADD  WR_CRETLEN,CX	;AN000;
 0240  8D 36 01E5 R			       LEA  SI,NUMKEYS		;AN000;
 0244  0E				       PUSH CS			;AN000;
 0245  1F				       POP  DS			;AN000;
									;
 0246  FC				       CLD			;AN000;
				auto increment
 0247  F3/ A5				       REP  MOVSW		;AN000;
									;
 0249  1F			SNK_30:        POP  DS			;AN000;
				restore registers
 024A  07				       POP  ES			;AN000;
 024B  5E				       POP  SI			;AN000;
 024C  5F				       POP  DI			;AN000;
 024D  59				       POP  CX			;AN000;
 024E  5B				       POP  BX			;AN000;
 024F  58				       POP  AX			;AN000;
 0250  C3				       RET			;AN000;
 0251				SET_NUMKEYS    ENDP			;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; CHK_RETKEYS
				;
				;	   Check return key for active function
				 keys
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-204


				;
				;	   Note:  That currently this routine s
				earchs for only the help
				;	   function keys (F1=Help, F5=Index, F7
				=Keys); however, other
				;	   function keys could be searched for 
				and processed in this
				;	   routine before returning to the main
				 dialog.
				;
				; Entry:   AX =  Keystroke
				;
				; Exit:    CX =  0= keystroke not used
				;		 1= keystroke used
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0251				CHK_RETKEYS    PROC NEAR		;AN000;
 0251  9C				       PUSHF			     ;A
				N000;save registers and variables
 0252  50				       PUSH AX			     ;A
				N000;
 0253  53				       PUSH BX			     ;A
				N000;
 0254  52				       PUSH DX			     ;A
				N000;
 0255  56				       PUSH SI			     ;A
				N000;
 0256  57				       PUSH DI			     ;A
				N000;
 0257  06				       PUSH ES			     ;A
				N000;
 0258  1E				       PUSH DS			     ;A
				N000;
 0259  FF 36 06A2 R			       PUSH WR_HCBCONT		     ;A
				N000;save contextual help ID
 025D  FF 36 01D7 R			       PUSH QM_ACTIVEPAN	     ;A
				N000;save current active panel
 0261  FF 36 0713 R			       PUSH WR_SCBID		     ;A
				N000;save current SCB ID
 0265  FF 36 0690 R			       PUSH WR_DRETSEG		     ;A
				N000;save dynamic return key vars
 0269  FF 36 068E R			       PUSH WR_DRETOFF		     ;A
				N000;
 026D  FF 36 068C R			       PUSH WR_DRETLEN		     ;A
				N000;
 0271  FF 36 0682 R			       PUSH MB_FREQUENCY	     ;A
				N004;GHG   for PTM 1064
				;
				; Check if keystroke pressed displays, processe
				s, or removes contextual help
				;
 0275  E8 02F1 R			       CALL MANAGE_HELP 	     ;A
				N000;
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-205


 0278  83 F9 00				       CMP  CX,0		     ;A
				N000;check if keystroke used by help
 027B  74 03				       JE   CHK10		     ;A
				N000;no, check other functions
				;
 027D  EB 01 90				       JMP  CHKEXIT		     ;A
				N000;yes, exit
				;
				; Keys may be check here and processed for othe
				r functions
				;
 0280				CHK10:					     ;A
				N000;
				;
				; Exit to calling routine
				;
 0280  8F 06 0682 R		CHKEXIT:       POP  MB_FREQUENCY	     ;A
				N004;GHG   for PTM 1064
 0284  8F 06 068C R			       POP  WR_DRETLEN		     ;A
				N000;save dynamic return key vars
 0288  8F 06 068E R			       POP  WR_DRETOFF		     ;A
				N000;
 028C  8F 06 0690 R			       POP  WR_DRETSEG		     ;A
				N000;
 0290  8F 06 0713 R			       POP  WR_SCBID		     ;A
				N000;restore current SCB ID
 0294  8F 06 01D7 R			       POP  QM_ACTIVEPAN	     ;A
				N000;restore current active panel
 0298  8F 06 06A2 R			       POP  WR_HCBCONT		     ;A
				N000;restore contextual help ID
 029C  1F				       POP  DS			     ;A
				N000;
 029D  07				       POP  ES			     ;A
				N000;
 029E  5F				       POP  DI			     ;A
				N000;
 029F  5E				       POP  SI			     ;A
				N000;
 02A0  5A				       POP  DX			     ;A
				N000;
 02A1  5B				       POP  BX			     ;A
				N000;
 02A2  58				       POP  AX			     ;A
				N000;
 02A3  9D				       POPF			     ;A
				N000;
 02A4  C3				       RET			     ;A
				N000;
 02A5				CHK_RETKEYS    ENDP			     ;A
				N000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; CHK_NUMKEYS
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-206


				;	   Check return key for numeric keys
				;
				; Entry:   AX =  Keystroke
				;
				; Exit:    AX =  The first character in the com
				pleted return key string
				;	      WR_CRETSEG:WR_CRETOFF
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;
 02A5				CHK_NUMKEYS    PROC NEAR		
					;AN000;
 02A5  06				       PUSH ES			
					;AN000;
 02A6  57				       PUSH DI			
					;AN000;
 02A7  53				       PUSH BX			
					;AN000;
 02A8  8B 1E 0713 R			       MOV  BX,WR_SCBID 	
					;AN000;
 02AC  E8 07EF R			       CALL GET_SCB		
					;AN000;
 02AF  26: F7 45 04 0020		       TEST ES:[DI]+SCB_OPT3,SCB_NUMS
					;AN000;
 02B5  74 36				       JZ   CNK_20		
					;AN000;
 02B7  0A E4				       OR   AH,AH		
					;AN000;
 02B9  75 32				       JNZ  CNK_20		
					;AN000;
 02BB  3C 31				       CMP  AL,'1'                     
				 ;AN000;
 02BD  72 2E				       JB   CNK_20		
					;AN000;
 02BF  3C 39				       CMP  AL,'9'                     
				 ;AN000;
 02C1  77 2A				       JA   CNK_20		
					;AN000;
									
					;
 02C3  8B D8				       MOV  BX,AX		
					;AN000; now form the index value
 02C5  83 EB 30				       SUB  BX,'0'                     
				 ;AN000; from the keystroke!
									
					;
					       PUSHH <ES,DI>		
					;AN000;GHG
 02C8  06                    2		PUSH	ES		; 
 02C9  57                    2		PUSH	DI		; 
					       PUSHH <WR_CRETSEG,WR_CRETOFF>
					;AN000;GHG
 02CA  FF 36 0696 R          2		PUSH	WR_CRETSEG		; 
 02CE  FF 36 0694 R          2		PUSH	WR_CRETOFF		; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-207


					       POPP  <DI,ES>		
					;AN000;GHG
 02D2  5F                    2		POP	DI		; 
 02D3  07                    2		POP	ES		; 
 02D4  26: 8A 05			       MOV  AL,ES:[DI]		
					;AN000;GHG
					       POPP  <DI,ES>		
					;AN000;GHG
 02D7  5F                    2		POP	DI		; 
 02D8  07                    2		POP	ES		; 
									
					;				;
 02D9  26: 89 85 00B8			       MOV  ES:[DI]+SCB_KS,AX	
					;AN000;
 02DE  50				       PUSH AX			
					;AN000;
 02DF  8B C3				       MOV  AX,BX		
					;AN000;get PCSLCTP field
 02E1  8B 1E 0713 R			       MOV  BX,WR_SCBID 	
					;AN000;
 02E5  E8 0000 E			       CALL ADJUST_UP		
					;AN000;
 02E8  26: 89 45 1A			       MOV  ES:[DI]+SCB_CURELE,AX
					;AN000;
 02EC  58				       POP  AX			
					;AN000;
									
					;
 02ED  5B			CNK_20:        POP  BX			
					;AN000;
 02EE  5F				       POP  DI			
					;AN000;
 02EF  07				       POP  ES			
					;AN000;
 02F0  C3				       RET			
					;AN000;
 02F1				CHK_NUMKEYS    ENDP			
					;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;
				;
				; MANAGE_HELP
				;
				;	  Manage contextual, indexed and keys h
				elp.  This routine is used     :
				;	  to display, process and remove help f
				rom the screen.
				;
				; Entry:  AX		  = Keystroke pressed
				;
				;	  WR_HLPOPT	  = Help display and op
				eration options
				;	  WR_HLPROW	  = Override row for he
				lp panel
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-208


				;	  WR_HLPCOL	  = Override column for
				 help panel
				;
				;	  WR_HCBCONT	  = Current contextual 
				help ID
				;	  WR_HCBHELP	  = Help-on-help ID
				;	  WR_HCBKEYS	  = Keys help ID
				;
				;	  WR_PCBHPAN	  = Help panel ID
				;
				;	  WR_SCBCONT	  = Scroll ID for conte
				xt forms of help
				;	  WR_SCBINDX	  = Scroll ID for index
				ed forms of help
				;
				;	  WR_KEYQUIT	  = Quit keystroke (Esc
				)
				;	  WR_KEYKEYS	  = Keys help keystroke
				 (F7=Keys)
				;	  WR_KEYHELP	  = Help-on-help keystr
				oke (F1=Help)
				;	  WR_KEYCONT	  = Contextual help key
				stroke (F1=Help)
				;	  WR_KEYINDX	  = Indexed help keystr
				oke (F5=Index)
				;	  WR_KEYSWIT	  = Switch keystroke (F
				2=Switch)
				;
				;	  HRD_FILSPOFF	  = Offset of contextua
				l help file path name
				;	  HRD_FILSPSEG	  = Segment of contextu
				al help file path name
				;
				; Exit:   AX		  = Keystroke
				;	  CX	      0   = Keystroke not used
				;		      1   = Keystroke used
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 02F1				MANAGE_HELP    PROC NEAR		
					;AN000;
				;
				; Check if help is displayed
				;
 02F1  B9 0000				       MOV  CX,0		
					;AN000;
				
 02F4  1E				       PUSH DS			     ;A
				N007;JW
 02F5  0E				       PUSH CS			     ;A
				N007;JW
 02F6  1F				       POP  DS			     ;A
				N007;JW
 02F7  80 3E 0000 E 01			       CMP  ERROR_ACTIVE,1	     ;A
				N007;JW is an error being processed?
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-209


 02FC  1F				       POP  DS			     ;A
				N007;JW
 02FD  75 03				       JNE  MH00		     ;A
				N007;JW no, continue
 02FF  E9 0460 R			       JMP  MHEXIT		     ;A
				N007;JW yes, exit
				
 0302  83 3E 069C R 00		MH00:	       CMP  WR_HLPDIS,0 	     ;A
				N000;check if help is displayed
 0307  74 7D				       JE   MH30		     ;A
				N000;
				
 0309  3B 06 06BE R			       CMP  AX,WR_KEYSWIT	     ;A
				N000;check if any key but switch
 030D  75 29				       JNE  MH10		     ;A
				N000; and remove help
				
 030F  F7 06 069C R 0008		       TEST WR_HLPDIS,HLP_INDX	     ;A
				N000;check if index displayed
 0315  75 0F				       JNE  MH05		     ;A
				N000;yes
				
 0317  C7 06 01D1 R 0004		       MOV  QM_OPT1,QM_RVMCHD	     ;A
				N000;remove child panel
 031D  A1 06B8 R			       MOV  AX,WR_PCBENTR	     ;A
				N000;Enter panel
 0320  A3 01D5 R			       MOV  QM_ID,AX		     ;A
				N000;parent PCB number
 0323  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;
				
 0326  C7 06 01D1 R 0002	MH05:	       MOV  QM_OPT1,QM_PUSHCHD	     ;A
				N000;add child panel
 032C  A1 06AC R			       MOV  AX,WR_PCBHELP	     ;A
				N000;F1=Help panel
 032F  A3 01D5 R			       MOV  QM_ID,AX		     ;A
				N000;parent PCB number
 0332  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;
 0335  EB 07 90				       JMP  MH20		     ;A
				N000;
				
 0338  E8 079E R		MH10:	       CALL REMOVE_HELP 	     ;A
				N000;restore original display queues
 033B  E9 0442 R			       JMP  MH80		     ;A
				N000;exit
				;
				; Process read help text
				;
 033E  E8 06AA R		MH20:	       CALL PROCESS_HELP	     ;A
				N000;process contextual help
				
 0341  B9 0001				       MOV  CX,1		     ;A
				N000;set keystroke used flag
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-210


				
 0344  3B 06 06BE R			       CMP  AX,WR_KEYSWIT	     ;A
				N000;check if help should be left
 0348  75 32				       JNE  MH25		     ;A
				N000; on the screen
				
 034A  C7 06 01D1 R 0004		       MOV  QM_OPT1,QM_RVMCHD	     ;A
				N000;remove child panel
 0350  A1 06AC R			       MOV  AX,WR_PCBHELP	     ;A
				N000;F1=Help
 0353  A3 01D5 R			       MOV  QM_ID,AX		     ;A
				N000;parent PCB number
 0356  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;
				
 0359  A1 06AC R			       MOV  AX,WR_PCBHELP	     ;A
				N000;F1=Help
 035C  A3 01D5 R			       MOV  QM_ID,AX		     ;A
				N000;parent PCB number
 035F  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;
				
 0362  F7 06 069C R 0008		       TEST WR_HLPDIS,HLP_INDX	     ;A
				N000;check if index displayed
 0368  75 0F				       JNE  MH22		     ;A
				N000;yes
				
 036A  C7 06 01D1 R 0002		       MOV  QM_OPT1,QM_PUSHCHD	     ;A
				N000;add child panel
 0370  A1 06B8 R			       MOV  AX,WR_PCBENTR	     ;A
				N000;Enter panel
 0373  A3 01D5 R			       MOV  QM_ID,AX		     ;A
				N000;parent PCB number
 0376  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;
				
 0379  E9 0442 R		MH22:	       JMP  MH80		     ;A
				N000;exit
				
 037C  3C 1B			MH25:	       CMP  AL,01BH		     ;A
				N000;check for quit key
 037E  75 06				       JNE  MH30		     ;A
				N000; refresh display
				
 0380  E8 079E R			       CALL REMOVE_HELP 	     ;A
				N000;restore original display queues
 0383  E9 0442 R			       JMP  MH80		     ;A
				N000;exit
				
				; Read help if requested
				
 0386  3B 06 06BC R		MH30:	       CMP  AX,WR_KEYHELP	     ;A
				N000;check if F1=help requested
 038A  75 5A				       JNE  MH60		     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-211


				N000;
				
 038C  83 3E 069C R 00			       CMP  WR_HLPDIS,0 	     ;A
				N000;is help already displayed
 0391  74 03				       JE   MH40		     ;A
				N000;no
				
 0393  E8 079E R			       CALL REMOVE_HELP 	     ;A
				N000;restore original display queues
				
 0396  F7 06 069C R 0001	MH40:	       TEST WR_HLPDIS,HLP_CONT	     ;A
				N000;check if contextual help already
 039C  74 24				       JE   MH50		     ;A
				N000; on
				
 039E  C7 06 069A R 0002		       MOV  WR_HLPPAN,HLP_KEYS	     ;A
				N000;turn on help on keys
 03A4  83 0E 069A R 01			       OR   WR_HLPPAN,HLP_CONT	     ;A
				N000;turn on contextual help
 03A9  83 0E 069A R 08			       OR   WR_HLPPAN,HLP_INDX	     ;A
				N000;turn on help index
				
 03AE  FF 36 06A4 R			       PUSH WR_HCBHELP		     ;A
				N000;set help-on-help ID
 03B2  8F 06 0095 R			       POP  HRD_ID		     ;A
				N000;
				
 03B6  C7 06 069C R 0004		       MOV  WR_HLPDIS,HLP_HELP	     ;A
				N000;turn help-on-help status on
 03BC  E8 0461 R			       CALL READ_HELP		     ;A
				N000;prepare help text
 03BF  E9 033E R			       JMP  MH20		     ;A
				N000;loop to process
				
 03C2  C7 06 069A R 0002	MH50:	       MOV  WR_HLPPAN,HLP_KEYS	     ;A
				N000;turn on help on keys
 03C8  83 0E 069A R 04			       OR   WR_HLPPAN,HLP_HELP	     ;A
				N000;turn on help-on-help
 03CD  83 0E 069A R 08			       OR   WR_HLPPAN,HLP_INDX	     ;A
				N000;turn on help index
				
 03D2  FF 36 06A2 R			       PUSH WR_HCBCONT		     ;A
				N000;get current contextual help text
 03D6  8F 06 0095 R			       POP  HRD_ID		     ;A
				N000; ID
				
 03DA  C7 06 069C R 0001		       MOV  WR_HLPDIS,HLP_CONT	     ;A
				N000;turn contextual help status on
 03E0  E8 0461 R			       CALL READ_HELP		     ;A
				N000;prepare help text
 03E3  E9 033E R			       JMP  MH20		     ;A
				N000;loop to process
				;
				; Check if indexed help requested for display
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-212


				;
 03E6  3B 06 06C0 R		MH60:	       CMP  AX,WR_KEYINDX	     ;A
				N000;check if index selected
 03EA  75 27				       JNE  MH70		     ;A
				N000;
				
 03EC  83 3E 069C R 00			       CMP  WR_HLPDIS,0 	     ;A
				N000;is help already displayed
 03F1  74 03				       JE   MH65		     ;A
				N000;no
				
 03F3  E8 079E R			       CALL REMOVE_HELP 	     ;A
				N000;restore original display queues
				
 03F6  C7 06 069A R 0001	MH65:	       MOV  WR_HLPPAN,HLP_CONT	     ;A
				N000;turn on contextual help
 03FC  83 0E 069A R 02			       OR   WR_HLPPAN,HLP_KEYS	     ;A
				N000;turn on help on keys
				
 0401  C7 06 0095 R 0000		       MOV  HRD_ID,0		     ;A
				N000;set contextual help ID
				
 0407  C7 06 069C R 0008		       MOV  WR_HLPDIS,HLP_INDX	     ;A
				N000;turn index status on
 040D  E8 0461 R			       CALL READ_HELP		     ;A
				N000;prepare help text
 0410  E9 033E R			       JMP  MH20		     ;A
				N000;loop to process
				;
				; Check if keys help requested for display
				;
 0413  3B 06 06C2 R		MH70:	       CMP  AX,WR_KEYKEYS	     ;A
				N000;check for help on keys
 0417  75 47				       JNE  MHEXIT		     ;A
				N000;
				
 0419  83 3E 069C R 00			       CMP  WR_HLPDIS,0 	     ;A
				N000;is help already displayed
 041E  74 03				       JE   MH75		     ;A
				N000;no
				
 0420  E8 079E R			       CALL REMOVE_HELP 	     ;A
				N000;restore original display queues
				
 0423  C7 06 069A R 0001	MH75:	       MOV  WR_HLPPAN,HLP_CONT	     ;A
				N000;turn on contextual help
 0429  83 0E 069A R 08			       OR   WR_HLPPAN,HLP_INDX	     ;A
				N000;turn on help index
				
 042E  FF 36 06A6 R			       PUSH WR_HCBKEYS		     ;A
				N000;set keys help ID
 0432  8F 06 0095 R			       POP  HRD_ID		     ;A
				N000;
				
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-213


 0436  C7 06 069C R 0002		       MOV  WR_HLPDIS,HLP_KEYS	     ;A
				N000;turn keys help status on
 043C  E8 0461 R			       CALL READ_HELP		     ;A
				N000;prepare help text
 043F  E9 033E R			       JMP  MH20		     ;A
				N000;loop to process
				;
				; Help was processed restore original active pa
				nel and return key string
				;
 0442  C7 06 01D1 R 0000	MH80:	       MOV  QM_OPT1,0		     ;A
				N000;make original panel active
 0448  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000; and update the return keys
				
 044B  E8 019A R			       CALL SET_RETKEYS 	     ;A
				N000;restore original return keys
				
 044E  50				       PUSH AX			     ;A
				N000;save keystroke
				
 044F  B8 0001				       MOV  AX,1     ;;AN000;;;;;;;;;;0
				    ;set break option off
				
 0452  83 3E 069C R 00			       CMP  WR_HLPDIS,0 	     ;A
				N000;is help displayed
 0457  74 03				       JE   MH90		     ;A
				N000;
				
 0459  B8 0001				       MOV  AX,1		     ;A
				N000;turn break option on
				
 045C  E8 099F R		MH90:	       CALL PCPANEL_CALL	     ;A
				N000;make original panel the active
									     ; 
				panel with the child panels
 045F  58				       POP  AX			     ;A
				N000;restore keystroke
				;
				; Exit
				;
 0460				MHEXIT: 				     ;A
				N000;exit
				;
 0460  C3				       RET			     ;A
				N000;
 0461				MANAGE_HELP    ENDP			     ;A
				N000;
				
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-214


				PAGE					     ;A
				N000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; READ_HELP
				;
				;	  Read Help Text and Prepare for Displa
				y:
				;
				;	  o  Read the specified contextual help
				 text into the help buffer     :
				;
				;	  o  Save the current parent and child 
				display queues
				;
				;	  o  Add the contextual help panel to t
				he new display queue
				;
				;	  o  Exit without updating display
				;
				;
				; Entry:  WR_PCBHPAN	= Help panel ID
				;	  WR_SCBCONT	= Scroll ID for context
				 forms of help
				;	  WR_SCBINDX	= Scroll ID for indexed
				 forms of help
				;
				;	  HRD_ID	= Current contextual he
				lp ID to read
				;	  HRD_FILSPOFF	= Offset of help file p
				ath name
				;	  HRD_FILSPSEG	= Segment of help file 
				path name
				;
				;	  WR_HLPOPT	= Help options
				;	  WR_HLPDIS	= Help display status
				;	  WR_HLPPAN	= Active help panels
				;	  WR_HLPROW	= Override row for help
				 panel
				;	  WR_HLPCOL	= Override column for h
				elp panel
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0461				READ_HELP      PROC NEAR		     ;A
				N000;
 0461  53				       PUSH BX			     ;A
				N000;save registers
 0462  52				       PUSH DX			     ;A
				N000;
 0463  57				       PUSH DI			     ;A
				N000;
 0464  FF 36 01D7 R			       PUSH QM_ACTIVEPAN	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-215


				N000;
				;
				; Read specified help text from file into memor
				y buffer
				;
 0468  C7 06 008D R 0002		       MOV  HRD_OPT1,HRD_TEXT	     ;A
				N000;set the contextual option
									     ;
 046E  F7 06 069C R 0008		       TEST WR_HLPDIS,HLP_INDX	     ;A
				N000;check if index status on
 0474  74 06				       JE   RH05		     ;A
				N000;
									     ;
 0476  C7 06 008D R 0001		       MOV  HRD_OPT1,HRD_TOPIC	     ;A
				N000;set the indexed help option
									     ;
 047C  9A 0000 ---- E		RH05:	       CALL HOOK_INT_24 	     ;A
				N000;
									     ;
 0481  FF 36 0091 R		RH06:	       PUSH HRD_BUFOFF		     ;A
				N000;
 0485  FF 36 008F R			       PUSH HRD_BUFLEN		     ;A
				N000;save help buffer length
									     ;
 0489  E8 0A6A R			       CALL PCHLPRD_CALL	     ;A
				N005;GHG call help read routine
 048C  73 2E				       JNC  RH07		     ;A
				N006;JW
									     ;
 048E  8F 06 008F R			       POP  HRD_BUFLEN		     ;A
				N006;JW restore help buffer length
 0492  8F 06 0091 R			       POP  HRD_BUFOFF		     ;A
				N006;JW
 0496  BB 0061				       MOV  BX,ERR_INS_INSTALL	     ;A
				N060;JW
 0499  B9 0000 E			       MOV  CX,E_RETURN 	     ;A
				N000;
 049C  9A 0000 ---- E			       CALL HANDLE_ERROR_CALL	     ;A
				N000;
 04A1  73 DE				       JNC  RH06		     ;A
				N000;
					       CLEAR_SCREEN2		     ;A
				N000;
 04A3  B9 0000               1		MOV	CX,0			; 
 04A6  BA 184F               1		MOV	DX,184Fh		; 
 04A9  B8 0600               1		MOV	AX,0600h		; 
 04AC  B7 07                 1		MOV	BH,7			; 
 04AE  CD 10                 1		INT	10H			; 
 04B0  BA 0000               1		MOV	DX,0			; 
 04B3  B7 00                 1		MOV	BH,0			; 
 04B5  B4 02                 1		MOV	AH,2			; 
 04B7  CD 10                 1		INT	10H			; 
 04B9  E9 0000 E			       JMP  EXIT_SELECT 	     ;A
				N000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-216


									     ;
 04BC  8F 06 008F R		RH07:	       POP  HRD_BUFLEN		     ;A
				N000;restore help buffer length
 04C0  8F 06 0091 R			       POP  HRD_BUFOFF		     ;A
				N000;
 04C4  9A 0000 ---- E			       CALL RESTORE_INT_24	     ;A
				N006;JW
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Handle error for help text not found
				;
				; Perform WORD WRAP on help buffer...
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 04C9  FF 36 00A7 R			       PUSH HRD_TEXTSEG 	     ;A
				N000;GHG
 04CD  8F 06 0668 R			       POP  WWP_SRCTXTSEG	     ;A
				N000;GHG
									     ;G
				HG
 04D1  FF 36 00A5 R			       PUSH HRD_TEXTOFF 	     ;A
				N000;GHG
 04D5  8F 06 0666 R			       POP  WWP_SRCTXTOFF	     ;A
				N000;GHG
									     ;G
				HG
 04D9  FF 36 00A3 R			       PUSH HRD_TEXTLEN 	     ;A
				N000;GHG
 04DD  8F 06 0664 R			       POP  WWP_SRCTXTLEN	     ;A
				N000;GHG
									     ;G
				HG
 04E1  FF 36 0729 R			       PUSH WR_MAXHELPSZ	     ;A
				N000;GHG
 04E5  8F 06 066A R			       POP  WWP_SRCBUFLEN	     ;A
				N000;GHG
									     ;G
				HG
 04E9  06				       PUSH ES			     ;A
				N000;GHG
 04EA  57				       PUSH DI			     ;A
				N000;GHG
 04EB  8B 1E 06A8 R			       MOV  BX,WR_SCBCONT	     ;A
				N000;GHG get help scroll ID
 04EF  E8 07EF R			       CALL GET_SCB		     ;A
				N000;GHG ES:DI points to SCB
 04F2  26: 8B 5D 12			       MOV  BX,ES:[DI]+SCB_WIDTH     ;A
				N000;GHG calculate number of help text
 04F6  89 1E 0672 R			       MOV  WWP_WIDTH,BX	     ;A
				N000;GHG
 04FA  5F				       POP  DI			     ;A
				N000;GHG
 04FB  07				       POP  ES			     ;A
				N000;GHG
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-217


									     ;G
				HG
									     ;G
				HG
 04FC  33 C0				       XOR  AX,AX		     ;A
				N000;GHG
 04FE  A3 0674 R			       MOV  WWP_NUMLINES,AX	     ;A
				N000;GHG
 0501  A3 067B R			       MOV  WWP_ERROR,AX	     ;A
				N000;GHG
 0504  C7 06 0662 R 0029		       MOV  WWP_OPT1,WWP_LEFTJUST+WWP_H
				YPHEN+WWP_SRCBUFFER ;AN000;GHG
									     ;G
				HG
 050A  E8 0ABF R			       CALL PCWWRAP_CALL	     ;A
				N000;GHG
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Determine position and add help panel to pare
				nt display queue
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 050D  C7 06 01D1 R 0200		       MOV  QM_OPT1,QM_PUSHPQU	     ;A
				N000;push parent queue
 0513  81 0E 01D1 R 0080		       OR   QM_OPT1,QM_PUSHCQU	     ;A
				N000;push child queue
 0519  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;update display queue
				
 051C  F7 06 0698 R 0010		       TEST WR_HLPOPT,HLP_OVER	     ;A
				N000;check for help panel position
 0522  74 10				       JE   RH10		     ;A
				N000; override
				
 0524  FF 36 06A0 R			       PUSH WR_HLPCOL		     ;A
				N000;set override
 0528  8F 06 01DD R			       POP  QM_COLUMOVER	     ;A
				N000;
				
 052C  FF 36 069E R			       PUSH WR_HLPROW		     ;A
				N000;set override
 0530  8F 06 01DB R			       POP  QM_ROWOVER		     ;A
				N000;
				
 0534  C7 06 01D1 R 0004	RH10:	       MOV  QM_OPT1,QM_RVMCHD	     ;A
				N000;remove child panel
 053A  A1 06B8 R			       MOV  AX,WR_PCBENTR	     ;A
				N000;Enter panel
 053D  A3 01D5 R			       MOV  QM_ID,AX		     ;A
				N000;parent PCB number
 0540  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;update display queue
				
 0543  A1 06B6 R			       MOV  AX,WR_PCBQUIT	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-218


				N000;Quit panel
 0546  A3 01D5 R			       MOV  QM_ID,AX		     ;A
				N000;parent PCB number
 0549  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;update display queue
				
 054C  C7 06 01D1 R 0010		       MOV  QM_OPT1,QM_PUSHPAN	     ;A
				N000;add help panel
 0552  83 0E 01D3 R 01			       OR   QM_OPT2,QM_BREAKON	     ;A
				N000;break on
 0557  8B 1E 06B4 R			       MOV  BX,WR_PCBHPAN	     ;A
				N000;
 055B  89 1E 01D5 R			       MOV  QM_ID,BX		     ;A
				N000;get help panel number
 055F  89 1E 01D7 R			       MOV  QM_ACTIVEPAN,BX	     ;A
				N000;make help panel active
 0563  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;update display queue
				
 0566  C7 06 01D3 R 0000		       MOV  QM_OPT2,0		     ;A
				N000;set options off
 056C  C7 06 01DB R 0000		       MOV  QM_ROWOVER,0	     ;A
				N000;deactivate overrides
 0572  C7 06 01DD R 0000		       MOV  QM_COLUMOVER,0	     ;A
				N000;
				;
				; Check if help panel's children are active and
				 add to display queue
				;
 0578  C7 06 01D1 R 0002		       MOV  QM_OPT1,QM_PUSHCHD	     ;A
				N000;add child panels option
				
 057E  8B 1E 06B6 R			       MOV  BX,WR_PCBQUIT	     ;A
				N000;Esc=Quit
 0582  89 1E 01D5 R			       MOV  QM_ID,BX		     ;A
				N000;get help panel number
 0586  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;update display queue
				
 0589  F7 06 069A R 0001		       TEST WR_HLPPAN,HLP_CONT	     ;A
				N000;check if contextual help active
 058F  74 0B				       JE   RH15		     ;A
				N000;
				
 0591  8B 1E 06AC R			       MOV  BX,WR_PCBHELP	     ;A
				N000;F1=Help panel
 0595  89 1E 01D5 R			       MOV  QM_ID,BX		     ;A
				N000;get help panel number
 0599  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;update display queue
				
 059C  F7 06 069A R 0004	RH15:	       TEST WR_HLPPAN,HLP_HELP	     ;A
				N000;check if help-on-help active
 05A2  74 0B				       JE   RH20		     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-219


				N000;
				
 05A4  8B 1E 06AC R			       MOV  BX,WR_PCBHELP	     ;A
				N000;F1=Help panel
 05A8  89 1E 01D5 R			       MOV  QM_ID,BX		     ;A
				N000;get help panel number
 05AC  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;update display queue
				
 05AF  F7 06 069A R 0008	RH20:	       TEST WR_HLPPAN,HLP_INDX	     ;A
				N000;check if help index active
 05B5  74 0B				       JE   RH30		     ;A
				N000;
				
 05B7  8B 1E 06B0 R			       MOV  BX,WR_PCBINDX	     ;A
				N000;F5=Index panel
 05BB  89 1E 01D5 R			       MOV  QM_ID,BX		     ;A
				N000;get help panel number
 05BF  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;update display queue
				
 05C2  F7 06 069A R 0002	RH30:	       TEST WR_HLPPAN,HLP_KEYS	     ;A
				N000;check if help keys active
 05C8  74 0B				       JE   RH40		     ;A
				N000;
				
 05CA  8B 1E 06B2 R			       MOV  BX,WR_PCBKEYS	     ;A
				N000;
 05CE  89 1E 01D5 R			       MOV  QM_ID,BX		     ;A
				N000;get help panel number
 05D2  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;update display queue
				;
				; Locate help panel PCB data and initialize com
				mon data
				;
 05D5  8B 1E 06B4 R		RH40:	       MOV  BX,WR_PCBHPAN	     ;A
				N000;get help panel ID
 05D9  E8 07C6 R			       CALL GET_PCB		     ;A
				N000;ES:DI points to PCB
				
 05DC  26: FF 75 05			       PUSH ES:[DI]+PCB_UROW	     ;A
				N000;get help panel row
 05E0  26: FF 75 07			       PUSH ES:[DI]+PCB_UCOL	     ;A
				N000;get help panel column
				;
				; Initialize for indexed form of help
				;
 05E4  F7 06 069C R 0008		       TEST WR_HLPDIS,HLP_INDX	     ;A
				N000;check is index help status is on
 05EA  74 6B				       JE   RH50		     ;A
				N000;
				
 05EC  8D 06 06E7 R			       LEA  AX,WR_REFBUF	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-220


				N000;get address of refresh table
 05F0  A3 06E1 R			       MOV  WR_REFOFF,AX	     ;A
				N000;
				
 05F3  8D 06 06E7 R			       LEA  AX,WR_REFBUF	     ;A
				N000;get address of refresh table
 05F7  A3 06E1 R			       MOV  WR_REFOFF,AX	     ;A
				N000;
				
 05FA  C7 06 01D1 R 0002		       MOV  QM_OPT1,QM_PUSHCHD	     ;A
				N000;push child
 0600  A1 06B8 R			       MOV  AX,WR_PCBENTR	     ;A
				N000;Enter panel
 0603  A3 01D5 R			       MOV  QM_ID,AX		     ;A
				N000;parent PCB number
 0606  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;update display queue
				
 0609  8B 1E 06AA R			       MOV  BX,WR_SCBINDX	     ;A
				N000;get help scroll ID
 060D  E8 07EF R			       CALL GET_SCB		     ;A
				N000;ES:DI points to SCB
				
 0610  26: 8F 45 10			       POP  ES:[DI]+SCB_RELCOL	     ;A
				N000;set panel's relative column
 0614  26: 8F 45 0E			       POP  ES:[DI]+SCB_RELROW	     ;A
				N000;set panel's relative row
				
 0618  26: C7 45 16 0001		       MOV  ES:[DI]+SCB_TOPELE,1     ;A
				N000;set top element
 061E  26: C7 45 1A 0001		       MOV  ES:[DI]+SCB_CURELE,1     ;A
				N000;set current line
 0624  26: C7 45 1E 0001		       MOV  ES:[DI]+SCB_CURCOL,1     ;A
				N000;display offset into opt strings
				
					       ;
					       ; adjust scrolling field width t
				o be contained within panel
					       ;
				
 062A  A1 009D R			       MOV  AX,HRD_TOPICLEN	     ;A
				N000;get topic length
 062D  26: 89 85 00B3			       MOV  ES:[DI]+SCB_OASLEN,AX    ;A
				N000;fixed string length
 0632  26: 89 45 1C			       MOV  ES:[DI]+SCB_NUMCOL,AX    ;A
				N000;maximum number of cols to scroll
				
					       ;
					       ;  adjust scrolling field number
				 of display lines to be
					       ;  contained within panel
					       ;
				
 0636  FF 36 009B R			       PUSH HRD_TOPICNUM	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-221


				N000;set number of elements
 063A  26: 8F 45 18			       POP  ES:[DI]+SCB_NUMELE	     ;A
				N000;
				
 063E  A1 00A1 R			       MOV  AX,HRD_TOPICSEG	     ;A
				N000;set segment of topic vector
 0641  26: 89 85 00B1			       MOV  ES:[DI]+SCB_OAPSEG,AX    ;A
				N000;
 0646  26: 89 85 00B5			       MOV  ES:[DI]+SCB_OASSEG,AX    ;A
				N000;set option array string segment
				
 064B  FF 36 009F R			       PUSH HRD_TOPICOFF	     ;A
				N000;set offset of topic vector
 064F  26: 8F 85 00AF			       POP  ES:[DI]+SCB_OAPOFF	     ;A
				N000;
				
 0654  EB 4C 90				       JMP  RHEXIT		     ;A
				N000;index initialized
				;
				; Initialize for contextual forms of help (cont
				, help, and keys)
				;
 0657  8D 06 06E7 R		RH50:	       LEA  AX,WR_REFBUF	     ;A
				N000;get address of refresh table
 065B  A3 06E1 R			       MOV  WR_REFOFF,AX	     ;A
				N000;
				;
 065E  8B 1E 06A8 R			       MOV  BX,WR_SCBCONT	     ;A
				N000;get help scroll ID
 0662  E8 07EF R			       CALL GET_SCB		     ;A
				N000;ES:DI points to SCB
				;
 0665  26: 8F 45 10			       POP  ES:[DI]+SCB_RELCOL	     ;A
				N000;set panel's relative column
 0669  26: 8F 45 0E			       POP  ES:[DI]+SCB_RELROW	     ;A
				N000;set panel's relative row
				;
 066D  26: C7 45 16 0001		       MOV  ES:[DI]+SCB_TOPELE,1     ;A
				N000;GHG set top element
 0673  26: C7 45 1A 0001		       MOV  ES:[DI]+SCB_CURELE,1     ;A
				N000;GHG set current line
 0679  26: C7 45 1E 0001		       MOV  ES:[DI]+SCB_CURCOL,1     ;A
				N000;display offset into opt strings
				;
 067F  A1 0674 R			       MOV  AX,WWP_NUMLINES	     ;A
				N000;GHG Use WordWrap # lines
 0682  48				       DEC  AX			     ;A
				N000;GHG
 0683  26: 89 45 18			       MOV  ES:[DI]+SCB_NUMELE,AX    ;A
				N000;initialize number of elements
				
 0687  FF 36 00A7 R			       PUSH HRD_TEXTSEG 	     ;A
				N000;set segment of help text
 068B  26: 8F 85 00B1			       POP  ES:[DI]+SCB_OAPSEG	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-222


				N000;
				
 0690  FF 36 00A5 R			       PUSH HRD_TEXTOFF 	     ;A
				N000;set offset of help text
 0694  26: 8F 85 00AF			       POP  ES:[DI]+SCB_OAPOFF	     ;A
				N000;
 0699  26: 8B 5D 12			       MOV  BX,ES:[DI]+SCB_WIDTH     ;A
				N000;GHG  SKIP OVER FIRST ELEMENT
 069D  26: 01 9D 00AF			       ADD  ES:[DI]+SCB_OAPOFF,BX    ;A
				N000;GHG
				
 06A2  8F 06 01D7 R		RHEXIT:        POP  QM_ACTIVEPAN	     ;A
				N000;restore current active panel
 06A6  5F				       POP  DI			     ;A
				N000;restore registers and exit
 06A7  5A				       POP  DX			     ;A
				N000;
 06A8  5B				       POP  BX			     ;A
				N000;
 06A9  C3				       RET			     ;A
				N000;
 06AA				READ_HELP      ENDP			     ;A
				N000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCESS_HELP
				;
				;	  Process Help Panel and Text:
				;	  o  Update display to make help panel 
				active
				;	  o  Configure proper return keys
				;	  o  Process scrolling of help text unt
				il exit key pressed
				;
				; Entry:  WR_PCBHPAN	= Help panel ID
				;	  WR_SCBCONT	= Scroll ID for context
				 forms of help
				;	  WR_SCBINDX	= Scroll ID for indexed
				 forms of help
				;
				; Exit:   AX = Exit keystroke pressed
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 06AA				PROCESS_HELP   PROC NEAR		;AN000;
 06AA  53				       PUSH BX			;AN000;
				save registers
 06AB  57				       PUSH DI			;AN000;
 06AC  06				       PUSH ES			;AN000;
 06AD  FF 36 0690 R			       PUSH WR_DRETSEG		;AN000;
				save dynamic return key vars
 06B1  FF 36 068E R			       PUSH WR_DRETOFF		;AN000;
 06B5  FF 36 068C R			       PUSH WR_DRETLEN		;AN000;
 06B9  FF 36 01D7 R			       PUSH QM_ACTIVEPAN	;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-223


				;
				; Refresh display with help panel
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 06BD  FF 36 06B4 R			       PUSH WR_PCBHPAN		;AN000;
				set the help panel as active
 06C1  8F 06 01D7 R			       POP  QM_ACTIVEPAN	;AN000;
									;
 06C5  C7 06 01D1 R 0000		       MOV  QM_OPT1,0		;AN000;
				make help panel active panel
 06CB  E8 098F R			       CALL PCDISPQ_CALL	;AN000;
				 and update the return keys
									;
 06CE  B8 0001				       MOV  AX,1		;AN000;
				set break option on
 06D1  E8 099F R			       CALL PCPANEL_CALL	;AN000;
				refresh display
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Locate proper scroll SCB for help form
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 06D4  8B 1E 06A8 R			       MOV  BX,WR_SCBCONT	;AN000;
				set for contextual help form
									;
 06D8  F7 06 069C R 0008		       TEST WR_HLPDIS,HLP_INDX	;AN000;
				check if indexed help status on
 06DE  74 04				       JE   PH10		;AN000;
									;
 06E0  8B 1E 06AA R			       MOV  BX,WR_SCBINDX	;AN000;
				set for indexed help form
									;
 06E4  E8 074D R		PH10:	       CALL INIT_HELP_TITLE	;AN000;
				** GG
 06E7  E8 07EF R			       CALL GET_SCB		;AN000;
				loads PCSLCTP vars with field
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Build return string of keystrokes and process
				 help
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 06EA  8D 06 06C8 R			       LEA  AX,WR_RETHLPBUF	;AN000;
				set help dynamic return keys
 06EE  A3 068E R			       MOV  WR_DRETOFF,AX	;AN000;
									;
 06F1  B8 0001				       MOV  AX,WR_RETHLPLEN	;AN000;
 06F4  A3 068C R			       MOV  WR_DRETLEN,AX	;AN000;
									;
 06F7  B8 ---- R			       MOV  AX,DATA		;AN000;
 06FA  A3 0690 R			       MOV  WR_DRETSEG,AX	;AN000;
									;
 06FD  E8 019A R			       CALL SET_RETKEYS 	;AN000;
				create complete return string
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-224


									;
 0700  FF 36 0696 R			       PUSH WR_CRETSEG		;AN000;
				initialize SCB with complete
 0704  26: 8F 45 2D			       POP  ES:[DI]+SCB_RLSEG	;AN000;
				 return string information
									;
 0708  FF 36 0694 R			       PUSH WR_CRETOFF		;AN000;
 070C  26: 8F 45 2B			       POP  ES:[DI]+SCB_RLOFF	;AN000;
									;
 0710  FF 36 0692 R			       PUSH WR_CRETLEN		;AN000;
 0714  26: 8F 45 29			       POP  ES:[DI]+SCB_RLLEN	;AN000;
									;
 0718  E8 0A23 R			       CALL PCSLCTP_CALL	;AN000;
				process help text until exit
									;
 071B  26: 8B 85 00B8			       MOV  AX,ES:[DI]+SCB_KS	;AN000;
				get keystroke from PCSLCTP
									;
 0720  F7 06 069C R 0008		       TEST WR_HLPDIS,HLP_INDX	;AN000;
				check if index help status is on
 0726  74 11				       JE   PHEXIT		;AN000;
									;
 0728  3B 06 06C4 R			       CMP  AX,WR_KEYSELT	;AN000;
				check if select key pressed to
 072C  75 0B				       JNE  PHEXIT		;AN000;
				 select desired topic
									;
 072E  26: 8B 5D 1A			       MOV  BX,ES:[DI]+SCB_CURELE;AN000
				;get current selected element
 0732  89 1E 06A2 R			       MOV  WR_HCBCONT,BX	;AN000;
				return new contextual help number
									; selec
				ted from the help index
 0736  A1 06BC R			       MOV  AX,WR_KEYHELP	;AN000;
				return contextual help key requst
									; inste
				ad of enter key
 0739  8F 06 01D7 R		PHEXIT:        POP  QM_ACTIVEPAN	;AN000;
				restore current active panel
 073D  8F 06 068C R			       POP  WR_DRETLEN		;AN000;
				restore return key vars
 0741  8F 06 068E R			       POP  WR_DRETOFF		;AN000;
 0745  8F 06 0690 R			       POP  WR_DRETSEG		;AN000;
 0749  07				       POP  ES			;AN000;
				restore registers and exit
 074A  5F				       POP  DI			;AN000;
 074B  5B				       POP  BX			;AN000;
 074C  C3				       RET			;AN000;
 074D				PROCESS_HELP   ENDP			;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;
				; INITIALIZE_HELP_TITLE
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-225


				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 074D				INIT_HELP_TITLE PROC	NEAR		;AN000;
					PUSHH  <AX,BX,ES,DI,WR_SCBID>	;AN000;
 074D  50                    2		PUSH	AX		; 
 074E  53                    2		PUSH	BX		; 
 074F  06                    2		PUSH	ES		; 
 0750  57                    2		PUSH	DI		; 
 0751  FF 36 0713 R          2		PUSH	WR_SCBID		; 
									;
 0755  8B 1E 06B4 R			MOV	BX,WR_PCBHPAN		;AN000;
				get help panel ID
 0759  E8 07C6 R			CALL	GET_PCB 		;AN000;
				ES:DI points to PCB
									;
 075C  26: FF 75 05			PUSH	ES:[DI]+PCB_UROW	;AN000;
				get help panel row
 0760  26: FF 75 07			PUSH	ES:[DI]+PCB_UCOL	;AN000;
				get help panel column
									;
 0764  BB 0016				MOV	BX,SCR_TITLE_HLP	;AN000;
 0767  89 1E 0713 R			MOV	WR_SCBID,BX		;AN000;
 076B  E8 07EF R			CALL	GET_SCB 		;AN000;
									;
 076E  26: 8F 45 10			POP	ES:[DI]+SCB_RELCOL	;AN000;
 0772  26: 8F 45 0E			POP	ES:[DI]+SCB_RELROW	;AN000;
									;
 0776  FF 36 00A7 R			PUSH	HRD_TEXTSEG		;AN000;
 077A  26: 8F 85 00B1			POP	ES:[DI]+SCB_OAPSEG	;AN000;
									;
 077F  FF 36 00A5 R			PUSH	HRD_TEXTOFF		;AN000;
 0783  26: 8F 85 00AF			POP	ES:[DI]+SCB_OAPOFF	;AN000;
									;
 0788  26: FF 35			PUSH	ES:[DI]+SCB_OPT1	;AN000;
 078B  26: 83 0D 40			OR	ES:[DI]+SCB_OPT1,SCB_RD ;AN000;
 078F  E8 0A23 R			CALL	PCSLCTP_CALL		;AN000;
				display scroll field
 0792  26: 8F 05			POP	ES:[DI]+SCB_OPT1	;AN000;
									;
					POPP   <WR_SCBID,DI,ES,BX,AX>	;AN000;
 0795  8F 06 0713 R          2		POP	WR_SCBID		; 
 0799  5F                    2		POP	DI		; 
 079A  07                    2		POP	ES		; 
 079B  5B                    2		POP	BX		; 
 079C  58                    2		POP	AX		; 
 079D  C3				RET				;AN000;
 079E				INIT_HELP_TITLE ENDP			;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; REMOVE_HELP
				;
				;	  Remove Help Panel:
				;
				;	  o  Restore original parent and child 
				display queues; thereby,
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-226


				;	     removing help panels
				;
				;	  o  Exit without updating display
				;
				; Entry:  WR_KEYHELP	  = Help-on-help keystr
				oke (F1=Help)
				;
				; Exit:   WR_HLPDIS  = Help status off
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 079E				REMOVE_HELP    PROC NEAR		;AN000;
 079E  53				       PUSH BX			     ;A
				N000;save registers
 079F  57				       PUSH DI			     ;A
				N000;
				;
				; Restore original parent and child queues
				;
 07A0  C7 06 01D1 R 0400		       MOV  QM_OPT1,QM_POPPQU	     ;A
				N000;restore parent queue
 07A6  81 0E 01D1 R 0100		       OR   QM_OPT1,QM_POPCQU	     ;A
				N000;restore child queue
 07AC  E8 098F R			       CALL PCDISPQ_CALL	     ;A
				N000;update display queue
				;
				; Reset variables for exit
				;
 07AF  F7 06 069C R 0001		       TEST WR_HLPDIS,HLP_CONT	     ;A
				N000;check if contextual help
 07B5  74 06				       JE   RM20		     ;A
				N000; already on, no set status off
				
 07B7  3B 06 06BC R			       CMP  AX,WR_KEYHELP	     ;A
				N000;check if help on help request
 07BB  74 06				       JE   RMEXIT		     ;A
				N000;
				
 07BD  C7 06 069C R 0000	RM20:	       MOV  WR_HLPDIS,0 	     ;A
				N000;help panels not on
				;
				; Exit
				;
 07C3  5F			RMEXIT:        POP  DI			     ;A
				N000;restore registers and exit
 07C4  5B				       POP  BX			     ;A
				N000;
 07C5  C3				       RET			     ;A
				N000;
 07C6				REMOVE_HELP    ENDP			     ;A
				N000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; GET_PCB
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-227


				;	  Get Panel Control Block information f
				or child or parent panel.      :
				;
				; Entry:  BX = Number of PCB vector desired.
				;
				; Exit:   ES = Segment of desired PCB.
				;	  DI = Offset of desired PCB.
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
 07C6				GET_PCB        PROC NEAR		     ;A
				N000;
 07C6  50				       PUSH AX			     ;A
				N000;
 07C7  53				       PUSH BX			     ;A
				N000;
 07C8  51				       PUSH CX			     ;A
				N000;
 07C9  52				       PUSH DX			     ;A
				N000;GHG
				;
				; read panel control block vector to obtain PCB
				 address
				;
 07CA  FF 36 01EB R			       PUSH QM_PCBVECSEG	     ;A
				N000;get beginning PCB vector address
 07CE  07				       POP  ES			     ;A
				N000;
 07CF  FF 36 01E9 R			       PUSH QM_PCBVECOFF	     ;A
				N000;
 07D3  5F				       POP  DI			     ;A
				N000;
				
 07D4  4B				       DEC  BX			     ;A
				N000;make zero based
 07D5  B8 0002				       MOV  AX,VECSEGLEN	     ;A
				N000;multiply PCB element length by
 07D8  05 0002				       ADD  AX,VECOFFLEN	     ;A
				N000; desired vector number in BX
 07DB  F7 E3				       MUL  BX			     ;A
				N000; to determine offset into PCB vec
 07DD  03 F8				       ADD  DI,AX		     ;A
				N000;add offset inside table
 07DF  26: 8B 1D			       MOV  BX,ES:[DI]		     ;A
				N000;get actual PCB segment
 07E2  26: 8B 4D 02			       MOV  CX,ES:[DI]+VECSEGLEN     ;A
				N000;point past PCB seg to get PCB off
				
 07E6  8E C3				       MOV  ES,BX		     ;A
				N000;set ES:DI to panel's actual
 07E8  8B F9				       MOV  DI,CX		     ;A
				N000; PCB address
				
 07EA  5A				       POP  DX			     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-228


				N000;GHG
 07EB  59				       POP  CX			     ;A
				N000;
 07EC  5B				       POP  BX			     ;A
				N000;
 07ED  58				       POP  AX			     ;A
				N000;
				
 07EE  C3				       RET			     ;A
				N000;
 07EF				GET_PCB        ENDP			     ;A
				N000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; GET_SCB
				;
				;	  Get Scroll Field Control Block inform
				ation.
				;
				; Entry:  BX = Number of SCB vector desired.
				;
				; Exit:   ES:DI = Address of desired SCB
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
 07EF				GET_SCB        PROC NEAR		     ;A
				N000;
				;
 07EF  50				       PUSH AX			     ;A
				N000;
 07F0  53				       PUSH BX			     ;A
				N000;
 07F1  51				       PUSH CX			     ;A
				N000;
 07F2  52				       PUSH DX			     ;A
				N000;GHG
				;
				; read scroll control block vector to obtain SC
				B address
				;
 07F3  FF 36 00EF R			       PUSH SRD_SCBVECSEG	     ;A
				N000;get beginning SCB vector address
 07F7  07				       POP  ES			     ;A
				N000;
 07F8  FF 36 00ED R			       PUSH SRD_SCBVECOFF	     ;A
				N000;
 07FC  5F				       POP  DI			     ;A
				N000;
				;
 07FD  4B				       DEC  BX			     ;A
				N000;make zero based
 07FE  B8 0002				       MOV  AX,VECSEGLEN	     ;A
				N000;multiply SCB element length by
 0801  05 0002				       ADD  AX,VECOFFLEN	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-229


				N000; desired vector number in BX
 0804  F7 E3				       MUL  BX			     ;A
				N000; to determine offset into SCB vec
 0806  03 F8				       ADD  DI,AX		     ;A
				N000;add offset inside table
 0808  26: 8B 1D			       MOV  BX,ES:[DI]		     ;A
				N000;get actual SCB segment
 080B  26: 8B 4D 02			       MOV  CX,ES:[DI]+VECSEGLEN     ;A
				N000;point past SCB seg to get SCB off
				;
 080F  8E C3				       MOV  ES,BX		     ;A
				N000;set ES:DI to scroll's actual
 0811  8B F9				       MOV  DI,CX		     ;A
				N000; SCB address
				;
 0813  5A				       POP  DX			     ;A
				N000;GHG
 0814  59				       POP  CX			     ;A
				N000;
 0815  5B				       POP  BX			     ;A
				N000;
 0816  58				       POP  AX			     ;A
				N000;
				;
 0817  C3				       RET			     ;A
				N000;
 0818				GET_SCB        ENDP			     ;A
				N000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; GET_ICB
				;
				;	  Get Input Control Block information.
				;
				; Entry:  BX = Number of ICB vector desired.
				;
				; Exit:   ES:DI = Address of ICB
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0818				GET_ICB        PROC NEAR		     ;A
				N000;
 0818  50				       PUSH AX			     ;A
				N000;
 0819  53				       PUSH BX			     ;A
				N000;
 081A  51				       PUSH CX			     ;A
				N000;
 081B  52				       PUSH DX			     ;A
				N000;GHG
				;
				; read input control block vector to obtain ICB
				 address
				;
 081C  FF 36 068A R			       PUSH WR_ICBVECSEG	     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-230


				N000;get beginning ICB vector address
 0820  07				       POP  ES			     ;A
				N000;
 0821  FF 36 0688 R			       PUSH WR_ICBVECOFF	     ;A
				N000;
 0825  5F				       POP  DI			     ;A
				N000;
				
 0826  4B				       DEC  BX			     ;A
				N000;make zero based
 0827  B8 0002				       MOV  AX,VECSEGLEN	     ;A
				N000;multiply ICB element length by
 082A  05 0002				       ADD  AX,VECOFFLEN	     ;A
				N000; desired vector number in BX
 082D  F7 E3				       MUL  BX			     ;A
				N000; to determine offset into ICB vec
 082F  03 F8				       ADD  DI,AX		     ;A
				N000;add offset inside table
 0831  26: 8B 1D			       MOV  BX,ES:[DI]		     ;A
				N000;get actual ICB segment
 0834  26: 8B 4D 02			       MOV  CX,ES:[DI]+VECSEGLEN     ;A
				N000;point past ICB seg to get ICB off
				
 0838  8E C3				       MOV  ES,BX		     ;A
				N000;set ES:DI to field's actual
 083A  8B F9				       MOV  DI,CX		     ;A
				N000; ICB address
				
 083C  5A				       POP  DX			;AN000;
				GHG
 083D  59				       POP  CX			;AN000;
 083E  5B				       POP  BX			;AN000;
 083F  58				       POP  AX			;AN000;
 0840  C3				       RET			;AN000;
 0841				GET_ICB        ENDP			;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; REFRESH_FLDS
				;
				;	  Refresh specified input and scrolling
				 fields in the logical video   :
				;	  buffer during screen build.
				;
				;	  Format = DW  Panel control block numb
				er
				;		   DW  Number of fields in this
				 record
				;		   DW  Object type ID
				;		   DW  Field ID
				;
				;		   DW  Object type ID
				;		   DW  Field ID
				;
				; Entry:  WR_REFNUM   = Number of PCB entries
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-231


				;	  WR_REFOFF   = Offset of table
				;	  WR_REFSEG   = Segment of table
				;
				;	  PM_PANBRKID = Panel PCB number to ref
				resh
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0841				REFRESH_FLDS   PROC NEAR		;AN000;
 0841  50				       PUSH AX			     ;A
				N000;save registers
 0842  53				       PUSH BX			     ;A
				N000;
 0843  51				       PUSH CX			     ;A
				N000;
 0844  52				       PUSH DX			     ;A
				N000;
 0845  06				       PUSH ES			     ;A
				N000;
 0846  57				       PUSH DI			     ;A
				N000;
				;
				; Initialize for table search
				;
 0847  8B 0E 06DF R			       MOV  CX,WR_REFNUM	     ;A
				N000;get number of refresh table recs
 084B  83 F9 00				       CMP  CX,0		     ;A
				N000;check the number of PCB entries
 084E  77 03				       JA   RF10		     ;A
				N000;
 0850  EB 5C 90				       JMP  RFEXIT		     ;A
				N000;no records, exit
				
 0853  FF 36 06E1 R		RF10:	       PUSH WR_REFOFF		     ;A
				N000;get address of refresh table
 0857  8F 06 06E5 R			       POP  WR_REFCNT		     ;A
				N000;
				
 085B  FF 36 06E3 R			       PUSH WR_REFSEG		     ;A
				N000;
 085F  07				       POP  ES			     ;A
				N000;
				;
				; Locate matching table and PCB break number
				;
 0860  8B 3E 06E5 R		RF20:	       MOV  DI,WR_REFCNT	     ;A
				N000;set beginning address of current
									     ; 
				table record
				
 0864  26: 8B 45 02			       MOV  AX,ES:[DI]+2	     ;A
				N000;get number of fields in record
 0868  BB 0004				       MOV  BX,4		     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-232


				N000;4 bytes per field entry *
 086B  F7 E3				       MUL  BX			     ;A
				N000; number of fields in this record
 086D  01 06 06E5 R			       ADD  WR_REFCNT,AX	     ;A
				N000; + 4 bytes for the number of
 0871  83 06 06E5 R 04			       ADD  WR_REFCNT,4 	     ;A
				N000; PCB bytes and the number of flds
				
 0876  8B 1E 024F R			       MOV  BX,PM_PANBRKID	     ;A
				N000;
 087A  26: 3B 1D			       CMP  BX,ES:[DI]		     ;A
				N000;check if PCB match to table rec
 087D  74 05				       JE   RF30		     ;A
				N000;
				
 087F  E2 DF				       LOOP RF20		     ;A
				N000;check next table record
 0881  EB 2B 90				       JMP  RFEXIT		     ;A
				N000;no match, exit
				;
				; Match found, refresh all fields
				;
 0884  26: 8B 4D 02		RF30:	       MOV  CX,ES:[DI]+2	     ;A
				N000;get number of fields
				
 0888  83 C7 04			RF40:	       ADD  DI,4		     ;A
				N000;point to field data
 088B  B8 00FA				       MOV  AX,SCROLLOBJID	     ;A
				N000;check if scroll field
 088E  26: 3B 05			       CMP  AX,ES:[DI]		     ;A
				N000;
 0891  75 0A				       JNE  RF50		     ;A
				N000;
				
 0893  26: 8B 5D 02			       MOV  BX,ES:[DI]+2	     ;A
				N000;get field ID
 0897  E8 08B5 R			       CALL REFRESH_SCB 	     ;A
				N000;update logical video buffer
 089A  EB 10 90				       JMP  RF60		     ;A
				N000;get next field entry
				
 089D  B8 00FC			RF50:	       MOV  AX,INPUTOBJID	     ;A
				N000;check if input field
 08A0  26: 3B 05			       CMP  AX,ES:[DI]		     ;A
				N000;
 08A3  75 07				       JNE  RF60		     ;A
				N000;
				
 08A5  26: 8B 5D 02			       MOV  BX,ES:[DI]+2	     ;A
				N000;get field ID
 08A9  E8 08EE R			       CALL REFRESH_ICB 	     ;A
				N000;update logical video buffer
				
 08AC  E2 DA			RF60:	       LOOP RF40		     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-233


				N000;get next field in same record
				
 08AE  5F			RFEXIT:        POP  DI			     ;A
				N000;restore registers
 08AF  07				       POP  ES			     ;A
				N000;
 08B0  5A				       POP  DX			     ;A
				N000;
 08B1  59				       POP  CX			     ;A
				N000;
 08B2  5B				       POP  BX			     ;A
				N000;
 08B3  58				       POP  AX			     ;A
				N000;
				
 08B4  C3				       RET			     ;A
				N000;
 08B5				REFRESH_FLDS   ENDP			     ;A
				N000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; REFRESH_SCB
				;
				;	  Refresh scroll field in logic video b
				uffer and exit.
				;
				; Entry:  BX = Scroll ID field number
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 08B5				REFRESH_SCB    PROC NEAR		     ;A
				N000;
 08B5  06				       PUSH ES			     ;A
				N000;save registers
 08B6  57				       PUSH DI			     ;A
				N000;
				
 08B7  E8 07EF R			       CALL GET_SCB		     ;A
				N000;load SCB address
				
 08BA  26: FF 35			       PUSH ES:[DI]+SCB_OPT1	     ;A
				N000;save options
 08BD  26: FF 75 04			       PUSH ES:[DI]+SCB_OPT3	     ;A
				N000;
				
 08C1  26: 83 0D 40			       OR   ES:[DI]+SCB_OPT1,SCB_RD  ;A
				N000;set display and exit option
 08C5  26: 83 25 DF			       AND  ES:[DI]+SCB_OPT1,NOT SCB_UK
				S;AN000;
 08C9  26: 81 4D 04 0200		       OR   ES:[DI]+SCB_OPT3,SCB_LVBOVR
				;AN000;
				
 08CF  FF 36 026F R			       PUSH PM_LVBOFF		     ;A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-234


				N000;initialize logical video address
 08D3  26: 8F 85 00BA			       POP  ES:[DI]+SCB_LVBOFF	     ;A
				N000;
				
 08D8  FF 36 0271 R			       PUSH PM_LVBSEG		     ;A
				N000;
 08DC  26: 8F 85 00BC			       POP  ES:[DI]+SCB_LVBSEG	     ;A
				N000;
				
 08E1  E8 0A23 R			       CALL PCSLCTP_CALL	     ;A
				N000;refresh logical video buffer
				
 08E4  26: 8F 45 04			       POP  ES:[DI]+SCB_OPT3	     ;A
				N000;restore option
 08E8  26: 8F 05			       POP  ES:[DI]+SCB_OPT1	     ;A
				N000;
				
 08EB  5F			RSEXIT:        POP  DI			     ;A
				N000;restore registers
 08EC  07				       POP  ES			     ;A
				N000;
				
 08ED  C3				       RET			     ;A
				N000;
 08EE				REFRESH_SCB    ENDP			     ;A
				N000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; REFRESH_ICB
				;
				;	  Refresh input field in logic video bu
				ffer and exit.
				;
				; Entry:  BX = Input ID field number
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 08EE				REFRESH_ICB    PROC NEAR		;AN000;
 08EE  50				PUSH	AX			;AN000;
 08EF  06				PUSH	ES			;AN000;
				save registers
 08F0  57				PUSH	DI			;AN000;
 08F1  FF 36 0422 R			PUSH	IN_ICBID		;AN000;
									;
 08F5  89 1E 0422 R			MOV	IN_ICBID,BX		;AN000;
 08F9  E8 0818 R			CALL	GET_ICB 		;AN000;
				load ICB address
									;
 08FC  26: 83 7D 1C 00			CMP	ES:[DI]+ICB_FIELDLEN  ,0;AN000;
 0901  26: 83 7D 1E 00			CMP	ES:[DI]+ICB_FIELDOFF  ,0;AN000;
 0906  26: 83 7D 20 00			CMP	ES:[DI]+ICB_FIELDSEG  ,0;AN000;
 090B  26: 83 7D 26 00			CMP	ES:[DI]+ICB_DEFLEN    ,0;AN000;
 0910  26: 83 7D 28 00			CMP	ES:[DI]+ICB_DEFOFF    ,0;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-235


 0915  26: 83 7D 2A 00			CMP	ES:[DI]+ICB_DEFSEG    ,0;AN000;
				
 091A  FF 36 0420 R			PUSH	IN_OPT			;AN000;
 091E  26: FF 35			PUSH	ES:[DI]+ICB_OPT1	;AN000;
 0921  26: 81 0D 0100			OR	ES:[DI]+ICB_OPT1,ICB_OUT;AN000;
 0926  81 0E 0420 R 0080		OR	IN_OPT,IN_LVBOV 	;AN000;
									;
 092C  FF 36 026F R			PUSH PM_LVBOFF			;AN000;
				initialize logical video address
 0930  8F 06 048E R			POP  IN_LVBOFF			;AN000;
									;
 0934  FF 36 0271 R			PUSH PM_LVBSEG			;AN000;
 0938  8F 06 0490 R			POP  IN_LVBSEG			;AN000;
									;
 093C  E8 0A9C R			CALL	PCINPUT_CALL		;AN000;
									;
 093F  26: 8F 05			POP	ES:[DI]+ICB_OPT1	;AN000;
 0942  8F 06 0420 R			POP	IN_OPT			;AN000;
 0946  E8 0951 R			CALL	CURSOROFF		;AN000;
									;
 0949  8F 06 0422 R			POP	IN_ICBID		;AN000;
 094D  5F				POP	DI			;AN000;
				restore registers
 094E  07				POP	ES			;AN000;
 094F  58				POP	AX			;AN000;
 0950  C3				RET				;AN000;
 0951				REFRESH_ICB	ENDP			;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; CURSOROFF
				;
				;	  Deactivates cursor from display.
				;
				; Entry:  None
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;
 0951				CURSOROFF  PROC NEAR	;AN000;
 0951  50				PUSH	AX	;AN000;save registers
 0952  53				PUSH	BX	;AN000;
 0953  51				PUSH	CX	;AN000;
							;
 0954  B4 03				MOV	AH,3	;AN000;function to get 
				cursor info
 0956  B7 00				MOV	BH,0	;AN000;page zero
 0958  CD 10				INT	10H	;AN000;
 095A  80 CD 20				OR	CH,20H	;AN000;set bit 6
 095D  B4 01				MOV	AH,1	;AN000;function to set 
				cursor
 095F  CD 10				INT	10H	;AN000;
							;
 0961  59				POP	CX	;AN000;restore register
				s
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-236


 0962  5B				POP	BX	;AN000;
 0963  58				POP	AX	;AN000;
 0964  C3				RET		;AN000;
 0965				CURSOROFF	  ENDP	;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; CURSORON
				;
				;	  Activates cursor display on screen.
				;
				; Entry:  None
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0965				CURSORON       PROC NEAR	;AN000;
 0965  50				PUSH	AX		;AN000;save reg
				isters
 0966  53				PUSH	BX		;AN000;
 0967  51				PUSH	CX		;AN000;
								;
 0968  B4 03				MOV	AH,3		;AN000;function
				 to get cursor info
 096A  B7 00				MOV	BH,0		;AN000;page zer
				o
 096C  CD 10				INT	10H		;AN000;
 096E  80 E5 DF				AND	CH,NOT 20H	;AN000;clear bi
				t 6
 0971  B4 01				MOV	AH,1		;AN000;function
				 to set cursor
 0973  CD 10				INT	10H		;AN000;
								;
 0975  59				POP	CX		;AN000;restore 
				registers
 0976  5B				POP	BX		;AN000;
 0977  58				POP	AX		;AN000;
								;
 0978  C3				RET			;AN000;
 0979				CURSORON	  ENDP		;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PCINCHA_CALL
				;
				;	  Call to PCINCHA.
				;
				; Entry:  PB initialized.
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0979				PCINCHA_CALL	PROC NEAR	;AN000;
								;
 0979  E8 0DD6 R			CALL	CLEAR_INBUFF	;AN088;SEH this
				 call was moved and now replaced to exist both 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-237


				before and after call
								;
 097C  1E				PUSH	DS		;AN000;set segm
				ent
 097D  07				POP	ES		;AN000;
 097E  1E				PUSH	DS		;AN000;
 097F  57				PUSH	DI		;AN000;save reg
				isters
 0980  8D 3E 0129 R			LEA	DI,INC_OPT	;AN000;set DI t
				o proper parameter block
								; for call
				ELSE				;AN000;
 0984  9A 0000 ---- E			CALL	INCHA		;AN000;
 0989  E8 0DD6 R			CALL	CLEAR_INBUFF	;AC083;SEH call
				 moved to after call to INCHA in order to flush
				 buffer ;AN059;
				ENDIF				;AN000;
 098C  5F				POP	DI		;AN000;restore 
				registers
 098D  1F				POP	DS		;AN000;
 098E  C3				RET			;AN000;
 098F				PCINCHA_CALL   ENDP		;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PCDISPQ_CALL
				;
				;	  Call to PCDISPQ.
				;
				; Entry:  PB initialized.
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 098F				PCDISPQ_CALL   PROC NEAR		;AN000;
 098F  1E				       PUSH DS			;AN000;
				set segment
 0990  07				       POP  ES			;AN000;
 0991  1E				       PUSH DS			;AN000;
 0992  57				       PUSH DI			;AN000;
				save registers
 0993  8D 3E 01D1 R			       LEA  DI,QM_OPT1		;AN000;
				set DI to proper parameter block
				ELSE					;AN000;
 0997  9A 0000 ---- E			       CALL DISPQ		;AN000;
				ENDIF					;AN000;
 099C  5F				       POP  DI			;AN000;
				restore registers
 099D  1F				       POP  DS			;AN000;
 099E  C3				       RET			;AN000;
 099F				PCDISPQ_CALL   ENDP			;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PCPANEL_CALL
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-238


				;	  Initialize for call to PCPANEL includ
				ing refresh of input and
				;	  scroll fields in the logical video bu
				ffer before display.
				;
				; Entry:  PB initialized.
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 099F				PCPANEL_CALL   PROC NEAR		;AN000;
 099F  FF 36 01F3 R			       PUSH QM_PANQUENUM	;AN000;
 09A3  8F 06 0255 R			       POP  PM_PANQUENUM	;AN000;
				number of panels in parent queue
									;
 09A7  FF 36 01F9 R			       PUSH QM_CHDQUENUM	;AN000;
 09AB  8F 06 025B R			       POP  PM_CHDQUENUM	;AN000;
				number panels in child queue
									;
 09AF  FF 36 01D7 R			       PUSH QM_ACTIVEPAN	;AN000;
 09B3  8F 06 0251 R			       POP  PM_ACTIVEPAN	;AN000;
				active parent panel number
									;
 09B7  BB 0010				       MOV  BX,PM_DOA		;AN000;
				display child panels in active
 09BA  83 CB 20				       OR   BX,PM_DOV		;AN000;
				use child row, col, color overrid
 09BD  83 CB 40				       OR   BX,PM_DOQ		;AN000;
				display childs in active parent
 09C0  83 CB 08				       OR   BX,PM_CL		;AN000;
				initialize LVB to base char/attr
									;
 09C3  3D 0001				       CMP  AX,1		;AN000;
				check if break option is on
 09C6  75 0F				       JNE  PP05		;AN000;
									;
 09C8  83 3E 06E9 R 00			       CMP  WR_REFIELDCNT,0	;AN000;
				GHG
 09CD  75 05				       JNE  PP06		;AN000;
				GHG
 09CF  33 C0				       XOR  AX,AX		;AN000;
				GHG
 09D1  EB 04 90				       JMP  PP05		;AN000;
				GHG
									;
 09D4  83 CB 04			PP06:	       OR   BX,PM_BK		;AN000;
				set panel manager break option on
									;
 09D7  89 1E 0249 R		PP05:	       MOV  PM_OPT1,BX		;AN000;
				set options
 09DB  C7 06 024B R 0001		       MOV  PM_PANPDQNUM,1	;AN000;
				beg/ending parent PDQ number
 09E1  C7 06 024D R 0000		       MOV  PM_PANBRKOFF,0	;AN000;
				panel off in lvb of break panel
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-239


 09E7  EB 06 90				       JMP  PP20		;AN000;
				begin update
									;set op
				tions to continue panel break
 09EA  83 26 0249 R F7		PP10:	       AND  PM_OPT1,NOT PM_CL	;AN000;
				turn init LVB base char/attr off
									;do Act
				ual PCPANEL call
 09EF  1E			PP20:	       PUSH DS			;AN000;
				set segment
 09F0  07				       POP  ES			;AN000;
 09F1  1E				       PUSH DS			;AN000;
 09F2  57				       PUSH DI			;AN000;
				save registers
 09F3  8D 3E 0249 R			       LEA  DI,PM_OPT1		;AN000;
				set DI to proper parameter block
				ELSE					;AN000;
 09F7  9A 0000 ---- E			       CALL PANEL		;AN000;
				ENDIF					;AN000;
 09FC  5F				       POP  DI			;AN000;
				restore registers
 09FD  1F				       POP  DS			;AN000;
									;
 09FE  3D 0001				       CMP  AX,1		;AN000;
				check if the break option is
 0A01  75 0F				       JNE  PPEXIT		;AN000;
				 active
									;
 0A03  A1 024B R			       MOV  AX,PM_PANPDQNUM	;AN000;
				beg/ending parent PDQ number
 0A06  48				       DEC  AX			;AN000;
				adjust for possible break option
									; on la
				st panel in PDQ
 0A07  3B 06 0255 R			       CMP  AX,PM_PANQUENUM	;AN000;
				check if all panels updated
 0A0B  77 05				       JA   PPEXIT		;AN000;
				 when complete var is 1 greater
									;
 0A0D  E8 0841 R			       CALL REFRESH_FLDS	;AN000;
				refresh fields in break panel
 0A10  EB D8				       JMP  PP10		;AN000;
				continue to process panels
 0A12  C3			PPEXIT:        RET			;AN000;
 0A13				PCPANEL_CALL   ENDP			;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PCMBEEP_CALL
				;
				;	  Call to PCMBEEP.
				;
				; Entry:  PB initialized.
				;
				; Exit:   None
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-240


				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0A13				PCMBEEP_CALL   PROC NEAR		;AN000;
 0A13  1E				       PUSH DS			;AN000;
				set segment
 0A14  07				       POP  ES			;AN000;
 0A15  1E				       PUSH DS			;AN000;
 0A16  57				       PUSH DI			;AN000;
				save registers
 0A17  8D 3E 0682 R			       LEA  DI,MB_FREQUENCY	;AN000;
				set DI to proper parameter block
				ELSE					;AN000;
 0A1B  9A 0000 ---- E			       CALL MBEEP		;AN000;
				ENDIF					;AN000;
 0A20  5F				       POP  DI			;AN000;
				restore registers
 0A21  1F				       POP  DS			;AN000;
 0A22  C3				       RET			;AN000;
 0A23				PCMBEEP_CALL   ENDP			;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PCSLCTP_CALL
				;
				;	  Call to PCSCLTP.
				;
				; Entry:  ES:DI = beginning address of PCSLCTP 
				parameter block.
				;
				; Exit:   None
				;
				;
				; Initialize color index vector
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0A23				PCSLCTP_CALL   PROC NEAR		 ;AN000
				;
									 ;
 0A23  E8 0DD6 R			       CALL CLEAR_INBUFF	 ;AN059
				;
									 ;
 0A26  FF 36 0267 R			       PUSH PM_CCBVECNUM	 ;AN000
				;set color index number
 0A2A  26: 8F 85 009F			       POP  ES:[DI]+SCB_CCBVECNUM;AN000
				;
				
 0A2F  FF 36 015B R			       PUSH CRD_CCBVECOFF	 ;AN000
				;set color index offset
 0A33  26: 8F 85 00A1			       POP  ES:[DI]+SCB_CCBVECOFF;AN000
				;
				
 0A38  FF 36 015D R			       PUSH CRD_CCBVECSEG	 ;AN000
				;set color index segment
 0A3C  26: 8F 85 00A3			       POP  ES:[DI]+SCB_CCBVECSEG;AN000
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-241


				
 0A41  26: FF 35			       PUSH ES:[DI]+SCB_OPT1	 ;AN000
				;
 0A44  26: FF 75 02			       PUSH ES:[DI]+SCB_OPT2	 ;AN000
				;
 0A48  26: FF 75 04			       PUSH ES:[DI]+SCB_OPT3	 ;AN000
				;
 0A4C  26: FF 75 14			       PUSH ES:[DI]+SCB_NUMLINE  ;AN000
				;
 0A50  26: 83 65 04 DF			       AND  ES:[DI]+SCB_OPT3,NOT SCB_NU
				MS;AN000;
				ELSE					     ;A
				N000;
 0A55  9A 0000 ---- E			       CALL SLCTP		     ;A
				N000;
				ENDIF					     ;A
				N000;
 0A5A  26: 8F 45 14			       POP  ES:[DI]+SCB_NUMLINE      ;A
				N000;
 0A5E  26: 8F 45 04			       POP  ES:[DI]+SCB_OPT3	     ;A
				N000;
 0A62  26: 8F 45 02			       POP  ES:[DI]+SCB_OPT2	     ;A
				N000;
 0A66  26: 8F 05			       POP  ES:[DI]+SCB_OPT1	     ;A
				N000;
 0A69  C3				       RET			     ;A
				N000;
 0A6A				PCSLCTP_CALL   ENDP			     ;A
				N000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PCHLPRD_CALL
				;
				;	  Call to PCHLPRD.
				;
				; Entry:  PB initialized.
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0A6A				PCHLPRD_CALL   PROC NEAR		 ;AN000
				;
 0A6A  1E				       PUSH DS			 ;AN000
				;set segment
 0A6B  07				       POP  ES			 ;AN000
				;
 0A6C  1E				       PUSH DS			 ;AN000
				;
 0A6D  57				       PUSH DI			 ;AN000
				;save registers
 0A6E  8D 3E 008D R			       LEA  DI,HRD_OPT1 	 ;;AN00
				0;set DI to proper parameter block
				ELSE					 ;AN000
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-242


 0A72  9A 0000 ---- E			       CALL HLPRD		 ;AN000
				;
				ENDIF					 ;AN000
				;
					       .IF < HRD_ERROR eq 0 > and;AN005
				;GHG
 0A77  83 3E 00A9 R 00       3						cmp HRD
				_ERROR,0 
 0A7C  75 0A                 6						jne $l2
				 
					       .IF < HRD_DOSERROR eq 0 > ;AN005
				;GHG
 0A7E  83 3E 00AB R 00       3						cmp HRD
				_DOSERROR,0 
 0A83  75 03                 6						jne $l2
				 
 0A85  F8					  CLC			 ;AN005
				;GHG
					       .ELSE			 ;AN005
				;GHG
 0A86  EB 01                 3						jmp sho
				rt $l1 
 0A88                        2	$l2: 
 0A88  F9					  STC			 ;AN005
				;GHG
					       .ENDIF			 ;AN005
				;GHG
 0A89                        2	$l1: 
									 ;
 0A89  5F				       POP  DI			 ;AN000
				;restore registers
 0A8A  1F				       POP  DS			 ;AN000
				;
 0A8B  C3				       RET			 ;AN000
				;
 0A8C				PCHLPRD_CALL   ENDP			 ;AN000
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PCINSTR_CALL
				;
				;	  Call to PCINSTR.
				;
				; Entry:  PB initialized.
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0A8C				PCINSTR_CALL   PROC NEAR		 ;AN000
				;
 0A8C  1E				       PUSH DS			 ;AN000
				;set segment
 0A8D  07				       POP  ES			 ;AN000
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-243


 0A8E  1E				       PUSH DS			 ;AN000
				;
 0A8F  57				       PUSH DI			 ;AN000
				;save registers
 0A90  8D 3E 0079 R			       LEA  DI,INS_OPT		 ;;AN00
				0;set DI to proper parameter block
				ELSE					 ;AN000
				;
 0A94  9A 0000 ---- E			       CALL INSTRN		 ;AN000
				;
				ENDIF					 ;AN000
				;
 0A99  5F				       POP  DI			 ;AN000
				;restore registers
 0A9A  1F				       POP  DS			 ;AN000
				;
 0A9B  C3				       RET			 ;AN000
				;
 0A9C				PCINSTR_CALL   ENDP			 ;AN000
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PCINPUT_CALL
				;
				;	  Call to PCINPUT.
				;
				; Entry:  PB initialized.
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0A9C				PCINPUT_CALL   PROC NEAR		 ;AN000
				;
									 ;
 0A9C  E8 0DD6 R			       CALL CLEAR_INBUFF	 ;AN059
				;
									 ;
 0A9F  1E				       PUSH DS			 ;AN000
				;set segment
 0AA0  07				       POP  ES			 ;AN000
				;
 0AA1  1E				       PUSH DS			 ;AN000
				;
 0AA2  57				       PUSH DI			 ;AN000
				;save registers
 0AA3  8D 3E 0420 R			       LEA  DI,IN_OPT		 ;AN000
				;set DI to proper parameter block
				ELSE					 ;AN000
				;
 0AA7  9A 0000 ---- E			       CALL INPUT		 ;AN000
				;
				ENDIF					 ;AN000
				;
 0AAC  5F				       POP  DI			 ;AN000
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-244


				;restore registers
 0AAD  1F				       POP  DS			 ;AN000
				;
 0AAE  C3				       RET			 ;AN000
				;
 0AAF				PCINPUT_CALL   ENDP			 ;AN000
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PCGVIDO_CALL
				;
				;	  Call to PCGVIDO.
				;
				; Entry:  PB initialized.
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0AAF				PCGVIDO_CALL   PROC NEAR	;AN000;
 0AAF  1E				PUSH DS 		;AN000;set segm
				ent
 0AB0  07				POP  ES 		;AN000;
 0AB1  1E				PUSH DS 		;AN000;
 0AB2  57				PUSH DI 		;AN000;save reg
				isters
 0AB3  8D 3E 0000 R			LEA  DI,GV_STAT1	;AN000;set DI t
				o proper parameter block
				ELSE				;AN000;
 0AB7  9A 0000 ---- E			CALL GVIDO		;AN000;
				ENDIF				;AN000;
 0ABC  5F				POP  DI 		;AN000;restore 
				registers
 0ABD  1F				POP  DS 		;AN000;
 0ABE  C3				RET			;AN000;
 0ABF				PCGVIDO_CALL   ENDP		;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PCWWRAP_CALL
				;
				;	  Call to PCWWRAP.
				;
				; Entry:  PB initialized.
				;
				; Exit:   None
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0ABF				PCWWRAP_CALL   PROC NEAR	;AN000;
 0ABF  1E				PUSH DS 		;AN000;set segm
				ent
 0AC0  07				POP  ES 		;AN000;
 0AC1  1E				PUSH DS 		;AN000;
 0AC2  57				PUSH DI 		;AN000;save reg
				isters
 0AC3  8D 3E 0662 R			LEA  DI,WWP_OPT1	;AN000;set DI t
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-245


				o proper parameter block
				ELSE				;AN000;
 0AC7  9A 0000 ---- E			CALL WWRAP		;AN000;
				ENDIF				;AN000;
 0ACC  5F				POP  DI 		;AN000;restore 
				registers
 0ACD  1F				POP  DS 		;AN000;
 0ACE  C3				RET			;AN000;
 0ACF				PCWWRAP_CALL   ENDP		;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;
				; INITIALIZE
				;
				;	  Initialize the DOS allocated buffer w
				ith data (color, panels
				;	  scrolling fields) and reserve room fo
				r help, queue management
				;	  and the logical video buffer.
				;
				; Entry:  WR_DATA2LEN = Length of DOS allocated
				 buffer
				;	  WR_DATA2OFF = Offset of DOS allocated
				 buffer
				;	  WR_DATA2SEG = Segment of DOS allocate
				d buffer
				;
				; Exit:   CY=0 and WR_ERROR = 0, No error occur
				red, 1= error occurred
				;	  WR_DATA2LEN = Amount of DOS allocated
				 buffer remaining
				;	  WR_DATA2OFF = New offset of DOS alloc
				ated buffer
				;
				;	ELSE
				;	  CY=1 and WR_ERROR = 1, Error occurred
				 (WR_DATA2LEN/OFF are invalid)
				;
				; CY support added
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0ACF				INITIALIZE     PROC NEAR		;AN000;
									;AN000;
 0ACF  06				PUSH ES 			;AN000;
 0AD0  57				PUSH DI 			;AN000;
 0AD1  1E				PUSH DS 			;AN000;
 0AD2  56				PUSH SI 			;AN000;
									;AN000;
 0AD3  C7 06 0715 R 0000		MOV  WR_ERROR,0 		;AN000;
				reset error inidicator
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Read Compressed Panel file
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-246


				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
 0AD9  BA 073A R			MOV  DX,OFFSET CFILE		;AN024;
				filename to read , SELECT.DAT
 0ADC  32 C0				XOR  AL,AL			;AN024;
 0ADE  B4 3D				MOV  AH,3DH			;AN024;
 0AE0  CD 21				INT  21H			;AN024;
				open file
									;AN024;
 0AE2  8B D8				MOV  BX,AX			;AN024;
				get file handle
 0AE4  53				PUSH BX 			;AN024;
				save it
 0AE5  33 C9				XOR  CX,CX			;AN024;
 0AE7  33 D2				XOR  DX,DX			;AN024;
 0AE9  B0 02				MOV  AL,2			;AN024;
				move ptr to end of file
 0AEB  B4 42				MOV  AH,42H			;AN024;
				LSEEK
 0AED  CD 21				INT  21H			;AN024;
									;AN024;
 0AEF  50				PUSH AX 			;AN024;
				save length
 0AF0  33 C9				XOR  CX,CX			;AN024;
				zero file offset
 0AF2  33 D2				XOR  DX,DX			;AN024;
				      "
 0AF4  B0 00				MOV  AL,0			;AN024;
				move ptr to start of file
 0AF6  B4 42				MOV  AH,42H			;AN024;
				LSEEK
 0AF8  CD 21				INT  21H			;AN024;
 0AFA  5B				POP  BX 			;AN024;
				restore length
 0AFB  53				PUSH BX 			;AN024;
				save it again
 0AFC  D1 EB				SHR  BX,1			;AN024;
				convert to paragraph
 0AFE  D1 EB				SHR  BX,1			;AN024;
 0B00  D1 EB				SHR  BX,1			;AN024;
 0B02  D1 EB				SHR  BX,1			;AN024;
 0B04  43				INC  BX 			;AN024;
				ensure enough room
 0B05  8B C3				MOV  AX,BX			;AN024;
									;AN024;
 0B07  59				POP  CX 			;AN024;
				restore length
 0B08  5B				POP  BX 			;AN024;
				restore file handle
				
 0B09  8B 16 0717 R			MOV  DX,WR_DATA2SEG		;AN024;
				GS:DI = target
 0B0D  81 C2 0F7F			ADD  DX,MAX_MEMPAR		;AN024;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-247


 0B11  2B D0				SUB  DX,AX			;AN024;
 0B13  8E DA				MOV  DS,DX			;AN024;
				get segment of read buffer
 0B15  33 D2				XOR  DX,DX			;AN024;
				get offset to read into
 0B17  B4 3F				MOV  AH,3FH			;AN024;
				read it
 0B19  CD 21				INT  21H			;AN024;
									;AN024;
 0B1B  B4 3E				MOV  AH,3EH			;AN024;
				close it
 0B1D  CD 21				INT  21H			;AN024;
									;AN024;
 0B1F  1E				PUSH DS 			;AN024;
				save source segment
 0B20  B8 ---- R			MOV  AX,DATA			;AN024;
 0B23  8E D8				MOV  DS,AX			;AN024;
				get DATA segment
 0B25  A1 0717 R			MOV  AX,WR_DATA2SEG		;AN024;
				ES:DI = target
 0B28  8E C0				MOV  ES,AX			;AN024;
 0B2A  8B 3E 0719 R			MOV  DI,WR_DATA2OFF		;AN024;
 0B2E  1F				POP  DS 			;AN024;
				restore source segment
 0B2F  33 F6				XOR  SI,SI			;AN024;
				offset is zero
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Expand Panel file
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
 0B31  BA 0000				MOV  DX,0			;AN024;
				initialize result string
 0B34  83 F9 00			EC1:	CMP  CX,0			;AN024;
				any characters left?
 0B37  75 03				JNE  EC2			;AN024;
				yes
 0B39  EB 6F 90				JMP  DONE1			;AN024;
				no
									;AN024;
 0B3C  AC			EC2:	LODSB				;AN024;
				get character
 0B3D  49				DEC  CX 			;AN024;
				adjust character count
 0B3E  B3 01				MOV  BL,1			;AN024;
				set default repeat
 0B40  3C FF				CMP  AL,REPCHAR 		;AN024;
				is it a repeat character
 0B42  75 57				JNE  EC4			;AN024;
				no
									;AN024;
 0B44  83 F9 00				CMP  CX,0			;AN024;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-248


				any characters left?
 0B47  75 03				JNE  EC2_4			;AN024;
 0B49  EB 5F 90				JMP  DONE1			;AN024;
				no
									;AN024;
 0B4C  AC			EC2_4:	LODSB				;AN024;
				get number of characters
 0B4D  49				DEC  CX 			;AN024;
				Adjust character count
 0B4E  3C FF				CMP  AL,REPCHAR 		;AN024;
				is it still the repeat character
 0B50  75 03				JNE  EC2_1			;AN024;
				no
 0B52  EB 47 90				JMP  EC4			;AN024;
									;AN024;
 0B55  3C 01			EC2_1:	CMP  AL,1			;AN024;
				code <CR>?
 0B57  75 05				JNE  EC2_2			;AN024;
				no
									;AN024;
 0B59  B0 0D				MOV  AL,13			;AN024;
 0B5B  EB 3E 90				JMP  EC4			;AN024;
									;AN024;
 0B5E  3C 02			EC2_2:	CMP  AL,2			;AN024;
				code <EOF>?
 0B60  75 05				JNE  EC3			;AN024;
				no
									;AN024;
 0B62  B0 1A				MOV  AL,26			;AN024;
 0B64  EB 35 90				JMP  EC4			;AN024;
									;AN024;
 0B67  8A D8			EC3:	MOV  BL,AL			;AN024;
				save number of repeats
									;AN024;
 0B69  83 F9 00				CMP  CX,0			;AN024;
				any characters left?
 0B6C  75 03				JNE  EC3_6			;AN024;
 0B6E  EB 3A 90				JMP  DONE1			;AN024;
				no
									;AN024;
 0B71  AC			EC3_6:	LODSB				;AN024;
				get actual character
 0B72  49				DEC  CX 			;AN024;
				adjust character count
 0B73  3C FF				CMP  AL,REPCHAR 		;AN024;
				coded character?
 0B75  75 24				JNE  EC4			;AN024;
				no
									;AN024;
 0B77  83 F9 00				CMP  CX,0			;AN024;
				any characters left?
 0B7A  75 03				JNE  EC3_8			;AN024;
 0B7C  EB 2C 90				JMP  DONE1			;AN024;
				no
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-249


									;AN024;
 0B7F  AC			EC3_8:	LODSB				;AN024;
				yes
 0B80  49				DEC  CX 			;AN024;
				adjust character count
 0B81  3C FF				CMP  AL,REPCHAR 		;AN024;
				coded repchar?
 0B83  74 16				JE   EC4			;AN024;
				yes
									;AN024;
 0B85  3C 01				CMP  AL,1			;AN024;
				coded <CR>?
 0B87  75 05				JNE  EC3_1			;AN024;
				no
									;AN024;
 0B89  B0 0D				MOV  AL,13			;AN024;
				yes
 0B8B  EB 0E 90				JMP  EC4			;AN024;
									;AN024;
 0B8E  3C 02			EC3_1:	CMP  AL,2			;AN024;
				coded <EOF>?
 0B90  75 05				JNE  EC3_2			;AN024;
				no
									;AN024;
 0B92  B0 1A				MOV  AL,26			;AN024;
 0B94  EB 05 90				JMP  EC4			;AN024;
									;AN024;
 0B97  41			EC3_2:	INC  CX 			;AN024;
				unknown, restore
 0B98  4E				DEC  SI 			;AN024;
 0B99  B0 FF				MOV  AL,REPCHAR 		;AN024;
									;AN024;
 0B9B  02 D3			EC4:	ADD  DL,BL			;AN024;
				adjust length
 0B9D  80 D6 00				ADC  DH,0			;AN024;
									;AN024;
 0BA0  51			EC7:	PUSH CX 			;AN024;
				save CX
 0BA1  33 C9				XOR  CX,CX			;AN024;
				zero CX
 0BA3  8A CB				MOV  CL,BL			;AN024;
				set repeat number
									;AN024;
 0BA5  F3/ AA			EC8:	REP  STOSB			;AN024;
				store char
 0BA7  59				POP  CX 			;AN024;
				recover CX
 0BA8  EB 8A				JMP  EC1			;AN024;
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Finished expanding panel file
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-250


									;
 0BAA				DONE1:					;AN024;
 0BAA  B8 ---- R			MOV  AX,DATA			;AN024;
				restore DATA segment
 0BAD  8E D8				MOV  DS,AX			;AN024;
									;AN024;
 0BAF  8B 3E 0719 R			MOV  DI,WR_DATA2OFF		;AN024;
				restore pointer to start
 0BB3  83 C2 10				ADD  DX,16			;AN024;
				add paragraph to expanded length
 0BB6  01 16 0719 R			ADD  WR_DATA2OFF,DX		;AN024;
				save new available offset
									;AN024;
 0BBA  A1 071B R			MOV  AX,WR_DATA2LEN		;AN024;
				calculate remaining buffer space
 0BBD  2B C2				SUB  AX,DX			;AN024;
				 from required space
 0BBF  A3 071B R			MOV  WR_DATA2LEN,AX		;AN024;
				set remaining space
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; initialize Color Table information
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
					.IF < GV_VIDMODE eq 7 > or	;AN000;
 0BC2  80 3E 0009 R 07       3						cmp GV_
				VIDMODE,7 
 0BC7  74 07                 6						je $l7 
					.IF < ACTIVE eq LCD >		;AN000;
 0BC9  80 3E 0000 E 00 E     3						cmp ACT
				IVE,LCD 
 0BCE  75 0A                 6						jne $l6
				 
 0BD0                        3	$l7: 
					.THEN				;AN000;
 0BD0  26: 8B 45 0C			      MOV  AX,ES:[DI].MONTBL	;AN000;
 0BD4  26: 8B 5D 0E			      MOV  BX,ES:[DI].NMONTBL	;AN000;
					.ELSE				;AN000;
 0BD8  EB 08                 3						jmp sho
				rt $l5 
 0BDA                        2	$l6: 
 0BDA  26: 8B 45 08			      MOV  AX,ES:[DI].COLTBL	;AN000;
 0BDE  26: 8B 5D 0A			      MOV  BX,ES:[DI].NCOLTBL	;AN000;
					.ENDIF				;AN000;
 0BE2                        2	$l5: 
									;AN000;
 0BE2  89 1E 0267 R			MOV  PM_CCBVECNUM,BX		;AN000;
 0BE6  A3 0269 R			MOV  PM_CCBVECOFF,AX		;AN000;
				set color index offset to PCPANEL
 0BE9  A3 015B R			MOV  CRD_CCBVECOFF,AX		;AN000;
				set color index offset to PCPANEL
 0BEC  8C C0				MOV  AX,ES			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-251


				set color index segment to
 0BEE  A3 026B R			MOV  PM_CCBVECSEG,AX		;AN000;
				 PCPANEL
 0BF1  A3 015D R			MOV  CRD_CCBVECSEG,AX		;AN000;
				 PCPANEL
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; initialize PCDISPQ information
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
 0BF4  26: 8B 45 02			MOV  AX,ES:[DI].NPCBS		;AN000;
 0BF8  A3 01E7 R			MOV  QM_PCBVECNUM,AX		;AN000;
				number of PCB elements in vector
									;AN000;
 0BFB  26: 8B 05			MOV  AX,ES:[DI].PCBS		;AN000;
 0BFE  A3 01E9 R			MOV  QM_PCBVECOFF,AX		;AN000;
				offset of PCB vector
									;AN000;
 0C01  8C C0				MOV  AX,ES			;AN000;
 0C03  A3 01EB R			MOV  QM_PCBVECSEG,AX		;AN000;
				segment of PCB vector
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; initialize PCPANEL with PCDISPQ and PCPANRD i
				nformation
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
 0C06  26: 8B 35			MOV  SI,ES:[DI].PCBS		;AN000;
				offset of PCB vector read from
 0C09  89 36 0263 R			MOV  PM_PCBVECOFF,SI		;AN000;
				 disk
									;AN000;
 0C0D  8C C0				MOV  AX,ES			;AN000;
				segment of PCB vector read from
 0C0F  A3 0265 R			MOV  PM_PCBVECSEG,AX		;AN000;
				 disk
									;AN000;
 0C12  26: 8B 4D 02			MOV  CX,ES:[DI].NPCBS		;AN000;
				number of PCB vectors read from
 0C16  89 0E 0261 R			MOV  PM_PCBVECNUM,CX		;AN000;
				 disk
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; add segment address to PCBs
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
 0C1A  83 C6 02				ADD  SI,2			;AN000;
				move to offset
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-252


 0C1D				I_PCB_SEG:				;AN000;
 0C1D  26: 8B 1C			MOV  BX,ES:[SI] 		;AN000;
 0C20  26: 89 47 21			MOV  ES:[BX].PCB_EXPANDSEG,AX	;AN000;
 0C24  26: 89 47 53			MOV  ES:[BX].PCB_CHILDSEG,AX	;AN000;
 0C28  83 C6 04				ADD  SI,4			;AN000;
 0C2B  E2 F0				LOOP I_PCB_SEG			;AN000;
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; add segment address to PCB vectors
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
 0C2D  26: 8B 4D 02			MOV  CX,ES:[DI].NPCBS		;AN000;
				number of PCB vectors
 0C31  26: 8B 35			MOV  SI,ES:[DI].PCBS		;AN000;
				offset of PCB vectors
 0C34				I_PCBVEC_SEG:				;AN000;
 0C34  26: 89 04			MOV  ES:[SI],AX 		;AN000;
 0C37  83 C6 04				ADD  SI,4			;AN000;
 0C3A  E2 F8				LOOP I_PCBVEC_SEG		;AN000;
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; initialize SCB vector table pointer
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
 0C3C  8C C0				MOV  AX,ES			;AN000;
 0C3E  A3 00EF R			MOV  SRD_SCBVECSEG,AX		;AN000;
				get beginning SCB vector address
 0C41  26: 8B 75 04			MOV  SI,ES:[DI].SCBS		;AN000;
 0C45  89 36 00ED R			MOV  SRD_SCBVECOFF,SI		;AN000;
 0C49  26: 8B 4D 06			MOV  CX,ES:[DI].NSCBS		;AN000;
				number of SCB vectors
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; add segment address to SCBs
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
 0C4D  83 C6 02				ADD  SI,2			;AN000;
				move to offset
									;AN000;
 0C50				I_SCB_SEG:				;AN000;
 0C50  26: 8B 1C			MOV  BX,ES:[SI] 		;AN000;
 0C53  26: 89 47 39			MOV  ES:[BX].SCB_UASEG,AX	;AN000;
 0C57  26: 89 47 3F			MOV  ES:[BX].SCB_DASEG,AX	;AN000;
 0C5B  26: 89 47 51			MOV  ES:[BX].SCB_PUSEG,AX	;AN000;
 0C5F  26: 89 47 57			MOV  ES:[BX].SCB_PDSEG,AX	;AN000;
 0C63  26: 89 47 5D			MOV  ES:[BX].SCB_PISEG,AX	;AN000;
 0C67  26: 89 47 65			MOV  ES:[BX].SCB_AISEG,AX	;AN000;
 0C6B  26: 89 47 6D			MOV  ES:[BX].SCB_CISEG,AX	;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-253


 0C6F  26: 89 47 75			MOV  ES:[BX].SCB_UISEG,AX	;AN000;
 0C73  26: 89 47 7F			MOV  ES:[BX].SCB_DISEG,AX	;AN000;
 0C77  26: 89 87 00A7			MOV  ES:[BX].SCB_INDEXSEG,AX	;AN000;
 0C7C  26: 89 87 00AB			MOV  ES:[BX].SCB_SELSEG,AX	;AN000;
 0C81  26: 89 87 00B1			MOV  ES:[BX].SCB_OAPSEG,AX	;AN000;
 0C86  26: 89 87 00B5			MOV  ES:[BX].SCB_OASSEG,AX	;AN000;
 0C8B  83 C6 04				ADD  SI,4			;AN000;
 0C8E  E2 C0				LOOP I_SCB_SEG			;AN000;
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; add segment address to SCB vectors
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
 0C90  26: 8B 4D 06			MOV  CX,ES:[DI].NSCBS		;AN000;
				number of SCB vectors
 0C94  26: 8B 75 04			MOV  SI,ES:[DI].SCBS		;AN000;
				offset of SCB vectors
 0C98				I_SCBVEC_SEG:				;AN000;
 0C98  26: 89 04			MOV  ES:[SI],AX 		;AN000;
 0C9B  83 C6 04				ADD  SI,4			;AN000;
 0C9E  E2 F8				LOOP I_SCBVEC_SEG		;AN000;
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Init 4KB for logical video buffer for PCPANEL
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
									;AN000;
 0CA0  A1 0004 R			MOV  AX,GV_SCRWIDTH		;AN000;
 0CA3  A3 0273 R			MOV  PM_LVBWIDTH,AX		;AN000;
				width of log vid buf in bytes
									;AN000;
 0CA6  A1 0006 R			MOV  AX,GV_SCRLEN		;AN000;
 0CA9  A3 026D R			MOV  PM_LVBLEN,AX		;AN000;
				number bytes in logical video
									;AN000;
 0CAC  FF 36 071F R			PUSH WR_LVBOFF			;AN000;
 0CB0  8F 06 026F R			POP  PM_LVBOFF			;AN000;
				offset of logical video buffer
									;AN000;
 0CB4  FF 36 071D R			PUSH WR_LVBSEG			;AN000;
				set the allocated segment
 0CB8  8F 06 0271 R			POP  PM_LVBSEG			;AN000;
									;AN000;
 0CBC  A1 0721 R			MOV  AX,WR_LVBLEN		;AN000;
				calculate remaining buffer
 0CBF  2B 06 0006 R			SUB  AX,GV_SCRLEN		;AN000;
 0CC3  A3 0721 R			MOV  WR_LVBLEN,AX		;AN000;
				set remaining space
									;AN000;
 0CC6  A1 0006 R			MOV  AX,GV_SCRLEN		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-254


 0CC9  01 06 071F R			ADD  WR_LVBOFF,AX		;AN000;
				set new free buffer offset
									;AN000;
 0CCD  C6 06 0739 R 01			MOV  LVB_INITED,TRUE		;AN000;
				LVB always remains
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PCDISPQ buffer initialization option
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
 0CD2  C7 06 01D1 R 0001		MOV  QM_OPT1,QM_INIT		;AN000;
				Initialize working buffer
									;AN000;
 0CD8  FF 36 072F R			PUSH WR_MAXCHDQUE		;AN000;
 0CDC  8F 06 01DF R			POP  QM_MAXCHDQUE		;AN000;
				max # of child queues to save
									;AN000;
 0CE0  FF 36 0731 R			PUSH WR_MAXPANQUE		;AN000;
 0CE4  8F 06 01E1 R			POP  QM_MAXPANQUE		;AN000;
				max # of panel queues to save
									;AN000;
 0CE8  FF 36 0733 R			PUSH WR_MAXNUMCHD		;AN000;
 0CEC  8F 06 01E3 R			POP  QM_MAXNUMCHD		;AN000;
				max # of parent panels queued
									;AN000;
 0CF0  FF 36 0735 R			PUSH WR_MAXNUMPAN		;AN000;
 0CF4  8F 06 01E5 R			POP  QM_MAXNUMPAN		;AN000;
				max # of child panels queued
									;AN000;
 0CF8  FF 36 0721 R			PUSH WR_LVBLEN			;AN000;
 0CFC  8F 06 01ED R			POP  QM_BUFLEN			;AN000;
				length of avail buffer
									;AN000;
 0D00  FF 36 071F R			PUSH WR_LVBOFF			;AN000;
 0D04  8F 06 01EF R			POP  QM_BUFOFF			;AN000;
				offset of buffer
									;AN000;
 0D08  FF 36 071D R			PUSH WR_LVBSEG			;AN000;
 0D0C  8F 06 01F1 R			POP  QM_BUFSEG			;AN000;
				segment of buffer
									;AN000;
 0D10  E8 098F R			CALL PCDISPQ_CALL		;AN000;
				update display queue
									;AN000;
 0D13  A1 0721 R			MOV  AX,WR_LVBLEN		;AN000;
				calculate remaining buffer space
 0D16  2B 06 01ED R			SUB  AX,QM_BUFLEN		;AN000;
				 from required space
 0D1A  A3 0721 R			MOV  WR_LVBLEN,AX		;AN000;
				set remaining space
									;AN000;
 0D1D  A1 01ED R			MOV  AX,QM_BUFLEN		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-255


				add returned buffer size
 0D20  01 06 071F R			ADD  WR_LVBOFF,AX		;AN000;
				set new free buffer offset
									;AN000;
 0D24  FF 36 01F5 R			PUSH QM_PANQUEOFF		;AN000;
				offset address of parent queue
 0D28  8F 06 0257 R			POP  PM_PANQUEOFF		;AN000;
				offset address of parent queue
									;AN000;
 0D2C  FF 36 01F7 R			PUSH QM_PANQUESEG		;AN000;
				segment address of parent queue
 0D30  8F 06 0259 R			POP  PM_PANQUESEG		;AN000;
				segment address of parent queue
									;AN000;
 0D34  FF 36 01FB R			PUSH QM_CHDQUEOFF		;AN000;
				offset of child queue
 0D38  8F 06 025D R			POP  PM_CHDQUEOFF		;AN000;
				offset of child queue
									;AN000;
 0D3C  FF 36 01FD R			PUSH QM_CHDQUESEG		;AN000;
				segment of child queue
 0D40  8F 06 025F R			POP  PM_CHDQUESEG		;AN000;
				segment of child queue
									;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Reserve buffer for completed return key buffe
				r
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									;
 0D44  FF 36 0727 R			PUSH WR_MAXRETKSZ		;AN000;
				maximum number of bytes in return
 0D48  8F 06 0692 R			POP  WR_CRETLEN 		;AN000;
				 buffer
									;AN000;
 0D4C  FF 36 071F R			PUSH WR_LVBOFF			;AN000;
				offset of completed return buffer
 0D50  8F 06 0694 R			POP  WR_CRETOFF 		;AN000;
									;AN000;
 0D54  FF 36 071D R			PUSH WR_LVBSEG			;AN000;
				segment of completed return
 0D58  8F 06 0696 R			POP  WR_CRETSEG 		;AN000;
				 buffer
									;AN000;
 0D5C  A1 0721 R			MOV  AX,WR_LVBLEN		;AN000;
				calculate remaining buffer space
 0D5F  2B 06 0727 R			SUB  AX,WR_MAXRETKSZ		;AN000;
 0D63  A3 0721 R			MOV  WR_LVBLEN,AX		;AN000;
				set remaining space
									;AN000;
 0D66  A1 0727 R			MOV  AX,WR_MAXRETKSZ		;AN000;
 0D69  01 06 071F R			ADD  WR_LVBOFF,AX		;AN000;
				set new free buffer offset
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-256


 0D6D  F8				CLC				;AN000;
				GHG
 0D6E  EB 08 90				JMP  IEXIT			;AN000;
									;AN000;
 0D71  C7 06 0715 R 0001	I110:	MOV  WR_ERROR,1 		;AN000;
				set error indicator
 0D77  F9				STC				;AN000;
				GHG
 0D78				IEXIT:					;AN000;
				exit
 0D78  5E				POP  SI 			;AN000;
 0D79  1F				POP  DS 			;AN000;
 0D7A  5F				POP  DI 			;AN000;
 0D7B  07				POP  ES 			;AN000;
 0D7C  C3				RET				;AN000;
 0D7D				INITIALIZE     ENDP			;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;   INSERT_DISK_ROUTINE: Prompts user for inser
				tion of disk into A: drive
				;
				;   INPUT:	DISK_PANEL - Panel number to be
				 displayed
				;		SEARCH_FILE - File to search fo
				r on diskette
				;
				;   OUTPUT:	none
				;
				;   OPERATION:	Panel macros are called to disp
				lay the panel and search
				;		for the file.
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				PUBLIC INSERT_DISK_ROUTINE		;AN000;
 0D7D				INSERT_DISK_ROUTINE PROC NEAR		;AN000;
									;
					.REPEAT 			;AN000;
 0D7D                        2	$l9: 
 0D7D  B8 0020				   MOV	   AX,PAN_INST_PROMPT	;AN000;
 0D80  E8 0000 E			   CALL    INIT_PQUEUE_CALL	;AN000;
 0D83  A1 0000 E			   MOV	   AX,DISK_PANEL	;AN000;
 0D86  E8 0000 E			   CALL    PREPARE_PANEL_CALL	;AN000;
 0D89  B8 0025				   MOV	   AX,PAN_HBAR		;AN000;
 0D8C  E8 0000 E			   CALL    PREPARE_PANEL_CALL	;AN000;
 0D8F  E8 0000 E			   CALL    HANDLE_CHILDREN	;AN000;
 0D92  E8 0000 E			   CALL    DISPLAY_PANEL_CALL	;AN000;
									;
 0D95  B9 0000 E			   MOV	   CX,FK_ENT_LEN	;AN000;
 0D98  8D 16 0000 E			   LEA	   DX,FK_ENT		;AN000;
 0D9C  E8 0000 E			   CALL    GET_FUNCTION_CALL	;AN000;
									;
 0D9F  8B 3E 0000 E			   MOV	DI, SEARCH_FILE 	;AN000;
 0DA3  B9 0000 E			   MOV	CX, E_FILE_ATTR 	;AN000;
 0DA6  9A 0000 ---- E			   CALL FIND_FILE_ROUTINE	;AN000;
					   .LEAVE < nc >		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Page     1-257


 0DAB  73 28                 5						jnc $l1
				0 
									;
 0DAD  BB 0044				   MOV	   BX,ERR_DOS_DISK	;AN000;
 0DB0  B9 0000 E			   MOV	   CX,E_RETURN		;AN000;
 0DB3  9A 0000 ---- E			   CALL    HANDLE_ERROR_CALL	;AN000;
 0DB8  73 19				   JNC	   CONTINUE		;AN000;
					   CLEAR_SCREEN2		;AN000;
 0DBA  B9 0000               1		MOV	CX,0			; 
 0DBD  BA 184F               1		MOV	DX,184Fh		; 
 0DC0  B8 0600               1		MOV	AX,0600h		; 
 0DC3  B7 07                 1		MOV	BH,7			; 
 0DC5  CD 10                 1		INT	10H			; 
 0DC7  BA 0000               1		MOV	DX,0			; 
 0DCA  B7 00                 1		MOV	BH,0			; 
 0DCC  B4 02                 1		MOV	AH,2			; 
 0DCE  CD 10                 1		INT	10H			; 
 0DD0  E9 0000 E			   JMP	   EXIT_SELECT		;AN000;
 0DD3				CONTINUE:				;AN000;
					.UNTIL				;AN000;
 0DD3  EB A8                 4						jmp $l9
				 
 0DD5                        3	$l10: 
									;
 0DD5  C3				RET				;AN000;
 0DD6				INSERT_DISK_ROUTINE	ENDP		;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Clear the input buffer
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0DD6				CLEAR_INBUFF   PROC NEAR		;AN059;
				;					;
 0DD6  B4 0B			CI_1:	       MOV  AH,0BH		;AN059;
 0DD8  CD 21				       INT  21H 		;AN059;
 0DDA  3C 00				       CMP  AL,0		;AN059;
 0DDC  74 06				       JE   CI_2		;AN059;
 0DDE  B4 07				       MOV  AH,07H		;AN059;
 0DE0  CD 21				       INT  21H 		;AN059;
 0DE2  EB F2				       JMP  CI_1		;AN059;
									;
 0DE4  C3			CI_2:	       RET			;AN059;
 0DE5				CLEAR_INBUFF   ENDP			;AN059;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;
 0DE5				SELECT	ENDS			;AN000;
					END			;AN000;

Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             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
ADD_WORD . . . . . . . . . . . .  	   2
ALLOCATE_MEMORY  . . . . . . . .  	   1
APPEND_STRING  . . . . . . . . .  	   4
BEEP . . . . . . . . . . . . . .  	   3
BYTE_TO_CHAR . . . . . . . . . .  	   4
CHANGE_ATTRIBUTE . . . . . . . .  	   5
CHANGE_AUTOEXEC  . . . . . . . .  	   4
CHANGE_DIR . . . . . . . . . . .  	   7
CHECK_CLOCK  . . . . . . . . . .  	  10
CHECK_DATE_CHANGE  . . . . . . .  	  13
CHECK_DEFAULT_DRIVE  . . . . . .  	   7
CHECK_DISK . . . . . . . . . . .  	   6
CHECK_DISKETTE . . . . . . . . .  	  58
CHECK_DISPLAY  . . . . . . . . .  	   1
CHECK_DOS_PATH . . . . . . . . .  	   3
CHECK_DOS_VERSION  . . . . . . .  	   8
CHECK_EXPANDED_MEMORY  . . . . .  	   3
CHECK_MACHINE  . . . . . . . . .  	  18
CHECK_PATH . . . . . . . . . . .  	   9
CHECK_TIME_CHANGE  . . . . . . .  	  13
CHECK_VALID_MEDIA  . . . . . . .  	   7
CHECK_WRITE_PROTECT  . . . . . .  	   3
CHMOD_FILE . . . . . . . . . . .  	   2
CLEAR_SCREEN . . . . . . . . . .  	  10
CLEAR_SCREEN2  . . . . . . . . .  	  10
CLOSE_FILE . . . . . . . . . . .  	   3
COMPARE_STRINGS  . . . . . . . .  	   4
COMP_BYTES . . . . . . . . . . .  	   3
COMP_WORDS . . . . . . . . . . .  	   3
COPY_BYTE  . . . . . . . . . . .  	   2
COPY_FILES . . . . . . . . . . .  	   7
COPY_FILES2  . . . . . . . . . .  	   8
COPY_STRING  . . . . . . . . . .  	   5
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-2


COPY_WORD  . . . . . . . . . . .  	   2
CREATE_AUTOEXEC  . . . . . . . .  	   4
CREATE_CONFIG  . . . . . . . . .  	   3
CREATE_FILE  . . . . . . . . . .  	   4
CREATE_SHELL . . . . . . . . . .  	   3
DEALLOCATE_MEMORY  . . . . . . .  	   1
DEC_VAR  . . . . . . . . . . . .  	   1
DIR  . . . . . . . . . . . . . .  	   6
DISKCOPY_PANELS  . . . . . . . .  	   3
DISKCOPY_TO  . . . . . . . . . .  	   4
DISPLAY_MESSAGE  . . . . . . . .  	   3
DISPLAY_PANEL  . . . . . . . . .  	   1
DOSCALL  . . . . . . . . . . . .  	   1
ERASE_FILE . . . . . . . . . . .  	   2
EXEC_PROGRAM . . . . . . . . . .  	   9
FIND_FILE  . . . . . . . . . . .  	   4
FIND_NEXT  . . . . . . . . . . .  	   5
FREE_MEM . . . . . . . . . . . .  	   8
GET_ALT_KEYBOARD . . . . . . . .  	  24
GET_ALT_KYBD_TABLE . . . . . . .  	  20
GET_COUNTRY_DEFAULTS . . . . . .  	   3
GET_COUNTRY_INDEX  . . . . . . .  	   4
GET_DATE . . . . . . . . . . . .  	  14
GET_DOS_COUNTRY  . . . . . . . .  	  12
GET_FREE_SPACE . . . . . . . . .  	  10
GET_FUNCTION . . . . . . . . . .  	   3
GET_INSTALLED_MEM  . . . . . . .  	   2
GET_KEYBOARD . . . . . . . . . .  	   5
GET_KEYBOARD_INDEX . . . . . . .  	   5
GET_NUMBER_PORTS . . . . . . . .  	  12
GET_NUMERIC  . . . . . . . . . .  	  29
GET_PARTITION_SIZE . . . . . . .  	   7
GET_PRINTER_INFO . . . . . . . .  	   3
GET_PRINTER_PARAMS . . . . . . .  	   5
GET_PRINTER_TITLES . . . . . . .  	   3
GET_SCROLL . . . . . . . . . . .  	   5
GET_STRING . . . . . . . . . . .  	   6
GET_TIME . . . . . . . . . . . .  	   9
GOTO . . . . . . . . . . . . . .  	   1
HANDLE_ERROR . . . . . . . . . .  	   7
HANDLE_FORMAT_ERROR  . . . . . .  	  10
HOOK15 . . . . . . . . . . . . .  	   1
HOOK_2F_FORMAT . . . . . . . . .  	   1
INC_VAR  . . . . . . . . . . . .  	   1
INIT . . . . . . . . . . . . . .  	   5
INITIALIZE_BCHAR . . . . . . . .  	  23
INIT_CHAR  . . . . . . . . . . .  	   5
INIT_NUMERIC . . . . . . . . . .  	  13
INIT_PQUEUE  . . . . . . . . . .  	   2
INIT_SCROLL  . . . . . . . . . .  	   3
INIT_SCROLL_COLOUR . . . . . . .  	   3
INIT_SCROLL_STATUS . . . . . . .  	   3
INIT_SCROLL_W_LIST . . . . . . .  	  10
INIT_SCROLL_W_NUM  . . . . . . .  	   6
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-3


INIT_STRING  . . . . . . . . . .  	   4
INIT_SUPPORT . . . . . . . . . .  	   8
INIT_VAR . . . . . . . . . . . .  	   1
INIT_VAR_BALANCE . . . . . . . .  	   9
INIT_VAR_MAXIMIZE  . . . . . . .  	   9
INIT_VAR_MINIMIZE  . . . . . . .  	   9
INSERT_DISK  . . . . . . . . . .  	   4
INSTALL_FILES  . . . . . . . . .  	   2
LIBVER . . . . . . . . . . . . .  	   1
LOAD_MESSAGES  . . . . . . . . .  	   2
MAKE_DIR . . . . . . . . . . . .  	   7
MAKE_DIR_PATHS . . . . . . . . .  	   2
MATCH_DISK_FILES . . . . . . . .  	   7
MERGE_STRING . . . . . . . . . .  	   8
OPEN_FILE  . . . . . . . . . . .  	   4
POPP . . . . . . . . . . . . . .  	   3
POP_HEADING  . . . . . . . . . .  	   2
POS_CURSOR . . . . . . . . . . .  	  18
PREPARE_CHILDREN . . . . . . . .  	   1
PREPARE_FILE . . . . . . . . . .  	   2
PREPARE_PANEL  . . . . . . . . .  	   2
PREP_FOR_ONE . . . . . . . . . .  	   2
PROCESS_ESC  . . . . . . . . . .  	   4
PROCESS_F3 . . . . . . . . . . .  	   4
PUSHH  . . . . . . . . . . . . .  	   3
PUSH_HEADING . . . . . . . . . .  	   2
READ_FILE  . . . . . . . . . . .  	   4
RELEASE_PRINTER_INFO . . . . . .  	   2
REMOVE_DIR . . . . . . . . . . .  	   7
RENAME_FILE  . . . . . . . . . .  	   4
RESTORE_ATTRIBUTE  . . . . . . .  	   5
RETURN_STRING  . . . . . . . . .  	   4
RET_SUPPORT  . . . . . . . . . .  	   8
SAVE_FILE  . . . . . . . . . . .  	   3
SAVE_PANEL_LIST  . . . . . . . .  	   3
SAVE_PARAMETERS  . . . . . . . .  	  11
SAVE_PRINTER_PARAMS  . . . . . .  	   3
SCAN_DISK_TABLE  . . . . . . . .  	   4
SCAN_INFO_FILE . . . . . . . . .  	  14
SCAN_PARAMETERS  . . . . . . . .  	   3
SET_DATE . . . . . . . . . . . .  	  12
SET_DISPLAY_MODE . . . . . . . .  	   1
SET_FILE_DATE_TIME . . . . . . .  	  33
SET_NUMERIC  . . . . . . . . . .  	  13
SET_SCROLL . . . . . . . . . . .  	   3
SET_STRING . . . . . . . . . . .  	   4
SET_TIME . . . . . . . . . . . .  	  14
TOGGLE_SUPPORT . . . . . . . . .  	   3
UNHOOK15 . . . . . . . . . . . .  	   1
UNHOOK_2F  . . . . . . . . . . .  	   1
UPDATE_DISK_TABLE  . . . . . . .  	   4
WORD_TO_CHAR . . . . . . . . . .  	   3
WRITE_FILE . . . . . . . . . . .  	   5
WRITE_LINE . . . . . . . . . . .  	   2
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-4



Structures and Records:

                N a m e                 Width   # fields
                                        Shift   Width   Mask    Initial

CHD_PB . . . . . . . . . . . . .  	000E	0007
  CHD_PCB  . . . . . . . . . . .  	0000
  CHD_ROW  . . . . . . . . . . .  	0002
  CHD_COL  . . . . . . . . . . .  	0004
  CHD_INX  . . . . . . . . . . .  	0006
EXT_FILE . . . . . . . . . . . .  	0010	0008
  PCBS . . . . . . . . . . . . .  	0000
  NPCBS  . . . . . . . . . . . .  	0002
  SCBS . . . . . . . . . . . . .  	0004
  NSCBS  . . . . . . . . . . . .  	0006
  COLTBL . . . . . . . . . . . .  	0008
  NCOLTBL  . . . . . . . . . . .  	000A
  MONTBL . . . . . . . . . . . .  	000C
  NMONTBL  . . . . . . . . . . .  	000E
ICB_PB . . . . . . . . . . . . .  	005E	002F
  ICB_OPT1 . . . . . . . . . . .  	0000
  ICB_OPT2 . . . . . . . . . . .  	0002
  ICB_OPT3 . . . . . . . . . . .  	0004
  ICB_OPT4 . . . . . . . . . . .  	0006
  ICB_ROW  . . . . . . . . . . .  	0008
  ICB_COL  . . . . . . . . . . .  	000A
  ICB_WIDTH  . . . . . . . . . .  	000C
  ICB_CCBID  . . . . . . . . . .  	000E
  ICB_STATUS . . . . . . . . . .  	0010
  ICB_CURCHAR  . . . . . . . . .  	0012
  ICB_HRSTART  . . . . . . . . .  	0014
  ICB_SOUND  . . . . . . . . . .  	0016
  ICB_KEYRET . . . . . . . . . .  	0018
  ICB_ENDBYTE  . . . . . . . . .  	001A
  ICB_FIELDLEN . . . . . . . . .  	001C
  ICB_FIELDOFF . . . . . . . . .  	001E
  ICB_FIELDSEG . . . . . . . . .  	0020
  ICB_ATTROFF  . . . . . . . . .  	0022
  ICB_ATTRSEG  . . . . . . . . .  	0024
  ICB_DEFLEN . . . . . . . . . .  	0026
  ICB_DEFOFF . . . . . . . . . .  	0028
  ICB_DEFSEG . . . . . . . . . .  	002A
  ICB_RETLEN . . . . . . . . . .  	002C
  ICB_RETOFF . . . . . . . . . .  	002E
  ICB_RETSEG . . . . . . . . . .  	0030
  ICB_ALLLEN . . . . . . . . . .  	0032
  ICB_ALLOFF . . . . . . . . . .  	0034
  ICB_ALLSEG . . . . . . . . . .  	0036
  ICB_SKIPLEN  . . . . . . . . .  	0038
  ICB_SKIPOFF  . . . . . . . . .  	003A
  ICB_SKIPSEG  . . . . . . . . .  	003C
  ICB_ALL1LEN  . . . . . . . . .  	003E
  ICB_ALL1OFF  . . . . . . . . .  	0040
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-5


  ICB_ALL1SEG  . . . . . . . . .  	0042
  ICB_DECPOS . . . . . . . . . .  	0044
  ICB_RANUML1  . . . . . . . . .  	0046
  ICB_RANUMH1  . . . . . . . . .  	0048
  ICB_RANUML2  . . . . . . . . .  	004A
  ICB_RANUMH2  . . . . . . . . .  	004C
  ICB_MANDPROW . . . . . . . . .  	004E
  ICB_MANDPCOL . . . . . . . . .  	0050
  ICB_MINUSLEN . . . . . . . . .  	0052
  ICB_MINUSOFF . . . . . . . . .  	0054
  ICB_MINUSSEG . . . . . . . . .  	0056
  ICB_PLUSLEN  . . . . . . . . .  	0058
  ICB_PLUSOFF  . . . . . . . . .  	005A
  ICB_PLUSSEG  . . . . . . . . .  	005C
PCB_PB . . . . . . . . . . . . .  	0055	002A
  PCB_OPT1 . . . . . . . . . . .  	0000
  PCB_OPT2 . . . . . . . . . . .  	0002
  PCB_OPT3 . . . . . . . . . . .  	0003
  PCB_OPT4 . . . . . . . . . . .  	0004
  PCB_UROW . . . . . . . . . . .  	0005
  PCB_UCOL . . . . . . . . . . .  	0007
  PCB_WIDTH  . . . . . . . . . .  	0009
  PCB_MAXSIZE  . . . . . . . . .  	000B
  PCB_CCBID  . . . . . . . . . .  	000D
  PCB_BORDER . . . . . . . . . .  	000F
  PCB_COMPLEN  . . . . . . . . .  	0017
  PCB_COMPOFF  . . . . . . . . .  	0019
  PCB_COMPSEG  . . . . . . . . .  	001B
  PCB_EXPANDLEN  . . . . . . . .  	001D
  PCB_EXPANDOFF  . . . . . . . .  	001F
  PCB_EXPANDSEG  . . . . . . . .  	0021
  PCB_MIXEDLEN . . . . . . . . .  	0023
  PCB_MIXEDOFF . . . . . . . . .  	0025
  PCB_MIXEDSEG . . . . . . . . .  	0027
  PCB_LABELLEN . . . . . . . . .  	0029
  PCB_LABELOFF . . . . . . . . .  	002B
  PCB_LABELSEG . . . . . . . . .  	002D
  PCB_LABELROW . . . . . . . . .  	002F
  PCB_LABELCOL . . . . . . . . .  	0031
  PCB_FPANLEN  . . . . . . . . .  	0033
  PCB_FNAMEOFF . . . . . . . . .  	0035
  PCB_FNAMESEG . . . . . . . . .  	0037
  PCB_FTEXTLOCL  . . . . . . . .  	0039
  PCB_FTEXTLOCH  . . . . . . . .  	003B
  PCB_LROW . . . . . . . . . . .  	003D
  PCB_LCOL . . . . . . . . . . .  	003F
  PCB_VERTSHADE  . . . . . . . .  	0041
  PCB_HORZSHADE  . . . . . . . .  	0042
  PCB_GFILLOFF . . . . . . . . .  	0043
  PCB_GFILLSEG . . . . . . . . .  	0045
  PCB_SCRSV1OFF  . . . . . . . .  	0047
  PCB_SCRSV2OFF  . . . . . . . .  	0049
  PCB_SCRSAVSEG  . . . . . . . .  	004B
  PCB_RESERVED . . . . . . . . .  	004D
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-6


  PCB_CHILDNUM . . . . . . . . .  	004F
  PCB_CHILDOFF . . . . . . . . .  	0051
  PCB_CHILDSEG . . . . . . . . .  	0053
SCB_PB . . . . . . . . . . . . .  	00D6	006C
  SCB_OPT1 . . . . . . . . . . .  	0000
  SCB_OPT2 . . . . . . . . . . .  	0002
  SCB_OPT3 . . . . . . . . . . .  	0004
  SCB_OPT4 . . . . . . . . . . .  	0006
  SCB_FREQ . . . . . . . . . . .  	0008
  SCB_ROW  . . . . . . . . . . .  	000A
  SCB_COL  . . . . . . . . . . .  	000C
  SCB_RELROW . . . . . . . . . .  	000E
  SCB_RELCOL . . . . . . . . . .  	0010
  SCB_WIDTH  . . . . . . . . . .  	0012
  SCB_NUMLINE  . . . . . . . . .  	0014
  SCB_TOPELE . . . . . . . . . .  	0016
  SCB_NUMELE . . . . . . . . . .  	0018
  SCB_CURELE . . . . . . . . . .  	001A
  SCB_NUMCOL . . . . . . . . . .  	001C
  SCB_CURCOL . . . . . . . . . .  	001E
  SCB_NLISTCOL . . . . . . . . .  	0020
  SCB_NLISTSEP . . . . . . . . .  	0022
  SCB_SKLEN  . . . . . . . . . .  	0023
  SCB_SKOFF  . . . . . . . . . .  	0025
  SCB_SKSEG  . . . . . . . . . .  	0027
  SCB_RLLEN  . . . . . . . . . .  	0029
  SCB_RLOFF  . . . . . . . . . .  	002B
  SCB_RLSEG  . . . . . . . . . .  	002D
  SCB_RELEN  . . . . . . . . . .  	002F
  SCB_REOFF  . . . . . . . . . .  	0031
  SCB_RESEG  . . . . . . . . . .  	0033
  SCB_UALEN  . . . . . . . . . .  	0035
  SCB_UAOFF  . . . . . . . . . .  	0037
  SCB_UASEG  . . . . . . . . . .  	0039
  SCB_DALEN  . . . . . . . . . .  	003B
  SCB_DAOFF  . . . . . . . . . .  	003D
  SCB_DASEG  . . . . . . . . . .  	003F
  SCB_LALEN  . . . . . . . . . .  	0041
  SCB_LAOFF  . . . . . . . . . .  	0043
  SCB_LASEG  . . . . . . . . . .  	0045
  SCB_RALEN  . . . . . . . . . .  	0047
  SCB_RAOFF  . . . . . . . . . .  	0049
  SCB_RASEG  . . . . . . . . . .  	004B
  SCB_PULEN  . . . . . . . . . .  	004D
  SCB_PUOFF  . . . . . . . . . .  	004F
  SCB_PUSEG  . . . . . . . . . .  	0051
  SCB_PDLEN  . . . . . . . . . .  	0053
  SCB_PDOFF  . . . . . . . . . .  	0055
  SCB_PDSEG  . . . . . . . . . .  	0057
  SCB_PILEN  . . . . . . . . . .  	0059
  SCB_PIOFF  . . . . . . . . . .  	005B
  SCB_PISEG  . . . . . . . . . .  	005D
  SCB_PICOL  . . . . . . . . . .  	005F
  SCB_AILEN  . . . . . . . . . .  	0061
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-7


  SCB_AIOFF  . . . . . . . . . .  	0063
  SCB_AISEG  . . . . . . . . . .  	0065
  SCB_AICOL  . . . . . . . . . .  	0067
  SCB_CILEN  . . . . . . . . . .  	0069
  SCB_CIOFF  . . . . . . . . . .  	006B
  SCB_CISEG  . . . . . . . . . .  	006D
  SCB_CICOL  . . . . . . . . . .  	006F
  SCB_UILEN  . . . . . . . . . .  	0071
  SCB_UIOFF  . . . . . . . . . .  	0073
  SCB_UISEG  . . . . . . . . . .  	0075
  SCB_UIROW  . . . . . . . . . .  	0077
  SCB_UICOL  . . . . . . . . . .  	0079
  SCB_DILEN  . . . . . . . . . .  	007B
  SCB_DIOFF  . . . . . . . . . .  	007D
  SCB_DISEG  . . . . . . . . . .  	007F
  SCB_DIROW  . . . . . . . . . .  	0081
  SCB_DICOL  . . . . . . . . . .  	0083
  SCB_LILEN  . . . . . . . . . .  	0085
  SCB_LIOFF  . . . . . . . . . .  	0087
  SCB_LISEG  . . . . . . . . . .  	0089
  SCB_LIROW  . . . . . . . . . .  	008B
  SCB_LICOL  . . . . . . . . . .  	008D
  SCB_RILEN  . . . . . . . . . .  	008F
  SCB_RIOFF  . . . . . . . . . .  	0091
  SCB_RISEG  . . . . . . . . . .  	0093
  SCB_RIROW  . . . . . . . . . .  	0095
  SCB_RICOL  . . . . . . . . . .  	0097
  SCB_NCRAYOFF . . . . . . . . .  	0099
  SCB_NCRAYSEG . . . . . . . . .  	009B
  SCB_CCBID  . . . . . . . . . .  	009D
  SCB_CCBVECNUM  . . . . . . . .  	009F
  SCB_CCBVECOFF  . . . . . . . .  	00A1
  SCB_CCBVECSEG  . . . . . . . .  	00A3
  SCB_INDEXOFF . . . . . . . . .  	00A5
  SCB_INDEXSEG . . . . . . . . .  	00A7
  SCB_SELOFF . . . . . . . . . .  	00A9
  SCB_SELSEG . . . . . . . . . .  	00AB
  SCB_OAOPT  . . . . . . . . . .  	00AD
  SCB_OAPOFF . . . . . . . . . .  	00AF
  SCB_OAPSEG . . . . . . . . . .  	00B1
  SCB_OASLEN . . . . . . . . . .  	00B3
  SCB_OASSEG . . . . . . . . . .  	00B5
  SCB_OASTERMC . . . . . . . . .  	00B7
  SCB_KS . . . . . . . . . . . .  	00B8
  SCB_LVBOFF . . . . . . . . . .  	00BA
  SCB_LVBSEG . . . . . . . . . .  	00BC
  SCB_FMOPT1 . . . . . . . . . .  	00BE
  SCB_FMOPT2 . . . . . . . . . .  	00C0
  SCB_TRANLEN  . . . . . . . . .  	00C2
  SCB_TRANOFF  . . . . . . . . .  	00C4
  SCB_TRANSEG  . . . . . . . . .  	00C6
  SCB_MONOOFF  . . . . . . . . .  	00C8
  SCB_MONOSEG  . . . . . . . . .  	00CA
  SCB_DBCSLEN  . . . . . . . . .  	00CC
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-8


  SCB_DBCSOFF  . . . . . . . . .  	00CE
  SCB_DBCSSEG  . . . . . . . . .  	00D0
  SCB_FONTOFF  . . . . . . . . .  	00D2
  SCB_FONTSEG  . . . . . . . . .  	00D4

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

DATA . . . . . . . . . . . . . .  	0745	BYTE	PUBLIC	'DATA'
SELECT . . . . . . . . . . . . .  	0DE5	PARA	PUBLIC	'SELECT'

Symbols:            

                N a m e         	Type	 Value	 Attr

ACTIVE . . . . . . . . . . . . .  	V BYTE	0000		External
ADJUST_DOWN  . . . . . . . . . .  	L NEAR	0000	SELECT	External
ADJUST_UP  . . . . . . . . . . .  	L NEAR	0000	SELECT	External
ALLOCATE_HELP  . . . . . . . . .  	L FAR 	0000		External
ALLOCATE_LVB . . . . . . . . . .  	L FAR 	0000		External
ALTERNATE  . . . . . . . . . . .  	V BYTE	0000		External
A_DRIVE  . . . . . . . . . . . .  	NUMBER	0003	

BX_RN  . . . . . . . . . . . . .  	NUMBER	3009	
B_DRIVE  . . . . . . . . . . . .  	NUMBER	0001	

C0H_RN . . . . . . . . . . . . .  	NUMBER	3017	
CASFAR . . . . . . . . . . . . .  	NUMBER	0001	
CASFILEID  . . . . . . . . . . .  	NUMBER	1234	
CASINT . . . . . . . . . . . . .  	NUMBER	007F	
CASRM  . . . . . . . . . . . . .  	NUMBER	0000	
CC_RN  . . . . . . . . . . . . .  	NUMBER	2100	
CE_RN  . . . . . . . . . . . . .  	NUMBER	5000	
CFILE  . . . . . . . . . . . . .  	L BYTE	073A	DATA
CGK10  . . . . . . . . . . . . .  	L NEAR	014E	SELECT
CGK20  . . . . . . . . . . . . .  	L NEAR	016C	SELECT
CGK30  . . . . . . . . . . . . .  	L NEAR	0191	SELECT
CGKEXIT  . . . . . . . . . . . .  	L NEAR	0198	SELECT
CHILD_ENTER  . . . . . . . . . .  	NUMBER	0034	
CHILD_F1HELP . . . . . . . . . .  	NUMBER	0031	
CHILD_F3EXIT . . . . . . . . . .  	NUMBER	0028	
CHILD_F9KEYS . . . . . . . . . .  	NUMBER	0032	
CHILD_QUIT . . . . . . . . . . .  	NUMBER	0033	
CHK10  . . . . . . . . . . . . .  	L NEAR	0280	SELECT
CHKEXIT  . . . . . . . . . . . .  	L NEAR	0280	SELECT
CHK_NUMKEYS  . . . . . . . . . .  	N PROC	02A5	SELECT	Length = 004C
CHK_RETKEYS  . . . . . . . . . .  	N PROC	0251	SELECT	Length = 0054
CI_1 . . . . . . . . . . . . . .  	L NEAR	0DD6	SELECT
CI_2 . . . . . . . . . . . . . .  	L NEAR	0DE4	SELECT
CLEAR_INBUFF . . . . . . . . . .  	N PROC	0DD6	SELECT	Length = 000F
CLR_CLR  . . . . . . . . . . . .  	NUMBER	0001	
CLR_MON  . . . . . . . . . . . .  	NUMBER	0002	
CM_RN  . . . . . . . . . . . . .  	NUMBER	3001	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-9


CNK_20 . . . . . . . . . . . . .  	L NEAR	02ED	SELECT
COLOROBJID . . . . . . . . . . .  	NUMBER	00FD	
CONTINUE . . . . . . . . . . . .  	L NEAR	0DD3	SELECT
COPYRIGHT  . . . . . . . . . . .  	NUMBER	0001	
CRD_BUFLEN . . . . . . . . . . .  	L WORD	014D	DATA
CRD_BUFOFF . . . . . . . . . . .  	L WORD	014F	DATA
CRD_BUFSEG . . . . . . . . . . .  	L WORD	0151	DATA
CRD_BUFSIZE  . . . . . . . . . .  	NUMBER	0001	
CRD_CCBVECLEN  . . . . . . . . .  	L WORD	0159	DATA
CRD_CCBVECOFF  . . . . . . . . .  	L WORD	015B	DATA	Global
CRD_CCBVECSEG  . . . . . . . . .  	L WORD	015D	DATA	Global
CRD_DOSERROR . . . . . . . . . .  	L WORD	0161	DATA
CRD_ERROR  . . . . . . . . . . .  	L WORD	015F	DATA
CRD_FILSPEOFF  . . . . . . . . .  	L WORD	0155	DATA
CRD_FILSPESEG  . . . . . . . . .  	L WORD	0157	DATA
CRD_ID . . . . . . . . . . . . .  	L WORD	0153	DATA
CRD_IDNOTFOUND . . . . . . . . .  	NUMBER	0008	
CRD_NOCOLORS . . . . . . . . . .  	NUMBER	0002	
CRD_NOTCASFILE . . . . . . . . .  	NUMBER	0004	
CRD_OPT1 . . . . . . . . . . . .  	L WORD	014B	DATA
CRD_RESERVED . . . . . . . . . .  	L BYTE	0163	DATA	Length = 0022
CRD_RN . . . . . . . . . . . . .  	NUMBER	210B	
CR_RN  . . . . . . . . . . . . .  	NUMBER	2101	
CURSOROFF  . . . . . . . . . . .  	N PROC	0951	SELECT	Global	Length = 0014
CURSORON . . . . . . . . . . . .  	N PROC	0965	SELECT	Global	Length = 0014
CWR_RN . . . . . . . . . . . . .  	NUMBER	210C	
C_DRIVE  . . . . . . . . . . . .  	NUMBER	0002	

DATA_INVALID . . . . . . . . . .  	NUMBER	0001	
DATA_VALID . . . . . . . . . . .  	NUMBER	0000	
DBC_RN . . . . . . . . . . . . .  	NUMBER	3016	
DEALLOCATE_HELP  . . . . . . . .  	L FAR 	0000		External
DEALLOCATE_LVB . . . . . . . . .  	L FAR 	0000		External
DEF_DEST_A . . . . . . . . . . .  	NUMBER	0003	
DEF_DEST_B . . . . . . . . . . .  	NUMBER	0002	
DEF_DEST_C . . . . . . . . . . .  	NUMBER	0001	
DIALOGOBJID  . . . . . . . . . .  	NUMBER	00FB	
DISKETTES_EXIST  . . . . . . . .  	NUMBER	0001	
DISK_PANEL . . . . . . . . . . .  	V WORD	0000		External
DISPLAY_MESSAGE_ROUTINE  . . . .  	L FAR 	0000		External
DISPLAY_PANEL_CALL . . . . . . .  	L NEAR	0000	SELECT	External
DISPQ  . . . . . . . . . . . . .  	L FAR 	0000		External
DNARROW  . . . . . . . . . . . .  	NUMBER	5000	
DONE1  . . . . . . . . . . . . .  	L NEAR	0BAA	SELECT
DO_NOT_USE_DEFAULT . . . . . . .  	NUMBER	0001	
DSKCPY_EXIT  . . . . . . . . . .  	NUMBER	0001	
DSKCPY_TO_A_360  . . . . . . . .  	NUMBER	0001	
DSKCPY_TO_A_720  . . . . . . . .  	NUMBER	0000	
DSKCPY_TO_B  . . . . . . . . . .  	NUMBER	0002	
DTS_RN . . . . . . . . . . . . .  	NUMBER	4001	

EC1  . . . . . . . . . . . . . .  	L NEAR	0B34	SELECT
EC2  . . . . . . . . . . . . . .  	L NEAR	0B3C	SELECT
EC2_1  . . . . . . . . . . . . .  	L NEAR	0B55	SELECT
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-10


EC2_2  . . . . . . . . . . . . .  	L NEAR	0B5E	SELECT
EC2_4  . . . . . . . . . . . . .  	L NEAR	0B4C	SELECT
EC3  . . . . . . . . . . . . . .  	L NEAR	0B67	SELECT
EC3_1  . . . . . . . . . . . . .  	L NEAR	0B8E	SELECT
EC3_2  . . . . . . . . . . . . .  	L NEAR	0B97	SELECT
EC3_6  . . . . . . . . . . . . .  	L NEAR	0B71	SELECT
EC3_8  . . . . . . . . . . . . .  	L NEAR	0B7F	SELECT
EC4  . . . . . . . . . . . . . .  	L NEAR	0B9B	SELECT
EC7  . . . . . . . . . . . . . .  	L NEAR	0BA0	SELECT
EC8  . . . . . . . . . . . . . .  	L NEAR	0BA5	SELECT
ENTER  . . . . . . . . . . . . .  	NUMBER	000D	
ERROR_ACTIVE . . . . . . . . . .  	V BYTE	0000		External
ERR_ACCESSING_FILE . . . . . . .  	NUMBER	0007	
ERR_ALLOCATING_MEM . . . . . . .  	NUMBER	000A	
ERR_BAD_PATH . . . . . . . . . .  	NUMBER	003E	
ERR_BAD_PFILE  . . . . . . . . .  	NUMBER	003F	
ERR_BAD_PPRO . . . . . . . . . .  	NUMBER	0040	
ERR_BORDER . . . . . . . . . . .  	NUMBER	0043	
ERR_CDP_CPP  . . . . . . . . . .  	NUMBER	000B	
ERR_COPY_DISK  . . . . . . . . .  	NUMBER	0039	
ERR_DOS_DISK . . . . . . . . . .  	NUMBER	0044	
ERR_EXIT . . . . . . . . . . . .  	NUMBER	0014	
ERR_FINDING_NAME . . . . . . . .  	NUMBER	0006	
ERR_FINDING_VALUE  . . . . . . .  	NUMBER	0004	
ERR_GENERAL  . . . . . . . . . .  	NUMBER	0045	
ERR_INS_INSTALL  . . . . . . . .  	NUMBER	0061	
ERR_KEYB . . . . . . . . . . . .  	NUMBER	0021	
ERR_LINE_TOO_LONG  . . . . . . .  	NUMBER	0005	
ERR_NOT_ENOUGH_MEM . . . . . . .  	NUMBER	0001	
ERR_NUMBER_MATCH . . . . . . . .  	NUMBER	0009	
ERR_OPENING_FILE . . . . . . . .  	NUMBER	0002	
ERR_PRN_DEFN . . . . . . . . . .  	NUMBER	000C	
ERR_PRT_NO_HDWR  . . . . . . . .  	NUMBER	0011	
ERR_READING_FILE . . . . . . . .  	NUMBER	0003	
ERR_TOO_MANY_DEFS  . . . . . . .  	NUMBER	0008	
ESCAPE . . . . . . . . . . . . .  	NUMBER	001B	
EXEC_DIR . . . . . . . . . . . .  	NUMBER	0001	
EXEC_NO_DIR  . . . . . . . . . .  	NUMBER	0000	
EXIT_SELECT  . . . . . . . . . .  	L NEAR	0000	SELECT	External
EXPECTED_VERSION . . . . . . . .  	NUMBER	0004	
E_1440_SECTORS . . . . . . . . .  	NUMBER	0012	
E_1440_TRACKS  . . . . . . . . .  	NUMBER	0050	
E_FILE_ATTR  . . . . . . . . . .  	NUMBER	0000		Communal
E_RETURN . . . . . . . . . . . .  	NUMBER	0000		Communal

F1 . . . . . . . . . . . . . . .  	NUMBER	003B	
F10  . . . . . . . . . . . . . .  	NUMBER	0044	
F2 . . . . . . . . . . . . . . .  	NUMBER	003C	
F3 . . . . . . . . . . . . . . .  	NUMBER	003D	
F4 . . . . . . . . . . . . . . .  	NUMBER	003E	
F5 . . . . . . . . . . . . . . .  	NUMBER	003F	
F6 . . . . . . . . . . . . . . .  	NUMBER	0040	
F7 . . . . . . . . . . . . . . .  	NUMBER	0041	
F8 . . . . . . . . . . . . . . .  	NUMBER	0042	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-11


F9 . . . . . . . . . . . . . . .  	NUMBER	0043	
FALSE  . . . . . . . . . . . . .  	NUMBER	0000	
FF_RN  . . . . . . . . . . . . .  	NUMBER	1300	
FIND_FILE_ROUTINE  . . . . . . .  	L FAR 	0000		External
FK_ENT . . . . . . . . . . . . .  	V BYTE	0000		External
FK_ENT_LEN . . . . . . . . . . .  	NUMBER	0000		Communal
FORMAT_DISK  . . . . . . . . . .  	NUMBER	0041	
FORMAT_DISKET  . . . . . . . . .  	NUMBER	0042	
FORMAT_SHELL . . . . . . . . . .  	NUMBER	004B	
FORMAT_STARTUP . . . . . . . . .  	NUMBER	004C	
FREE_EDOS_SPACE  . . . . . . . .  	NUMBER	0001	

GET_FUNCTION_CALL  . . . . . . .  	L NEAR	0000		External
GET_HELP_ID  . . . . . . . . . .  	L NEAR	0000	SELECT	External
GET_ICB  . . . . . . . . . . . .  	N PROC	0818	SELECT	Global	Length = 0029
GET_INPUT  . . . . . . . . . . .  	N PROC	014C	SELECT	Length = 0001
GET_INPUT_CALL . . . . . . . . .  	N PROC	00BE	SELECT	Global	Length = 008E
GET_KEY  . . . . . . . . . . . .  	N PROC	014D	SELECT	Global	Length = 004D
GET_PCB  . . . . . . . . . . . .  	N PROC	07C6	SELECT	Global	Length = 0029
GET_SCB  . . . . . . . . . . . .  	N PROC	07EF	SELECT	Global	Length = 0029
GET_SCROLL_CALL  . . . . . . . .  	N PROC	0000	SELECT	Global	Length = 00BE
GE_RN  . . . . . . . . . . . . .  	NUMBER	4000	
GI10 . . . . . . . . . . . . . .  	L NEAR	00CA	SELECT
GI20 . . . . . . . . . . . . . .  	L NEAR	0146	SELECT
GI_11  . . . . . . . . . . . . .  	L NEAR	010B	SELECT
GRAPHOBJID . . . . . . . . . . .  	NUMBER	00F8	
GRD_RN . . . . . . . . . . . . .  	NUMBER	3011	
GS10 . . . . . . . . . . . . . .  	L NEAR	001B	SELECT
GS20 . . . . . . . . . . . . . .  	L NEAR	00A5	SELECT
GVIDO  . . . . . . . . . . . . .  	L FAR 	0000		External
GV_128K  . . . . . . . . . . . .  	NUMBER	0800	
GV_192K  . . . . . . . . . . . .  	NUMBER	1000	
GV_256K  . . . . . . . . . . . .  	NUMBER	2000	
GV_64K . . . . . . . . . . . . .  	NUMBER	0400	
GV_APLOGOFF  . . . . . . . . . .  	L WORD	0018	DATA
GV_APLOGSEG  . . . . . . . . . .  	L WORD	001A	DATA
GV_BASE_6845 . . . . . . . . . .  	L WORD	000A	DATA
GV_CGA . . . . . . . . . . . . .  	NUMBER	0002	
GV_CGAA  . . . . . . . . . . . .  	NUMBER	0040	
GV_CGAP  . . . . . . . . . . . .  	NUMBER	0080	
GV_COLOR . . . . . . . . . . . .  	NUMBER	0010	
GV_COLORBITS . . . . . . . . . .  	L BYTE	004E	DATA
GV_CSH . . . . . . . . . . . . .  	L WORD	001C	DATA
GV_CSW . . . . . . . . . . . . .  	L WORD	001E	DATA
GV_CURATTR . . . . . . . . . . .  	L WORD	004C	DATA
GV_CURCOL  . . . . . . . . . . .  	L WORD	0044	DATA
GV_CUREND  . . . . . . . . . . .  	L WORD	0048	DATA
GV_CURMOD0 . . . . . . . . . . .  	L WORD	0032	DATA
GV_CURMOD1 . . . . . . . . . . .  	L WORD	0034	DATA
GV_CURMOD2 . . . . . . . . . . .  	L WORD	0036	DATA
GV_CURMOD3 . . . . . . . . . . .  	L WORD	0038	DATA
GV_CURMOD4 . . . . . . . . . . .  	L WORD	003A	DATA
GV_CURMOD5 . . . . . . . . . . .  	L WORD	003C	DATA
GV_CURMOD6 . . . . . . . . . . .  	L WORD	003E	DATA
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-12


GV_CURMOD7 . . . . . . . . . . .  	L WORD	0040	DATA
GV_CURPAGENUM  . . . . . . . . .  	L BYTE	0008	DATA
GV_CURPOS0 . . . . . . . . . . .  	L WORD	0022	DATA
GV_CURPOS1 . . . . . . . . . . .  	L WORD	0024	DATA
GV_CURPOS2 . . . . . . . . . . .  	L WORD	0026	DATA
GV_CURPOS3 . . . . . . . . . . .  	L WORD	0028	DATA
GV_CURPOS4 . . . . . . . . . . .  	L WORD	002A	DATA
GV_CURPOS5 . . . . . . . . . . .  	L WORD	002C	DATA
GV_CURPOS6 . . . . . . . . . . .  	L WORD	002E	DATA
GV_CURPOS7 . . . . . . . . . . .  	L WORD	0030	DATA
GV_CURROW  . . . . . . . . . . .  	L WORD	0042	DATA
GV_CURSTART  . . . . . . . . . .  	L WORD	0046	DATA
GV_CURWIDTH  . . . . . . . . . .  	L WORD	004A	DATA
GV_EGA . . . . . . . . . . . . .  	NUMBER	0004	
GV_EGAA  . . . . . . . . . . . .  	NUMBER	0020	
GV_EGACM . . . . . . . . . . . .  	NUMBER	0080	
GV_EGAP  . . . . . . . . . . . .  	NUMBER	0100	
GV_ERRCODE . . . . . . . . . . .  	L WORD	004F	DATA
GV_HS  . . . . . . . . . . . . .  	NUMBER	0200	
GV_MGA . . . . . . . . . . . . .  	NUMBER	0010	
GV_MONOP . . . . . . . . . . . .  	NUMBER	0040	
GV_NUMLINES  . . . . . . . . . .  	L WORD	0020	DATA
GV_OSLOGOFF  . . . . . . . . . .  	L WORD	0014	DATA
GV_OSLOGSEG  . . . . . . . . . .  	L WORD	0016	DATA
GV_P5140 . . . . . . . . . . . .  	NUMBER	0002	
GV_P5151 . . . . . . . . . . . .  	NUMBER	0008	
GV_P5153 . . . . . . . . . . . .  	NUMBER	0004	
GV_PGA . . . . . . . . . . . . .  	NUMBER	0008	
GV_PGAEM . . . . . . . . . . . .  	NUMBER	0100	
GV_PHYOFF  . . . . . . . . . . .  	L WORD	000E	DATA
GV_PHYOFFPAGE  . . . . . . . . .  	L WORD	0010	DATA
GV_PHYSEG  . . . . . . . . . . .  	L WORD	0012	DATA
GV_RESERVED  . . . . . . . . . .  	L BYTE	0051	DATA	Length = 0028
GV_RN  . . . . . . . . . . . . .  	NUMBER	2102	
GV_SCRLEN  . . . . . . . . . . .  	L WORD	0006	DATA
GV_SCRWIDTH  . . . . . . . . . .  	L WORD	0004	DATA
GV_STAT1 . . . . . . . . . . . .  	L WORD	0000	DATA
GV_STAT2 . . . . . . . . . . . .  	L WORD	0002	DATA
GV_STAT_6845 . . . . . . . . . .  	L WORD	000C	DATA
GV_TEXTGRAPH . . . . . . . . . .  	NUMBER	0020	
GV_TURBOP  . . . . . . . . . . .  	NUMBER	0200	
GV_TV  . . . . . . . . . . . . .  	NUMBER	0001	
GV_TVW . . . . . . . . . . . . .  	NUMBER	0001	
GV_UM  . . . . . . . . . . . . .  	NUMBER	4000	
GV_VIDMODE . . . . . . . . . . .  	L BYTE	0009	DATA
GWR_RN . . . . . . . . . . . . .  	NUMBER	3010	

HANDLE_CHILDREN  . . . . . . . .  	L NEAR	0000		External
HANDLE_ERROR_CALL  . . . . . . .  	L FAR 	0000	SELECT	External
HCB_HELP . . . . . . . . . . . .  	NUMBER	0002	
HCB_KEYS . . . . . . . . . . . .  	NUMBER	0001	
HELPOBJID  . . . . . . . . . . .  	NUMBER	00FE	
HLPRD  . . . . . . . . . . . . .  	L FAR 	0000		External
HLP_CONT . . . . . . . . . . . .  	NUMBER	0001	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-13


HLP_HELP . . . . . . . . . . . .  	NUMBER	0004	
HLP_INDX . . . . . . . . . . . .  	NUMBER	0008	
HLP_KEYS . . . . . . . . . . . .  	NUMBER	0002	
HLP_OVER . . . . . . . . . . . .  	NUMBER	0010	
HOOK_INT_24  . . . . . . . . . .  	L FAR 	0000		External
HRD_BUFLEN . . . . . . . . . . .  	L WORD	008F	DATA	Global
HRD_BUFOFF . . . . . . . . . . .  	L WORD	0091	DATA	Global
HRD_BUFSEG . . . . . . . . . . .  	L WORD	0093	DATA	Global
HRD_BUFSIZE  . . . . . . . . . .  	NUMBER	0001	
HRD_DISPID . . . . . . . . . . .  	NUMBER	0004	
HRD_DOSERROR . . . . . . . . . .  	L WORD	00AB	DATA
HRD_ERROR  . . . . . . . . . . .  	L WORD	00A9	DATA
HRD_FILSPOFF . . . . . . . . . .  	L WORD	0097	DATA
HRD_FILSPSEG . . . . . . . . . .  	L WORD	0099	DATA
HRD_ID . . . . . . . . . . . . .  	L WORD	0095	DATA
HRD_NOHELPID . . . . . . . . . .  	NUMBER	0008	
HRD_NOHLPOBJ . . . . . . . . . .  	NUMBER	0002	
HRD_NOOBJLST . . . . . . . . . .  	NUMBER	0004	
HRD_NOTCASFILE . . . . . . . . .  	NUMBER	0010	
HRD_OPT1 . . . . . . . . . . . .  	L WORD	008D	DATA
HRD_RESERVED . . . . . . . . . .  	L BYTE	00AD	DATA	Length = 0030
HRD_RN . . . . . . . . . . . . .  	NUMBER	2109	
HRD_TEXT . . . . . . . . . . . .  	NUMBER	0002	
HRD_TEXTLEN  . . . . . . . . . .  	L WORD	00A3	DATA
HRD_TEXTOFF  . . . . . . . . . .  	L WORD	00A5	DATA
HRD_TEXTSEG  . . . . . . . . . .  	L WORD	00A7	DATA
HRD_TOPIC  . . . . . . . . . . .  	NUMBER	0001	
HRD_TOPICLEN . . . . . . . . . .  	L WORD	009D	DATA
HRD_TOPICNUM . . . . . . . . . .  	L WORD	009B	DATA
HRD_TOPICOFF . . . . . . . . . .  	L WORD	009F	DATA
HRD_TOPICSEG . . . . . . . . . .  	L WORD	00A1	DATA
HWR_RN . . . . . . . . . . . . .  	NUMBER	2108	

I110 . . . . . . . . . . . . . .  	L NEAR	0D71	SELECT
I2S_RN . . . . . . . . . . . . .  	NUMBER	3000	
ICB_AXC  . . . . . . . . . . . .  	NUMBER	0020	
ICB_AXD  . . . . . . . . . . . .  	NUMBER	0040	
ICB_BEN  . . . . . . . . . . . .  	NUMBER	0008	
ICB_BEX  . . . . . . . . . . . .  	NUMBER	0010	
ICB_BKS  . . . . . . . . . . . .  	NUMBER	8000	
ICB_BOX  . . . . . . . . . . . .  	NUMBER	0020	
ICB_CAP  . . . . . . . . . . . .  	NUMBER	2000	
ICB_CLR  . . . . . . . . . . . .  	NUMBER	0200	
ICB_CSW  . . . . . . . . . . . .  	NUMBER	0080	
ICB_CTE  . . . . . . . . . . . .  	NUMBER	0008	
ICB_DEL  . . . . . . . . . . . .  	NUMBER	0002	
ICB_ECL  . . . . . . . . . . . .  	NUMBER	0001	
ICB_END  . . . . . . . . . . . .  	NUMBER	0010	
ICB_FGS  . . . . . . . . . . . .  	NUMBER	0400	
ICB_FIN  . . . . . . . . . . . .  	NUMBER	4000	
ICB_HOM  . . . . . . . . . . . .  	NUMBER	0004	
ICB_HOR  . . . . . . . . . . . .  	NUMBER	0008	
ICB_INS  . . . . . . . . . . . .  	NUMBER	0001	
ICB_LFA  . . . . . . . . . . . .  	NUMBER	4000	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-14


ICB_MUS  . . . . . . . . . . . .  	NUMBER	0040	
ICB_NUM  . . . . . . . . . . . .  	NUMBER	1000	
ICB_OUT  . . . . . . . . . . . .  	NUMBER	0100	
ICB_PAD  . . . . . . . . . . . .  	NUMBER	4000	
ICB_PSW  . . . . . . . . . . . .  	NUMBER	0400	
ICB_RJU  . . . . . . . . . . . .  	NUMBER	0800	
ICB_RTA  . . . . . . . . . . . .  	NUMBER	2000	
ICB_SCAP . . . . . . . . . . . .  	NUMBER	0040	
ICB_SCR  . . . . . . . . . . . .  	NUMBER	0800	
ICB_SDEF . . . . . . . . . . . .  	NUMBER	0001	
ICB_SINS . . . . . . . . . . . .  	NUMBER	0080	
ICB_SMU  . . . . . . . . . . . .  	NUMBER	0080	
ICB_SMUS . . . . . . . . . . . .  	NUMBER	0002	
ICB_SNUM . . . . . . . . . . . .  	NUMBER	0020	
ICB_SPUS . . . . . . . . . . . .  	NUMBER	0004	
ICB_SSCR . . . . . . . . . . . .  	NUMBER	0010	
ICB_STRU . . . . . . . . . . . .  	NUMBER	0008	
ICB_SWK  . . . . . . . . . . . .  	NUMBER	1000	
ICB_TBX  . . . . . . . . . . . .  	NUMBER	0004	
ICB_TSA  . . . . . . . . . . . .  	NUMBER	1000	
ICB_TSD  . . . . . . . . . . . .  	NUMBER	0800	
ICB_TSR  . . . . . . . . . . . .  	NUMBER	2000	
ICB_UDO  . . . . . . . . . . . .  	NUMBER	0400	
ICB_UFK  . . . . . . . . . . . .  	NUMBER	0200	
ICB_UPC  . . . . . . . . . . . .  	NUMBER	0100	
ICB_USC  . . . . . . . . . . . .  	NUMBER	0004	
ICB_WAE  . . . . . . . . . . . .  	NUMBER	0002	
ICB_WAR  . . . . . . . . . . . .  	NUMBER	0100	
ICB_WBS  . . . . . . . . . . . .  	NUMBER	0200	
ICB_WCE  . . . . . . . . . . . .  	NUMBER	0040	
ICB_WDL  . . . . . . . . . . . .  	NUMBER	0080	
ICB_WEN  . . . . . . . . . . . .  	NUMBER	0020	
ICB_WHM  . . . . . . . . . . . .  	NUMBER	0010	
ICB_WIN  . . . . . . . . . . . .  	NUMBER	0001	
ICB_WRP  . . . . . . . . . . . .  	NUMBER	8000	
ICB_XCL  . . . . . . . . . . . .  	NUMBER	0002	
IEXIT  . . . . . . . . . . . . .  	L NEAR	0D78	SELECT
INCHA  . . . . . . . . . . . . .  	L FAR 	0000		External
INC_AMONO  . . . . . . . . . . .  	NUMBER	0020	
INC_DBCS . . . . . . . . . . . .  	NUMBER	0002	
INC_DBCSLEN  . . . . . . . . . .  	L WORD	0135	DATA
INC_DBCSOFF  . . . . . . . . . .  	L WORD	0137	DATA
INC_DBCSSEG  . . . . . . . . . .  	L WORD	0139	DATA
INC_DDBCS  . . . . . . . . . . .  	NUMBER	0008	
INC_KFND . . . . . . . . . . . .  	NUMBER	0001	
INC_KS . . . . . . . . . . . . .  	L WORD	012D	DATA	Global
INC_KWAIT  . . . . . . . . . . .  	NUMBER	0001	
INC_MONOOFF  . . . . . . . . . .  	L WORD	013B	DATA
INC_MONOSEG  . . . . . . . . . .  	L WORD	013D	DATA
INC_OPT  . . . . . . . . . . . .  	L WORD	0129	DATA
INC_RESERVED . . . . . . . . . .  	L BYTE	013F	DATA	Length = 000C
INC_RN . . . . . . . . . . . . .  	NUMBER	3015	
INC_RSCAN  . . . . . . . . . . .  	NUMBER	0040	
INC_STAT . . . . . . . . . . . .  	L WORD	012B	DATA
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-15


INC_TRANLEN  . . . . . . . . . .  	L WORD	012F	DATA
INC_TRANOFF  . . . . . . . . . .  	L WORD	0131	DATA
INC_TRANSEG  . . . . . . . . . .  	L WORD	0133	DATA
INC_UDBCS  . . . . . . . . . . .  	NUMBER	0004	
INC_UMONO  . . . . . . . . . . .  	NUMBER	0010	
INC_UTRAN  . . . . . . . . . . .  	NUMBER	0002	
INITIALIZE . . . . . . . . . . .  	N PROC	0ACF	SELECT	Global	Length = 02AE
INIT_HELP_TITLE  . . . . . . . .  	N PROC	074D	SELECT	Length = 0051
INIT_PQUEUE_CALL . . . . . . . .  	L NEAR	0000	SELECT	External
INIT_SCROLL_CALL . . . . . . . .  	L NEAR	0000	SELECT	External
INPUT  . . . . . . . . . . . . .  	L FAR 	0000		External
INPUTOBJID . . . . . . . . . . .  	NUMBER	00FC	
INSERT_DISK_ROUTINE  . . . . . .  	N PROC	0D7D	SELECT	Global	Length = 0059
INSTALLRW  . . . . . . . . . . .  	NUMBER	0080	
INSTRN . . . . . . . . . . . . .  	L FAR 	0000		External
INS_FKS  . . . . . . . . . . . .  	NUMBER	0001	
INS_FLEN . . . . . . . . . . . .  	L WORD	007D	DATA
INS_FOFF . . . . . . . . . . . .  	L WORD	007F	DATA
INS_FSEG . . . . . . . . . . . .  	L WORD	0081	DATA
INS_KS . . . . . . . . . . . . .  	L WORD	007B	DATA
INS_OPT  . . . . . . . . . . . .  	L WORD	0079	DATA
INS_RN . . . . . . . . . . . . .  	NUMBER	300B	
INS_RSLT . . . . . . . . . . . .  	L WORD	008B	DATA
INS_SLEN . . . . . . . . . . . .  	L WORD	0083	DATA
INS_SOFF . . . . . . . . . . . .  	L WORD	0085	DATA
INS_SPOFF  . . . . . . . . . . .  	L WORD	0089	DATA
INS_SSEG . . . . . . . . . . . .  	L WORD	0087	DATA
IN_ADBCS . . . . . . . . . . . .  	NUMBER	0002	
IN_AMONO . . . . . . . . . . . .  	NUMBER	0020	
IN_BORDEREN  . . . . . . . . . .  	L BYTE	047E	DATA
IN_BORDEREX  . . . . . . . . . .  	L BYTE	0486	DATA
IN_CAPCOL  . . . . . . . . . . .  	L WORD	044C	DATA
IN_CAPLEN  . . . . . . . . . . .  	L WORD	044E	DATA
IN_CAPOFF  . . . . . . . . . . .  	L WORD	0450	DATA
IN_CAPROW  . . . . . . . . . . .  	L WORD	044A	DATA
IN_CAPSEG  . . . . . . . . . . .  	L WORD	0452	DATA
IN_CCBVECOFF . . . . . . . . . .  	L WORD	042E	DATA	Global
IN_CCBVECSEG . . . . . . . . . .  	L WORD	0430	DATA	Global
IN_CURINS  . . . . . . . . . . .  	L WORD	0434	DATA
IN_CURINSOFF . . . . . . . . . .  	L WORD	0492	DATA
IN_CURINSSEG . . . . . . . . . .  	L WORD	0494	DATA
IN_CURNOR  . . . . . . . . . . .  	L WORD	0432	DATA	Global
IN_CURRPLOFF . . . . . . . . . .  	L WORD	0496	DATA
IN_CURRPLSEG . . . . . . . . . .  	L WORD	0498	DATA
IN_DBCSLEN . . . . . . . . . . .  	L WORD	0440	DATA
IN_DBCSOFF . . . . . . . . . . .  	L WORD	0442	DATA
IN_DBCSSEG . . . . . . . . . . .  	L WORD	0444	DATA
IN_DDBCS . . . . . . . . . . . .  	NUMBER	0008	
IN_DECSEP  . . . . . . . . . . .  	L BYTE	0476	DATA
IN_DELIMITDIR  . . . . . . . . .  	L BYTE	047C	DATA
IN_DELIMITEN . . . . . . . . . .  	L BYTE	0478	DATA
IN_DELIMITEX . . . . . . . . . .  	L BYTE	047A	DATA
IN_DELOFF  . . . . . . . . . . .  	L WORD	049A	DATA
IN_DELSEG  . . . . . . . . . . .  	L WORD	049C	DATA
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-16


IN_ERROR . . . . . . . . . . . .  	L WORD	049E	DATA
IN_ICBID . . . . . . . . . . . .  	L WORD	0422	DATA	Global
IN_ICBOFF  . . . . . . . . . . .  	L WORD	0424	DATA
IN_ICBSEG  . . . . . . . . . . .  	L WORD	0426	DATA
IN_ICBVECNUM . . . . . . . . . .  	L WORD	0428	DATA
IN_ICBVECOFF . . . . . . . . . .  	L WORD	042A	DATA
IN_ICBVECSEG . . . . . . . . . .  	L WORD	042C	DATA
IN_INSCOL  . . . . . . . . . . .  	L WORD	0456	DATA
IN_INSLEN  . . . . . . . . . . .  	L WORD	0458	DATA
IN_INSOFF  . . . . . . . . . . .  	L WORD	045A	DATA
IN_INSROW  . . . . . . . . . . .  	L WORD	0454	DATA
IN_INSSEG  . . . . . . . . . . .  	L WORD	045C	DATA
IN_KEYSOFF . . . . . . . . . . .  	L WORD	0446	DATA
IN_KEYSSEG . . . . . . . . . . .  	L WORD	0448	DATA
IN_LICBX . . . . . . . . . . . .  	NUMBER	0040	
IN_LVBOFF  . . . . . . . . . . .  	L WORD	048E	DATA
IN_LVBOV . . . . . . . . . . . .  	NUMBER	0080	
IN_LVBSEG  . . . . . . . . . . .  	L WORD	0490	DATA
IN_MONOOFF . . . . . . . . . . .  	L WORD	043C	DATA
IN_MONOSEG . . . . . . . . . . .  	L WORD	043E	DATA
IN_NUMCOL  . . . . . . . . . . .  	L WORD	0460	DATA
IN_NUMLEN  . . . . . . . . . . .  	L WORD	0462	DATA
IN_NUMOFF  . . . . . . . . . . .  	L WORD	0464	DATA
IN_NUMROW  . . . . . . . . . . .  	L WORD	045E	DATA
IN_NUMSEG  . . . . . . . . . . .  	L WORD	0466	DATA
IN_OPT . . . . . . . . . . . . .  	L WORD	0420	DATA
IN_RANG  . . . . . . . . . . . .  	NUMBER	0001	
IN_RESERVED  . . . . . . . . . .  	L BYTE	04A0	DATA	Length = 01C2
IN_RN  . . . . . . . . . . . . .  	NUMBER	301A	
IN_SCRCOL  . . . . . . . . . . .  	L WORD	046A	DATA
IN_SCRLEN  . . . . . . . . . . .  	L WORD	046C	DATA
IN_SCROFF  . . . . . . . . . . .  	L WORD	046E	DATA
IN_SCRROW  . . . . . . . . . . .  	L WORD	0468	DATA
IN_SCRSEG  . . . . . . . . . . .  	L WORD	0470	DATA
IN_THOUPOS . . . . . . . . . . .  	L WORD	0474	DATA
IN_THOUSEP . . . . . . . . . . .  	L BYTE	0472	DATA
IN_TRANLEN . . . . . . . . . . .  	L WORD	0436	DATA
IN_TRANOFF . . . . . . . . . . .  	L WORD	0438	DATA
IN_TRANSEG . . . . . . . . . . .  	L WORD	043A	DATA
IN_UDBCS . . . . . . . . . . . .  	NUMBER	0004	
IN_UMONO . . . . . . . . . . . .  	NUMBER	0010	
IN_UTRAN . . . . . . . . . . . .  	NUMBER	0001	
IRD_RN . . . . . . . . . . . . .  	NUMBER	3013	
IWR_RN . . . . . . . . . . . . .  	NUMBER	3012	
I_PCBVEC_SEG . . . . . . . . . .  	L NEAR	0C34	SELECT
I_PCB_SEG  . . . . . . . . . . .  	L NEAR	0C1D	SELECT
I_SCBVEC_SEG . . . . . . . . . .  	L NEAR	0C98	SELECT
I_SCB_SEG  . . . . . . . . . . .  	L NEAR	0C50	SELECT

KD_BACKSPACE . . . . . . . . . .  	V BYTE	0000	DATA	External
KEY_HELP . . . . . . . . . . . .  	NUMBER	3B00	
KEY_INDX . . . . . . . . . . . .  	NUMBER	3F00	
KEY_KEYS . . . . . . . . . . . .  	NUMBER	4300	
KEY_QUIT . . . . . . . . . . . .  	NUMBER	001B	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-17


KEY_SELT . . . . . . . . . . . .  	NUMBER	000D	
KEY_SWIT . . . . . . . . . . . .  	NUMBER	3C00	

LCD  . . . . . . . . . . . . . .  	NUMBER	0000		Communal
LEN_ALT_KYBD_ID  . . . . . . . .  	NUMBER	0003	
LFARROW  . . . . . . . . . . . .  	NUMBER	4B00	
LVB_INITED . . . . . . . . . . .  	L BYTE	0739	DATA

M1_RN  . . . . . . . . . . . . .  	NUMBER	3014	
MAJOR_VERSION  . . . . . . . . .  	NUMBER	0004	
MANAGE_HELP  . . . . . . . . . .  	N PROC	02F1	SELECT	Length = 0170
MAXNUMOBJS . . . . . . . . . . .  	NUMBER	0014	
MAX_CHDQUE . . . . . . . . . . .  	NUMBER	0002	
MAX_CLRECD . . . . . . . . . . .  	NUMBER	000C	
MAX_HELPSZ . . . . . . . . . . .  	NUMBER	2000	
MAX_MEMLVB . . . . . . . . . . .  	NUMBER	012B	
MAX_MEMPAR . . . . . . . . . . .  	NUMBER	0F7F	
MAX_NUMCHD . . . . . . . . . . .  	NUMBER	0005	
MAX_NUMPAN . . . . . . . . . . .  	NUMBER	0005	
MAX_NUM_DISKETTE . . . . . . . .  	NUMBER	0002	
MAX_PANNUM . . . . . . . . . . .  	NUMBER	0062	
MAX_PANQUE . . . . . . . . . . .  	NUMBER	0005	
MAX_RETKSZ . . . . . . . . . . .  	NUMBER	0032	
MAX_SCRNUM . . . . . . . . . . .  	NUMBER	001C	
MBEEP  . . . . . . . . . . . . .  	L FAR 	0000		External
MB_DURATION  . . . . . . . . . .  	L WORD	0684	DATA
MB_FREQUENCY . . . . . . . . . .  	L WORD	0682	DATA
MB_RN  . . . . . . . . . . . . .  	NUMBER	2400	
MEM_SIZE . . . . . . . . . . . .  	V WORD	0000		External
MENUOBJID  . . . . . . . . . . .  	NUMBER	00F7	
MG_RN  . . . . . . . . . . . . .  	NUMBER	301B	
MH00 . . . . . . . . . . . . . .  	L NEAR	0302	SELECT
MH05 . . . . . . . . . . . . . .  	L NEAR	0326	SELECT
MH10 . . . . . . . . . . . . . .  	L NEAR	0338	SELECT
MH20 . . . . . . . . . . . . . .  	L NEAR	033E	SELECT
MH22 . . . . . . . . . . . . . .  	L NEAR	0379	SELECT
MH25 . . . . . . . . . . . . . .  	L NEAR	037C	SELECT
MH30 . . . . . . . . . . . . . .  	L NEAR	0386	SELECT
MH40 . . . . . . . . . . . . . .  	L NEAR	0396	SELECT
MH50 . . . . . . . . . . . . . .  	L NEAR	03C2	SELECT
MH60 . . . . . . . . . . . . . .  	L NEAR	03E6	SELECT
MH65 . . . . . . . . . . . . . .  	L NEAR	03F6	SELECT
MH70 . . . . . . . . . . . . . .  	L NEAR	0413	SELECT
MH75 . . . . . . . . . . . . . .  	L NEAR	0423	SELECT
MH80 . . . . . . . . . . . . . .  	L NEAR	0442	SELECT
MH90 . . . . . . . . . . . . . .  	L NEAR	045C	SELECT
MHEXIT . . . . . . . . . . . . .  	L NEAR	0460	SELECT
MINOR_VERSION  . . . . . . . . .  	NUMBER	0000	
MI_RN  . . . . . . . . . . . . .  	NUMBER	3003	
MO_RN  . . . . . . . . . . . . .  	NUMBER	3002	
MRD_RN . . . . . . . . . . . . .  	NUMBER	3018	
MSG_INV_BOOT_MEDIA . . . . . . .  	NUMBER	0004	
MSG_INV_DISK_MEDIA . . . . . . .  	NUMBER	0005	
MSG_INV_DOS  . . . . . . . . . .  	NUMBER	0001	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-18


MSG_INV_INSTALL  . . . . . . . .  	NUMBER	0007	
MSG_INV_PARMS  . . . . . . . . .  	NUMBER	0006	
MSG_LOADING  . . . . . . . . . .  	NUMBER	0008	
MSG_RELOADING  . . . . . . . . .  	NUMBER	0009	
MS_RN  . . . . . . . . . . . . .  	NUMBER	1200	
MWR_RN . . . . . . . . . . . . .  	NUMBER	301C	
MX_RN  . . . . . . . . . . . . .  	NUMBER	3004	
M_DOS_EDOS_PART  . . . . . . . .  	NUMBER	0003	
M_DOS_EXISTS . . . . . . . . . .  	NUMBER	0001	
M_EDOS_EXISTS  . . . . . . . . .  	NUMBER	0002	
M_EDOS_SPACE . . . . . . . . . .  	NUMBER	0008	
M_FREE_SPACE . . . . . . . . . .  	NUMBER	0010	
M_LOGICAL_EXISTS . . . . . . . .  	NUMBER	0004	

NOCHECK  . . . . . . . . . . . .  	NUMBER	0000	
NOPANEL  . . . . . . . . . . . .  	NUMBER	0000	
NOT_PRESENT  . . . . . . . . . .  	NUMBER	0000	
NO_EDOS_BUT_SPACE  . . . . . . .  	NUMBER	0002	
NO_EDOS_SPACE  . . . . . . . . .  	NUMBER	0000	
NO_SOURCE1 . . . . . . . . . . .  	NUMBER	0001	
NUMKEYS  . . . . . . . . . . . .  	L BYTE	01E5	SELECT
NUM_DAY  . . . . . . . . . . . .  	NUMBER	001A	
NUM_EXT_DISK . . . . . . . . . .  	NUMBER	0017	
NUM_HOUR . . . . . . . . . . . .  	NUMBER	001B	
NUM_MINUTE . . . . . . . . . . .  	NUMBER	001C	
NUM_MONTH  . . . . . . . . . . .  	NUMBER	0019	
NUM_PRINTER  . . . . . . . . . .  	NUMBER	0016	
NUM_SECOND . . . . . . . . . . .  	NUMBER	001D	
NUM_YEAR . . . . . . . . . . . .  	NUMBER	0018	
NWR_RN . . . . . . . . . . . . .  	NUMBER	3019	

PANEL  . . . . . . . . . . . . .  	L FAR 	0000		External
PANELOBJID . . . . . . . . . . .  	NUMBER	00FF	
PAN_BAD_DISKET . . . . . . . . .  	NUMBER	0038	
PAN_CHOOSE_SHELL . . . . . . . .  	NUMBER	0062	
PAN_COMPLETE1  . . . . . . . . .  	NUMBER	0022	
PAN_COMPLETE2  . . . . . . . . .  	NUMBER	0022	
PAN_COMPLETE3  . . . . . . . . .  	NUMBER	0022	
PAN_CONFIG_PARS  . . . . . . . .  	NUMBER	001A	
PAN_CONFIRM  . . . . . . . . . .  	NUMBER	0003	
PAN_COUNTRY  . . . . . . . . . .  	NUMBER	0006	
PAN_CTY_KYB  . . . . . . . . . .  	NUMBER	0005	
PAN_DATE_TIME  . . . . . . . . .  	NUMBER	001E	
PAN_DEST_DRIVE . . . . . . . . .  	NUMBER	0009	
PAN_DISKCOPY . . . . . . . . . .  	NUMBER	0046	
PAN_DOS_LOC  . . . . . . . . . .  	NUMBER	000A	
PAN_DOS_PARAM  . . . . . . . . .  	NUMBER	0012	
PAN_DRIVE_ERROR  . . . . . . . .  	NUMBER	0037	
PAN_DSKCPY_CPY . . . . . . . . .  	NUMBER	0049	
PAN_DSKCPY_SRC . . . . . . . . .  	NUMBER	0047	
PAN_DSKCPY_TAR . . . . . . . . .  	NUMBER	0048	
PAN_EXP_MEMORY . . . . . . . . .  	NUMBER	0018	
PAN_EXP_MEMORY2  . . . . . . . .  	NUMBER	005E	
PAN_FASTOPEN . . . . . . . . . .  	NUMBER	0015	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-19


PAN_FIXED_BOTH . . . . . . . . .  	NUMBER	001C	
PAN_FIXED_FIRST  . . . . . . . .  	NUMBER	001B	
PAN_FORMAT . . . . . . . . . . .  	NUMBER	001F	
PAN_FUNC_DISK  . . . . . . . . .  	NUMBER	0010	
PAN_FUNC_DISKET  . . . . . . . .  	NUMBER	0010	
PAN_GRAPHICS . . . . . . . . . .  	NUMBER	0017	
PAN_HBAR . . . . . . . . . . . .  	NUMBER	0025	
PAN_HPAN . . . . . . . . . . . .  	NUMBER	0024	
PAN_INSTALL_DOS  . . . . . . . .  	NUMBER	0020	
PAN_INST_PROMPT  . . . . . . . .  	NUMBER	0020	
PAN_INTRO  . . . . . . . . . . .  	NUMBER	0002	
PAN_KEYBOARD . . . . . . . . . .  	NUMBER	0007	
PAN_KYBD_ALT . . . . . . . . . .  	NUMBER	0008	
PAN_PARALLEL . . . . . . . . . .  	NUMBER	000D	
PAN_PARTIAL  . . . . . . . . . .  	NUMBER	004A	
PAN_PRINTER  . . . . . . . . . .  	NUMBER	000B	
PAN_PRT_TYPE . . . . . . . . . .  	NUMBER	000C	
PAN_REBOOT . . . . . . . . . . .  	NUMBER	001D	
PAN_REVIEW . . . . . . . . . . .  	NUMBER	000F	
PAN_SERIAL . . . . . . . . . . .  	NUMBER	000E	
PAN_SHARE  . . . . . . . . . . .  	NUMBER	0016	
PAN_SHELL  . . . . . . . . . . .  	NUMBER	0013	
PAN_START1440  . . . . . . . . .  	NUMBER	0060	
PAN_START360 . . . . . . . . . .  	NUMBER	005A	
PAN_START720 . . . . . . . . . .  	NUMBER	005F	
PAN_VDISK  . . . . . . . . . . .  	NUMBER	0019	
PAN_WELCOME  . . . . . . . . . .  	NUMBER	0001	
PAN_WORKSPACE  . . . . . . . . .  	NUMBER	0004	
PAN_WRITE_PROT . . . . . . . . .  	NUMBER	0036	
PCB_ASC  . . . . . . . . . . . .  	NUMBER	0040	
PCB_ASZ  . . . . . . . . . . . .  	NUMBER	0020	
PCB_CMP  . . . . . . . . . . . .  	NUMBER	0002	
PCB_CRE  . . . . . . . . . . . .  	NUMBER	0001	
PCB_DBB  . . . . . . . . . . . .  	NUMBER	0200	
PCB_DLB  . . . . . . . . . . . .  	NUMBER	0400	
PCB_DRB  . . . . . . . . . . . .  	NUMBER	0800	
PCB_DSHADOW  . . . . . . . . . .  	NUMBER	1000	
PCB_DTB  . . . . . . . . . . . .  	NUMBER	0100	
PCB_EXP  . . . . . . . . . . . .  	NUMBER	0004	
PCB_LAB  . . . . . . . . . . . .  	NUMBER	0080	
PCB_LB . . . . . . . . . . . . .  	NUMBER	0010	
PCB_MXP  . . . . . . . . . . . .  	NUMBER	0008	
PCB_PELCOORD . . . . . . . . . .  	NUMBER	2000	
PCDISPQ_CALL . . . . . . . . . .  	N PROC	098F	SELECT	Global	Length = 0010
PCGVIDO_CALL . . . . . . . . . .  	N PROC	0AAF	SELECT	Global	Length = 0010
PCHLPRD_CALL . . . . . . . . . .  	N PROC	0A6A	SELECT	Length = 0022
PCINCHA_CALL . . . . . . . . . .  	N PROC	0979	SELECT	Length = 0016
PCINPUT_CALL . . . . . . . . . .  	N PROC	0A9C	SELECT	Global	Length = 0013
PCINSTR_CALL . . . . . . . . . .  	N PROC	0A8C	SELECT	Length = 0010
PCMBEEP_CALL . . . . . . . . . .  	N PROC	0A13	SELECT	Global	Length = 0010
PCPANEL_CALL . . . . . . . . . .  	N PROC	099F	SELECT	Global	Length = 0074
PCSLCTP_CALL . . . . . . . . . .  	N PROC	0A23	SELECT	Global	Length = 0047
PCWWRAP_CALL . . . . . . . . . .  	N PROC	0ABF	SELECT	Length = 0010
PGDN . . . . . . . . . . . . . .  	NUMBER	0051	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-20


PGUP . . . . . . . . . . . . . .  	NUMBER	0049	
PH10 . . . . . . . . . . . . . .  	L NEAR	06E4	SELECT
PHEXIT . . . . . . . . . . . . .  	L NEAR	0739	SELECT
PM_ACTIVEPAN . . . . . . . . . .  	L WORD	0251	DATA
PM_BASEATTR  . . . . . . . . . .  	L BYTE	0254	DATA	Global
PM_BASECHAR  . . . . . . . . . .  	L BYTE	0253	DATA	Global
PM_BK  . . . . . . . . . . . . .  	NUMBER	0004	
PM_CCBVECNUM . . . . . . . . . .  	L WORD	0267	DATA
PM_CCBVECOFF . . . . . . . . . .  	L WORD	0269	DATA
PM_CCBVECSEG . . . . . . . . . .  	L WORD	026B	DATA
PM_CHDQUENUM . . . . . . . . . .  	L WORD	025B	DATA
PM_CHDQUEOFF . . . . . . . . . .  	L WORD	025D	DATA
PM_CHDQUESEG . . . . . . . . . .  	L WORD	025F	DATA
PM_CHDTAB  . . . . . . . . . . .  	NUMBER	0008	
PM_CL  . . . . . . . . . . . . .  	NUMBER	0008	
PM_COLORX  . . . . . . . . . . .  	NUMBER	0010	
PM_DOA . . . . . . . . . . . . .  	NUMBER	0010	
PM_DOQ . . . . . . . . . . . . .  	NUMBER	0040	
PM_DOV . . . . . . . . . . . . .  	NUMBER	0020	
PM_ERROR . . . . . . . . . . . .  	L WORD	027D	DATA
PM_LVBLEN  . . . . . . . . . . .  	L WORD	026D	DATA
PM_LVBOFF  . . . . . . . . . . .  	L WORD	026F	DATA
PM_LVBSEG  . . . . . . . . . . .  	L WORD	0271	DATA
PM_LVBWIDTH  . . . . . . . . . .  	L WORD	0273	DATA
PM_OPT1  . . . . . . . . . . . .  	L WORD	0249	DATA
PM_PANBRKID  . . . . . . . . . .  	L WORD	024F	DATA
PM_PANBRKOFF . . . . . . . . . .  	L WORD	024D	DATA
PM_PANPDQ  . . . . . . . . . . .  	NUMBER	0001	
PM_PANPDQNUM . . . . . . . . . .  	L WORD	024B	DATA
PM_PANQUENUM . . . . . . . . . .  	L WORD	0255	DATA
PM_PANQUEOFF . . . . . . . . . .  	L WORD	0257	DATA
PM_PANQUESEG . . . . . . . . . .  	L WORD	0259	DATA
PM_PCBVEC  . . . . . . . . . . .  	NUMBER	0002	
PM_PCBVECNUM . . . . . . . . . .  	L WORD	0261	DATA
PM_PCBVECOFF . . . . . . . . . .  	L WORD	0263	DATA
PM_PCBVECSEG . . . . . . . . . .  	L WORD	0265	DATA
PM_REFVECNUM . . . . . . . . . .  	L WORD	0277	DATA
PM_REFVECOFF . . . . . . . . . .  	L WORD	0279	DATA
PM_REFVECSEG . . . . . . . . . .  	L WORD	027B	DATA
PM_RESERVED  . . . . . . . . . .  	L BYTE	027F	DATA	Length = 01A1
PM_RF  . . . . . . . . . . . . .  	NUMBER	0001	
PM_RN  . . . . . . . . . . . . .  	NUMBER	2103	
PM_SRF . . . . . . . . . . . . .  	NUMBER	0002	
PM_TRANS_A . . . . . . . . . . .  	L BYTE	0276	DATA
PM_TRANS_C . . . . . . . . . . .  	L BYTE	0275	DATA
PM_UNKNPANS  . . . . . . . . . .  	NUMBER	0004	
PP05 . . . . . . . . . . . . . .  	L NEAR	09D7	SELECT
PP06 . . . . . . . . . . . . . .  	L NEAR	09D4	SELECT
PP10 . . . . . . . . . . . . . .  	L NEAR	09EA	SELECT
PP20 . . . . . . . . . . . . . .  	L NEAR	09EF	SELECT
PPEXIT . . . . . . . . . . . . .  	L NEAR	0A12	SELECT
PRD_APPEND . . . . . . . . . . .  	NUMBER	0004	
PRD_BUFLEN . . . . . . . . . . .  	L WORD	0187	DATA
PRD_BUFOFF . . . . . . . . . . .  	L WORD	0189	DATA
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-21


PRD_BUFSEG . . . . . . . . . . .  	L WORD	018B	DATA
PRD_BUFSIZE  . . . . . . . . . .  	NUMBER	0001	
PRD_DOSERROR . . . . . . . . . .  	L WORD	019F	DATA
PRD_ERROR  . . . . . . . . . . .  	L WORD	019D	DATA
PRD_FILSPELEN  . . . . . . . . .  	L WORD	018F	DATA
PRD_FILSPEOFF  . . . . . . . . .  	L WORD	0191	DATA
PRD_FILSPESEG  . . . . . . . . .  	L WORD	0193	DATA
PRD_ID . . . . . . . . . . . . .  	L WORD	018D	DATA
PRD_INITIAL  . . . . . . . . . .  	NUMBER	0001	
PRD_MAXNUMPAN  . . . . . . . . .  	L WORD	019B	DATA
PRD_NOINITIAL  . . . . . . . . .  	NUMBER	0010	
PRD_NOPANELID  . . . . . . . . .  	NUMBER	0020	
PRD_NOPANELS . . . . . . . . . .  	NUMBER	0002	
PRD_NOTCASFILE . . . . . . . . .  	NUMBER	0004	
PRD_OPT1 . . . . . . . . . . . .  	L WORD	0185	DATA
PRD_PANELSFULL . . . . . . . . .  	NUMBER	0008	
PRD_PCBVECNUM  . . . . . . . . .  	L WORD	0195	DATA
PRD_PCBVECOFF  . . . . . . . . .  	L WORD	0197	DATA
PRD_PCBVECSEG  . . . . . . . . .  	L WORD	0199	DATA
PRD_READALL  . . . . . . . . . .  	NUMBER	0008	
PRD_READONE  . . . . . . . . . .  	NUMBER	0002	
PRD_RESERVED . . . . . . . . . .  	L BYTE	01A1	DATA	Length = 0030
PRD_RN . . . . . . . . . . . . .  	NUMBER	210A	
PRD_SIZEMALL . . . . . . . . . .  	NUMBER	0010	
PREPARE_PANEL_CALL . . . . . . .  	L NEAR	0000		External
PRESENT_WITHOUT_PART . . . . . .  	NUMBER	0001	
PRESENT_WITH_PART  . . . . . . .  	NUMBER	0002	
PROCESS_HELP . . . . . . . . . .  	N PROC	06AA	SELECT	Length = 00A3
PT_BK  . . . . . . . . . . . . .  	NUMBER	0001	
PT_SRF . . . . . . . . . . . . .  	NUMBER	0002	
PWR_RN . . . . . . . . . . . . .  	NUMBER	2106	

QM_ACTIVEPAN . . . . . . . . . .  	L WORD	01D7	DATA	Global
QM_BREAKOFF  . . . . . . . . . .  	NUMBER	0002	
QM_BREAKON . . . . . . . . . . .  	NUMBER	0001	
QM_BUFLEN  . . . . . . . . . . .  	L WORD	01ED	DATA
QM_BUFOFF  . . . . . . . . . . .  	L WORD	01EF	DATA
QM_BUFSEG  . . . . . . . . . . .  	L WORD	01F1	DATA
QM_CHDQUENUM . . . . . . . . . .  	L WORD	01F9	DATA
QM_CHDQUEOFF . . . . . . . . . .  	L WORD	01FB	DATA
QM_CHDQUESEG . . . . . . . . . .  	L WORD	01FD	DATA
QM_CLSCHD  . . . . . . . . . . .  	NUMBER	0800	
QM_CLSPAN  . . . . . . . . . . .  	NUMBER	1000	
QM_COLOROVER . . . . . . . . . .  	L WORD	01D9	DATA
QM_COLUMOVER . . . . . . . . . .  	L WORD	01DD	DATA
QM_ERRBU . . . . . . . . . . . .  	NUMBER	0040	
QM_ERRCN . . . . . . . . . . . .  	NUMBER	0100	
QM_ERRMC . . . . . . . . . . . .  	NUMBER	0002	
QM_ERRMCQ  . . . . . . . . . . .  	NUMBER	0008	
QM_ERRMP . . . . . . . . . . . .  	NUMBER	0001	
QM_ERRMPQ  . . . . . . . . . . .  	NUMBER	0004	
QM_ERROC . . . . . . . . . . . .  	NUMBER	0020	
QM_ERROP . . . . . . . . . . . .  	NUMBER	0010	
QM_ERROR . . . . . . . . . . . .  	L WORD	0205	DATA
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-22


QM_ERRPN . . . . . . . . . . . .  	NUMBER	0080	
QM_ID  . . . . . . . . . . . . .  	L WORD	01D5	DATA	Global
QM_INIT  . . . . . . . . . . . .  	NUMBER	0001	
QM_MAXCHDQUE . . . . . . . . . .  	L WORD	01DF	DATA
QM_MAXNUMCHD . . . . . . . . . .  	L WORD	01E3	DATA
QM_MAXNUMPAN . . . . . . . . . .  	L WORD	01E5	DATA
QM_MAXPANQUE . . . . . . . . . .  	L WORD	01E1	DATA
QM_OPT1  . . . . . . . . . . . .  	L WORD	01D1	DATA	Global
QM_OPT2  . . . . . . . . . . . .  	L WORD	01D3	DATA	Global
QM_PANQUENUM . . . . . . . . . .  	L WORD	01F3	DATA
QM_PANQUEOFF . . . . . . . . . .  	L WORD	01F5	DATA
QM_PANQUESEG . . . . . . . . . .  	L WORD	01F7	DATA
QM_PCBVECNUM . . . . . . . . . .  	L WORD	01E7	DATA
QM_PCBVECOFF . . . . . . . . . .  	L WORD	01E9	DATA
QM_PCBVECSEG . . . . . . . . . .  	L WORD	01EB	DATA
QM_POPCHD  . . . . . . . . . . .  	NUMBER	0008	
QM_POPCQU  . . . . . . . . . . .  	NUMBER	0100	
QM_POPPAN  . . . . . . . . . . .  	NUMBER	0040	
QM_POPPQU  . . . . . . . . . . .  	NUMBER	0400	
QM_PUSHCHD . . . . . . . . . . .  	NUMBER	0002	
QM_PUSHCQU . . . . . . . . . . .  	NUMBER	0080	
QM_PUSHPAN . . . . . . . . . . .  	NUMBER	0010	
QM_PUSHPQU . . . . . . . . . . .  	NUMBER	0200	
QM_RESERVED  . . . . . . . . . .  	L BYTE	0207	DATA	Length = 0042
QM_RETKEYSLEN  . . . . . . . . .  	L WORD	01FF	DATA
QM_RETKEYSOFF  . . . . . . . . .  	L WORD	0201	DATA
QM_RETKEYSSEG  . . . . . . . . .  	L WORD	0203	DATA
QM_RN  . . . . . . . . . . . . .  	NUMBER	2111	
QM_ROWOVER . . . . . . . . . . .  	L WORD	01DB	DATA
QM_RVMCHD  . . . . . . . . . . .  	NUMBER	0004	
QM_RVMPAN  . . . . . . . . . . .  	NUMBER	0020	
QM_SRFOFF  . . . . . . . . . . .  	NUMBER	0008	
QM_SRFON . . . . . . . . . . . .  	NUMBER	0004	

READ_HELP  . . . . . . . . . . .  	N PROC	0461	SELECT	Length = 0249
REFRESH_FLDS . . . . . . . . . .  	N PROC	0841	SELECT	Length = 0074
REFRESH_ICB  . . . . . . . . . .  	N PROC	08EE	SELECT	Length = 0063
REFRESH_SCB  . . . . . . . . . .  	N PROC	08B5	SELECT	Length = 0039
REMOVE_HELP  . . . . . . . . . .  	N PROC	079E	SELECT	Length = 0028
REPCHAR  . . . . . . . . . . . .  	NUMBER	00FF	
RESTORE_INT_24 . . . . . . . . .  	L FAR 	0000		External
RF10 . . . . . . . . . . . . . .  	L NEAR	0853	SELECT
RF20 . . . . . . . . . . . . . .  	L NEAR	0860	SELECT
RF30 . . . . . . . . . . . . . .  	L NEAR	0884	SELECT
RF40 . . . . . . . . . . . . . .  	L NEAR	0888	SELECT
RF50 . . . . . . . . . . . . . .  	L NEAR	089D	SELECT
RF60 . . . . . . . . . . . . . .  	L NEAR	08AC	SELECT
RFEXIT . . . . . . . . . . . . .  	L NEAR	08AE	SELECT
RH05 . . . . . . . . . . . . . .  	L NEAR	047C	SELECT
RH06 . . . . . . . . . . . . . .  	L NEAR	0481	SELECT
RH07 . . . . . . . . . . . . . .  	L NEAR	04BC	SELECT
RH10 . . . . . . . . . . . . . .  	L NEAR	0534	SELECT
RH15 . . . . . . . . . . . . . .  	L NEAR	059C	SELECT
RH20 . . . . . . . . . . . . . .  	L NEAR	05AF	SELECT
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-23


RH30 . . . . . . . . . . . . . .  	L NEAR	05C2	SELECT
RH40 . . . . . . . . . . . . . .  	L NEAR	05D5	SELECT
RH50 . . . . . . . . . . . . . .  	L NEAR	0657	SELECT
RHEXIT . . . . . . . . . . . . .  	L NEAR	06A2	SELECT
RM20 . . . . . . . . . . . . . .  	L NEAR	07BD	SELECT
RMEXIT . . . . . . . . . . . . .  	L NEAR	07C3	SELECT
RSEXIT . . . . . . . . . . . . .  	L NEAR	08EB	SELECT
RTARROW  . . . . . . . . . . . .  	NUMBER	4D00	

S2I_RN . . . . . . . . . . . . .  	NUMBER	300E	
SCB_ACTIVEON . . . . . . . . . .  	NUMBER	0002	
SCB_AHIGH  . . . . . . . . . . .  	NUMBER	8000	
SCB_CFO  . . . . . . . . . . . .  	NUMBER	0008	
SCB_CHIGH  . . . . . . . . . . .  	NUMBER	0010	
SCB_CPHY . . . . . . . . . . . .  	NUMBER	0800	
SCB_CS . . . . . . . . . . . . .  	NUMBER	0001	
SCB_DACTIVE  . . . . . . . . . .  	NUMBER	4000	
SCB_DBCS . . . . . . . . . . . .  	NUMBER	0800	
SCB_DCHECK . . . . . . . . . . .  	NUMBER	2000	
SCB_DPOINT . . . . . . . . . . .  	NUMBER	8000	
SCB_DYN  . . . . . . . . . . . .  	NUMBER	0200	
SCB_EXCSING  . . . . . . . . . .  	NUMBER	0004	
SCB_FINDE  . . . . . . . . . . .  	NUMBER	0040	
SCB_FM . . . . . . . . . . . . .  	NUMBER	0400	
SCB_FRAL . . . . . . . . . . . .  	NUMBER	0008	
SCB_FRBF . . . . . . . . . . . .  	NUMBER	0004	
SCB_IPAGE  . . . . . . . . . . .  	NUMBER	0020	
SCB_LANDR  . . . . . . . . . . .  	NUMBER	0400	
SCB_LCOX . . . . . . . . . . . .  	NUMBER	0010	
SCB_LL . . . . . . . . . . . . .  	NUMBER	0010	
SCB_LVBOVR . . . . . . . . . . .  	NUMBER	0200	
SCB_MON  . . . . . . . . . . . .  	NUMBER	0400	
SCB_NUML . . . . . . . . . . . .  	NUMBER	1000	
SCB_NUMS . . . . . . . . . . . .  	NUMBER	0020	
SCB_NUMUIND  . . . . . . . . . .  	NUMBER	0008	
SCB_PM1  . . . . . . . . . . . .  	NUMBER	0040	
SCB_RD . . . . . . . . . . . . .  	NUMBER	0040	
SCB_RELSCR . . . . . . . . . . .  	NUMBER	0100	
SCB_RELUIND  . . . . . . . . . .  	NUMBER	0080	
SCB_RN . . . . . . . . . . . . .  	NUMBER	2105	
SCB_ROTN . . . . . . . . . . . .  	NUMBER	0002	
SCB_RUK  . . . . . . . . . . . .  	NUMBER	0080	
SCB_SELACT . . . . . . . . . . .  	NUMBER	0001	
SCB_SELECTON . . . . . . . . . .  	NUMBER	0001	
SCB_SELEXC . . . . . . . . . . .  	NUMBER	0002	
SCB_SHIGH  . . . . . . . . . . .  	NUMBER	4000	
SCB_SKIP . . . . . . . . . . . .  	NUMBER	2000	
SCB_SKIPON . . . . . . . . . . .  	NUMBER	0004	
SCB_TBL  . . . . . . . . . . . .  	NUMBER	1000	
SCB_TRN  . . . . . . . . . . . .  	NUMBER	0200	
SCB_UC . . . . . . . . . . . . .  	NUMBER	0001	
SCB_UET  . . . . . . . . . . . .  	NUMBER	0004	
SCB_UI . . . . . . . . . . . . .  	NUMBER	0100	
SCB_UIND . . . . . . . . . . . .  	NUMBER	0080	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-24


SCB_UKS  . . . . . . . . . . . .  	NUMBER	0020	
SCB_UNCA . . . . . . . . . . . .  	NUMBER	0100	
SCB_WRAP . . . . . . . . . . . .  	NUMBER	0002	
SCROLLOBJID  . . . . . . . . . .  	NUMBER	00FA	
SCR_ACC_CTY  . . . . . . . . . .  	NUMBER	0017	
SCR_ACC_KYB  . . . . . . . . . .  	NUMBER	0018	
SCR_ACC_PRT  . . . . . . . . . .  	NUMBER	0019	
SCR_CHOOSE_SHELL . . . . . . . .  	NUMBER	001C	
SCR_CONTEXT_HLP  . . . . . . . .  	NUMBER	0015	
SCR_COPY_DEST  . . . . . . . . .  	NUMBER	001A	
SCR_CTY_1  . . . . . . . . . . .  	NUMBER	0003	
SCR_CTY_2  . . . . . . . . . . .  	NUMBER	0004	
SCR_CTY_KYB  . . . . . . . . . .  	NUMBER	0002	
SCR_DEST_A_C . . . . . . . . . .  	NUMBER	001B	
SCR_DEST_B_C . . . . . . . . . .  	NUMBER	000A	
SCR_DOS_SUPPORT  . . . . . . . .  	NUMBER	0001	
SCR_FIXED_BOTH . . . . . . . . .  	NUMBER	0013	
SCR_FIXED_FIRST  . . . . . . . .  	NUMBER	0012	
SCR_FORMAT . . . . . . . . . . .  	NUMBER	0014	
SCR_FR_KYB . . . . . . . . . . .  	NUMBER	0007	
SCR_FUNC_DISK  . . . . . . . . .  	NUMBER	0010	
SCR_FUNC_DISKET  . . . . . . . .  	NUMBER	0011	
SCR_INDEX_HLP  . . . . . . . . .  	NUMBER	0015	
SCR_IT_KYB . . . . . . . . . . .  	NUMBER	0008	
SCR_KYB_1  . . . . . . . . . . .  	NUMBER	0005	
SCR_KYB_2  . . . . . . . . . . .  	NUMBER	0006	
SCR_PARALLEL . . . . . . . . . .  	NUMBER	000C	
SCR_PRT_REDIR  . . . . . . . . .  	NUMBER	000E	
SCR_PRT_TYPE . . . . . . . . . .  	NUMBER	000B	
SCR_REVIEW . . . . . . . . . . .  	NUMBER	000F	
SCR_SERIAL . . . . . . . . . . .  	NUMBER	000D	
SCR_TITLE_HLP  . . . . . . . . .  	NUMBER	0016	
SCR_UK_KYB . . . . . . . . . . .  	NUMBER	0009	
SEARCH_FILE  . . . . . . . . . .  	V WORD	0000		External
SET_NUMKEYS  . . . . . . . . . .  	N PROC	01EE	SELECT	Length = 0063
SET_RETKEYS  . . . . . . . . . .  	N PROC	019A	SELECT	Length = 004B
SF_RN  . . . . . . . . . . . . .  	NUMBER	2107	
SK_RN  . . . . . . . . . . . . .  	NUMBER	1102	
SLCTP  . . . . . . . . . . . . .  	L FAR 	0000		External
SMODE  . . . . . . . . . . . . .  	NUMBER	0002	
SM_RN  . . . . . . . . . . . . .  	NUMBER	300D	
SND_DURA . . . . . . . . . . . .  	NUMBER	9C40	
SND_FREQ . . . . . . . . . . . .  	NUMBER	01B8	
SNK_30 . . . . . . . . . . . . .  	L NEAR	0249	SELECT
SNR_10 . . . . . . . . . . . . .  	L NEAR	0217	SELECT
SNR_15 . . . . . . . . . . . . .  	L NEAR	0220	SELECT
SNR_20 . . . . . . . . . . . . .  	L NEAR	022C	SELECT
SOURCE1  . . . . . . . . . . . .  	NUMBER	0000	
SO_RN  . . . . . . . . . . . . .  	NUMBER	2105	
SPACE  . . . . . . . . . . . . .  	NUMBER	0020	
SRD_ALLOCRES . . . . . . . . . .  	NUMBER	0010	
SRD_APPEND . . . . . . . . . . .  	NUMBER	0004	
SRD_BUFLEN . . . . . . . . . . .  	L WORD	00DF	DATA
SRD_BUFOFF . . . . . . . . . . .  	L WORD	00E1	DATA
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-25


SRD_BUFSEG . . . . . . . . . . .  	L WORD	00E3	DATA
SRD_BUFSIZE  . . . . . . . . . .  	NUMBER	0001	
SRD_DOSERROR . . . . . . . . . .  	L WORD	00F5	DATA
SRD_ERROR  . . . . . . . . . . .  	L WORD	00F3	DATA
SRD_FIELDSFULL . . . . . . . . .  	NUMBER	0008	
SRD_FILSPEOFF  . . . . . . . . .  	L WORD	00E7	DATA
SRD_FILSPESEG  . . . . . . . . .  	L WORD	00E9	DATA
SRD_ID . . . . . . . . . . . . .  	L WORD	00E5	DATA
SRD_INITIAL  . . . . . . . . . .  	NUMBER	0001	
SRD_MAXNUMSCB  . . . . . . . . .  	L WORD	00F1	DATA
SRD_NOFIELDID  . . . . . . . . .  	NUMBER	0020	
SRD_NOFIELDS . . . . . . . . . .  	NUMBER	0002	
SRD_NOINITIAL  . . . . . . . . .  	NUMBER	0010	
SRD_NOTCASFILE . . . . . . . . .  	NUMBER	0004	
SRD_OPT1 . . . . . . . . . . . .  	L WORD	00DD	DATA
SRD_READALL  . . . . . . . . . .  	NUMBER	0008	
SRD_READONE  . . . . . . . . . .  	NUMBER	0002	
SRD_RESERVED . . . . . . . . . .  	L BYTE	00F7	DATA	Length = 0032
SRD_RN . . . . . . . . . . . . .  	NUMBER	210D	
SRD_SCBVECNUM  . . . . . . . . .  	L WORD	00EB	DATA
SRD_SCBVECOFF  . . . . . . . . .  	L WORD	00ED	DATA
SRD_SCBVECSEG  . . . . . . . . .  	L WORD	00EF	DATA
SRK30  . . . . . . . . . . . . .  	L NEAR	01DE	SELECT
SSC_PTSB . . . . . . . . . . . .  	NUMBER	0002	
SSC_RN . . . . . . . . . . . . .  	NUMBER	300A	
SSC_SBE  . . . . . . . . . . . .  	NUMBER	0002	
SSC_SBTC . . . . . . . . . . . .  	NUMBER	0020	
SSC_SLSB . . . . . . . . . . . .  	NUMBER	0010	
SSC_TBSL . . . . . . . . . . . .  	NUMBER	0001	
SSC_VTASO  . . . . . . . . . . .  	NUMBER	0008	
SSC_VTE  . . . . . . . . . . . .  	NUMBER	0001	
SSC_VTSAO  . . . . . . . . . . .  	NUMBER	0004	
SS_RN  . . . . . . . . . . . . .  	NUMBER	3005	
STDERR . . . . . . . . . . . . .  	NUMBER	0002	
STDOUT . . . . . . . . . . . . .  	NUMBER	0001	
STR_BREAK  . . . . . . . . . . .  	NUMBER	000E	
STR_BUFFERS  . . . . . . . . . .  	NUMBER	000F	
STR_DEF_CP . . . . . . . . . . .  	NUMBER	001E	
STR_DOS_APPEND . . . . . . . . .  	NUMBER	0004	
STR_DOS_APPEND_P . . . . . . . .  	NUMBER	0010	
STR_DOS_LOC  . . . . . . . . . .  	NUMBER	0001	
STR_DOS_PATH . . . . . . . . . .  	NUMBER	0003	
STR_DOS_PROMPT . . . . . . . . .  	NUMBER	0005	
STR_EXT_PARMS  . . . . . . . . .  	NUMBER	0002	
STR_FASTOPEN . . . . . . . . . .  	NUMBER	0008	
STR_FCBS . . . . . . . . . . . .  	NUMBER	0011	
STR_FILES  . . . . . . . . . . .  	NUMBER	0012	
STR_GRAPHICS . . . . . . . . . .  	NUMBER	000A	
STR_KSAM . . . . . . . . . . . .  	NUMBER	0007	
STR_LASTDRIVE  . . . . . . . . .  	NUMBER	0013	
STR_SHARE  . . . . . . . . . . .  	NUMBER	0009	
STR_SHELL  . . . . . . . . . . .  	NUMBER	0006	
STR_STACKS . . . . . . . . . . .  	NUMBER	0014	
STR_SWISS_KEYB . . . . . . . . .  	NUMBER	001F	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-26


STR_VDISK  . . . . . . . . . . .  	NUMBER	000D	
STR_VERIFY . . . . . . . . . . .  	NUMBER	0015	
STR_XMA2EMS  . . . . . . . . . .  	NUMBER	000C	
STR_XMAEM  . . . . . . . . . . .  	NUMBER	000B	
SUB_COMP_KYS_1 . . . . . . . . .  	NUMBER	002F	
SUB_COMP_KYS_1C  . . . . . . . .  	NUMBER	0023	
SUB_COMP_KYS_2 . . . . . . . . .  	NUMBER	0030	
SUB_COMP_KYS_3 . . . . . . . . .  	NUMBER	005B	
SUB_COMP_REP . . . . . . . . . .  	NUMBER	0035	
SUB_COMP_VER . . . . . . . . . .  	NUMBER	002E	
SUB_CONT_OPTION  . . . . . . . .  	NUMBER	0026	
SUB_COPYING  . . . . . . . . . .  	NUMBER	0050	
SUB_FIXED_1  . . . . . . . . . .  	NUMBER	0029	
SUB_INSTALL_1  . . . . . . . . .  	NUMBER	002C	
SUB_INSTALL_2  . . . . . . . . .  	NUMBER	002D	
SUB_INSTALL_COPY . . . . . . . .  	NUMBER	005C	
SUB_INS_INSTALL_360  . . . . . .  	NUMBER	0055	
SUB_INS_MSSHELL_A  . . . . . . .  	NUMBER	0064	
SUB_INS_OPER2  . . . . . . . . .  	NUMBER	005D	
SUB_INS_OP_WORK  . . . . . . . .  	NUMBER	0066	
SUB_INS_SHELL_DISKS  . . . . . .  	NUMBER	0065	
SUB_INS_SHELL_S360 . . . . . . .  	NUMBER	0058	
SUB_INS_STARTT_S360  . . . . . .  	NUMBER	0059	
SUB_INS_START_360  . . . . . . .  	NUMBER	0054	
SUB_INS_START_B  . . . . . . . .  	NUMBER	003A	
SUB_INS_WORK1_360  . . . . . . .  	NUMBER	0051	
SUB_INS_WORK1_S360 . . . . . . .  	NUMBER	0056	
SUB_INS_WORK2_360  . . . . . . .  	NUMBER	0052	
SUB_INS_WORK2_S360 . . . . . . .  	NUMBER	0057	
SUB_INS_WORK3_360  . . . . . . .  	NUMBER	0053	
SUB_INS_WORK3_A  . . . . . . . .  	NUMBER	0067	
SUB_INS_WORKING_A  . . . . . . .  	NUMBER	0063	
SUB_LOG_DRIVE  . . . . . . . . .  	NUMBER	002A	
SUB_PRINTER_1  . . . . . . . . .  	NUMBER	0027	
SUB_REBOOT_KEYS  . . . . . . . .  	NUMBER	002B	
SUB_REM_DOS_A  . . . . . . . . .  	NUMBER	003D	
SUB_REM_SELECT_360 . . . . . . .  	NUMBER	004E	
SUB_REM_SEL_A  . . . . . . . . .  	NUMBER	003B	
SUB_REM_SHELL_360  . . . . . . .  	NUMBER	004D	
SUB_REM_START_B  . . . . . . . .  	NUMBER	003C	
SUB_REM_UTIL1_360  . . . . . . .  	NUMBER	004F	
SV_RN  . . . . . . . . . . . . .  	NUMBER	2104	
SWR_RN . . . . . . . . . . . . .  	NUMBER	210E	

TAB  . . . . . . . . . . . . . .  	NUMBER	0009	
TABLE_ONE  . . . . . . . . . . .  	NUMBER	0001	
TABLE_TWO  . . . . . . . . . . .  	NUMBER	0002	
TMS_RN . . . . . . . . . . . . .  	NUMBER	4002	
TRANSOBJID . . . . . . . . . . .  	NUMBER	00F9	
TRUE . . . . . . . . . . . . . .  	NUMBER	0001	

UPARROW  . . . . . . . . . . . .  	NUMBER	4800	
USE_DEFAULT  . . . . . . . . . .  	NUMBER	0000	

Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-27


VECOFFLEN  . . . . . . . . . . .  	NUMBER	0002	
VECSEGLEN  . . . . . . . . . . .  	NUMBER	0002	

WN_RN  . . . . . . . . . . . . .  	NUMBER	3007	
WR_CLRBUF  . . . . . . . . . . .  	L BYTE	06C9	DATA
WR_CLRLEN  . . . . . . . . . . .  	NUMBER	000B	
WR_CRETLEN . . . . . . . . . . .  	L WORD	0692	DATA
WR_CRETOFF . . . . . . . . . . .  	L WORD	0694	DATA
WR_CRETSEG . . . . . . . . . . .  	L WORD	0696	DATA
WR_DATA2LEN  . . . . . . . . . .  	L WORD	071B	DATA	Global
WR_DATA2OFF  . . . . . . . . . .  	L WORD	0719	DATA	Global
WR_DATA2SEG  . . . . . . . . . .  	L WORD	0717	DATA	Global
WR_DRETLEN . . . . . . . . . . .  	L WORD	068C	DATA	Global
WR_DRETOFF . . . . . . . . . . .  	L WORD	068E	DATA	Global
WR_DRETSEG . . . . . . . . . . .  	L WORD	0690	DATA	Global
WR_ERROR . . . . . . . . . . . .  	L WORD	0715	DATA	Global
WR_HCBCONT . . . . . . . . . . .  	L WORD	06A2	DATA	Global
WR_HCBHELP . . . . . . . . . . .  	L WORD	06A4	DATA
WR_HCBKEYS . . . . . . . . . . .  	L WORD	06A6	DATA
WR_HLPBUF  . . . . . . . . . . .  	L BYTE	06D4	DATA
WR_HLPCOL  . . . . . . . . . . .  	L WORD	06A0	DATA
WR_HLPDIS  . . . . . . . . . . .  	L WORD	069C	DATA
WR_HLPLEN  . . . . . . . . . . .  	NUMBER	000B	
WR_HLPOPT  . . . . . . . . . . .  	L WORD	0698	DATA	Global
WR_HLPPAN  . . . . . . . . . . .  	L WORD	069A	DATA
WR_HLPROW  . . . . . . . . . . .  	L WORD	069E	DATA	Global
WR_ICBID . . . . . . . . . . . .  	L WORD	0686	DATA
WR_ICBVEC  . . . . . . . . . . .  	V WORD	0000	DATA	External
WR_ICBVECOFF . . . . . . . . . .  	L WORD	0688	DATA
WR_ICBVECSEG . . . . . . . . . .  	L WORD	068A	DATA
WR_KEYHELP . . . . . . . . . . .  	L WORD	06BC	DATA
WR_KEYINDX . . . . . . . . . . .  	L WORD	06C0	DATA
WR_KEYKEYS . . . . . . . . . . .  	L WORD	06C2	DATA
WR_KEYQUIT . . . . . . . . . . .  	L WORD	06C6	DATA
WR_KEYSELT . . . . . . . . . . .  	L WORD	06C4	DATA
WR_KEYSWIT . . . . . . . . . . .  	L WORD	06BE	DATA
WR_LVBLEN  . . . . . . . . . . .  	L WORD	0721	DATA	Global
WR_LVBMEM  . . . . . . . . . . .  	L WORD	0723	DATA	Global
WR_LVBOFF  . . . . . . . . . . .  	L WORD	071F	DATA	Global
WR_LVBSEG  . . . . . . . . . . .  	L WORD	071D	DATA	Global
WR_MAXCHDQUE . . . . . . . . . .  	L WORD	072F	DATA
WR_MAXCLRECD . . . . . . . . . .  	L WORD	0737	DATA
WR_MAXHELPSZ . . . . . . . . . .  	L WORD	0729	DATA	Global
WR_MAXMEMPAR . . . . . . . . . .  	L WORD	0725	DATA	Global
WR_MAXNUMCHD . . . . . . . . . .  	L WORD	0733	DATA
WR_MAXNUMPAN . . . . . . . . . .  	L WORD	0735	DATA
WR_MAXPANNUM . . . . . . . . . .  	L WORD	072B	DATA
WR_MAXPANQUE . . . . . . . . . .  	L WORD	0731	DATA
WR_MAXREFID  . . . . . . . . . .  	NUMBER	0014		Global
WR_MAXRETKSZ . . . . . . . . . .  	L WORD	0727	DATA
WR_MAXSCRNUM . . . . . . . . . .  	L WORD	072D	DATA
WR_PANBUF  . . . . . . . . . . .  	L BYTE	06C9	DATA
WR_PANLEN  . . . . . . . . . . .  	NUMBER	000B	
WR_PCBENTR . . . . . . . . . . .  	L WORD	06B8	DATA
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-28


WR_PCBERROR  . . . . . . . . . .  	L WORD	06BA	DATA
WR_PCBHELP . . . . . . . . . . .  	L WORD	06AC	DATA
WR_PCBHPAN . . . . . . . . . . .  	L WORD	06B4	DATA
WR_PCBINDX . . . . . . . . . . .  	L WORD	06B0	DATA
WR_PCBKEYS . . . . . . . . . . .  	L WORD	06B2	DATA
WR_PCBQUIT . . . . . . . . . . .  	L WORD	06B6	DATA
WR_PCBSWIT . . . . . . . . . . .  	L WORD	06AE	DATA
WR_REFBUF  . . . . . . . . . . .  	L WORD	06E7	DATA	Global
WR_REFCNT  . . . . . . . . . . .  	L WORD	06E5	DATA	Global
WR_REFID . . . . . . . . . . . .  	L WORD	06EB	DATA	Global
WR_REFIELDCNT  . . . . . . . . .  	L WORD	06E9	DATA	Global
WR_REFNUM  . . . . . . . . . . .  	L WORD	06DF	DATA	Global
WR_REFOFF  . . . . . . . . . . .  	L WORD	06E1	DATA	Global
WR_REFSEG  . . . . . . . . . . .  	L WORD	06E3	DATA	Global
WR_RETHLPBUF . . . . . . . . . .  	L BYTE	06C8	DATA
WR_RETHLPLEN . . . . . . . . . .  	NUMBER	0001	
WR_SCBCONT . . . . . . . . . . .  	L WORD	06A8	DATA
WR_SCBID . . . . . . . . . . . .  	L WORD	0713	DATA	Global
WR_SCBINDX . . . . . . . . . . .  	L WORD	06AA	DATA
WR_SCRBUF  . . . . . . . . . . .  	L BYTE	06C9	DATA
WR_SCRLEN  . . . . . . . . . . .  	NUMBER	000B	
WWP_BUFSIZE  . . . . . . . . . .  	NUMBER	0001	
WWP_DESBUFLEN  . . . . . . . . .  	L WORD	066C	DATA
WWP_DESBUFOFF  . . . . . . . . .  	L WORD	066E	DATA
WWP_DESBUFSEG  . . . . . . . . .  	L WORD	0670	DATA
WWP_DESTBUFFER . . . . . . . . .  	NUMBER	0010	
WWP_DUPSYMBOL  . . . . . . . . .  	NUMBER	0002	
WWP_ERROR  . . . . . . . . . . .  	L WORD	067B	DATA
WWP_FORMAT . . . . . . . . . . .  	L BYTE	0676	DATA
WWP_HYPHEN . . . . . . . . . . .  	NUMBER	0008	
WWP_HYSYMBOL . . . . . . . . . .  	L BYTE	0679	DATA
WWP_LEFTJUST . . . . . . . . . .  	NUMBER	0001	
WWP_LEFTNRIGHT . . . . . . . . .  	NUMBER	0004	
WWP_LONGWORD . . . . . . . . . .  	NUMBER	0004	
WWP_NOBUFFER . . . . . . . . . .  	NUMBER	0008	
WWP_NOFORMAT . . . . . . . . . .  	L BYTE	0677	DATA
WWP_NOJUSTOPT  . . . . . . . . .  	NUMBER	0010	
WWP_NUMLINES . . . . . . . . . .  	L WORD	0674	DATA
WWP_OPT1 . . . . . . . . . . . .  	L WORD	0662	DATA
WWP_RESERVED . . . . . . . . . .  	L BYTE	067D	DATA	Length = 0005
WWP_RIGHTJUST  . . . . . . . . .  	NUMBER	0002	
WWP_RN . . . . . . . . . . . . .  	NUMBER	300F	
WWP_SPACESYM . . . . . . . . . .  	L BYTE	067A	DATA
WWP_SRCBUFFER  . . . . . . . . .  	NUMBER	0020	
WWP_SRCBUFLEN  . . . . . . . . .  	L WORD	066A	DATA
WWP_SRCHYSMB . . . . . . . . . .  	L BYTE	0678	DATA
WWP_SRCTXTLEN  . . . . . . . . .  	L WORD	0664	DATA
WWP_SRCTXTOFF  . . . . . . . . .  	L WORD	0666	DATA
WWP_SRCTXTSEG  . . . . . . . . .  	L WORD	0668	DATA
WWP_WIDTH  . . . . . . . . . . .  	L WORD	0672	DATA
WWRAP  . . . . . . . . . . . . .  	L FAR 	0000		External

$L1  . . . . . . . . . . . . . .  	L NEAR	0A89	SELECT
$L10 . . . . . . . . . . . . . .  	L NEAR	0DD5	SELECT
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:31
                                                             Symbols-29


$L2  . . . . . . . . . . . . . .  	L NEAR	0A88	SELECT
$L5  . . . . . . . . . . . . . .  	L NEAR	0BE2	SELECT
$L6  . . . . . . . . . . . . . .  	L NEAR	0BDA	SELECT
$L7  . . . . . . . . . . . . . .  	L NEAR	0BD0	SELECT
$L9  . . . . . . . . . . . . . .  	L NEAR	0D7D	SELECT
$LL1 . . . . . . . . . . . . . .  	NUMBER	0001	
$LL5 . . . . . . . . . . . . . .  	NUMBER	0005	
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  caservic		
@VERSION . . . . . . . . . . . .  	TEXT  510		


   8612 Source  Lines
  10744 Total   Lines
   1581 Symbols

  43726 + 15648 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
