Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-1


				PAGE	55,132						;AN000;
				NAME	SELECT						;AN000;
				TITLE	SELECT - SELECT.EXE				;AN000;
				SUBTTL	GEN_COMS					;AN000;
				.ALPHA							;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;	GEN_COMS.ASM : Copyright 1988 Microsoft
				;
				;	DATE:	 August 8/87
				;
				;	COMMENTS: Assemble with MASM 3.0 (using the -A option)
				;
				;	Module contains code for :
				;		- creation of AUTOEXEC file
				;		- creation of CONFIG file
				;		- creation of DOSSHELL.BAT
				;
				;	CHANGE HISTORY:
				;
				;	;AN000;  for	      DT
				;	;AN001;  for PTM1181  GHG
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;	 DATA SEGMENT
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0000				DATA	SEGMENT BYTE PUBLIC 'DATA'                              ;AN000;
												;
 0000  0004			SC_CD		DW	MC_CD					;AN000;
 0002  40 43 44 20		PC_CD		DB	'@CD '                                  ;AN000;
 = 0004				MC_CD		EQU	$ - PC_CD				;AN000;
												;
 0006  0006			SC_BREAK	DW	MC_BREAK				;AN000;
 0008  42 52 45 41 4B 3D	PC_BREAK	DB	'BREAK='                                ;AN000;
 = 0006				MC_BREAK	EQU	$ - PC_BREAK				;AN000;
												;
 000E  0005			SC_CPSW 	DW	MC_CPSW 				;AN000;
 0010  43 50 53 57 3D		PC_CPSW 	DB	'CPSW='                                 ;AN000;
 = 0005				MC_CPSW 	EQU	$ - PC_CPSW				;AN000;
												;
 0015  0007			SC_VERIFY	DW	MC_VERIFY				;AN000;
 0017  56 45 52 49 46 59	PC_VERIFY	DB	'VERIFY '                               ;AN000;
       20			
 = 0007				MC_VERIFY	EQU	$ - PC_VERIFY				;AN000;
												;
 001E  0008			SC_COUNTRY	DW	MC_COUNTRY				;AN000;
 0020  43 4F 55 4E 54 52	PC_COUNTRY	DB	'COUNTRY='                              ;AN000;
       59 3D			
 = 0008				MC_COUNTRY	EQU	$ - PC_COUNTRY				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-2
GEN_COMS					;AN000;                                        

												;
 0028  000B			SC_COUNTRY_SYS	DW	MC_COUNTRY_SYS				;AN000;
 002A  43 4F 55 4E 54 52	PC_COUNTRY_SYS	DB	'COUNTRY.SYS'                           ;AN000;
       59 2E 53 59 53		
 = 000B				MC_COUNTRY_SYS	EQU	$ - PC_COUNTRY_SYS			;AN000;
												;
 0035  0008			SC_BUFFERS	DW	MC_BUFFERS				;AN000;
 0037  42 55 46 46 45 52	PC_BUFFERS	DB	'BUFFERS='                              ;AN000;
       53 3D			
 = 0008				MC_BUFFERS	EQU	$ - PC_BUFFERS				;AN000;
												;
 003F  0003			SC_SLASH_X	DW	MC_SLASH_X				;AC046;SEH changed from /E
 0041  20 2F 58			PC_SLASH_X	DB	' /X'                                   ;AC046;SEH
 = 0003				MC_SLASH_X	EQU $ - PC_SLASH_X				;AC046;SEH
												;
 0044  0005			SC_FCBS 	DW	MC_FCBS 				;AN000;
 0046  46 43 42 53 3D		PC_FCBS 	DB	'FCBS='                                 ;AN000;
 = 0005				MC_FCBS 	EQU	$ - PC_FCBS				;AN000;
												;
 004B  0006			SC_FILES	DW	MC_FILES				;AN000;
 004D  46 49 4C 45 53 3D	PC_FILES	DB	'FILES='                                ;AN000;
 = 0006				MC_FILES	EQU	$ - PC_FILES				;AN000;
												;
 0053  000A			SC_LASTDRIVE	DW	MC_LASTDRIVE				;AN000;
 0055  4C 41 53 54 44 52	PC_LASTDRIVE	DB	'LASTDRIVE='                            ;AN000;
       49 56 45 3D		
 = 000A				MC_LASTDRIVE	EQU	$ - PC_LASTDRIVE			;AN000;
												;
 005F  0007			SC_STACKS	DW	MC_STACKS				;AN000;
 0061  53 54 41 43 4B 53	PC_STACKS	DB	'STACKS='                               ;AN000;
       3D			
 = 0007				MC_STACKS	EQU	$ - PC_STACKS				;AN000;
												;
 0068  0006			SC_SHELL	DW	MC_SHELL				;AN000;
 006A  53 48 45 4C 4C 3D	PC_SHELL	DB	'SHELL='                                ;AN000;
 = 0006				MC_SHELL	EQU	$ - PC_SHELL				;AN000;
												;
 0070  000B			SC_SHELL_1	DW	MC_SHELL_1				;AN000;
 0072  43 4F 4D 4D 41 4E	PC_SHELL_1	DB	'COMMAND.COM'                           ;AC037; SEH  Split the original SC_S
				HELL_1 into
       44 2E 43 4F 4D		
 = 000B				MC_SHELL_1	EQU	$ - PC_SHELL_1				;AC037; SEH    3 parts
												;
 007D  0005			SC_SHELL_2	DW	MC_SHELL_2				;AN037; SEH  Used for diskettes only
 007F  20 2F 4D 53 47		PC_SHELL_2	DB	' /MSG'                                 ;AN037; SEH
 = 0005				MC_SHELL_2	EQU	$ - PC_SHELL_2				;AN037; SEH
												;
 0084  000A			SC_SHELL_3	DW	MC_SHELL_3				;AN037; SEH  Use for diskettes and h
				ardfile
 0086  20 2F 50 20 2F 45	PC_SHELL_3	DB	' /P /E:256  '                          ;AN037; SEH  Two spaces required for
				 CR and LF
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-3
GEN_COMS					;AN000;                                        

       3A 32 35 36 20 20	
 = 000A				MC_SHELL_3	EQU	$ - PC_SHELL_3 - 2			;AN037; SEH
												;
 0092  0007			SC_DEVICE	DW	MC_DEVICE				;AN000;
 0094  44 45 56 49 43 45	PC_DEVICE	DB	'DEVICE='                               ;AN000;
       3D			
 = 0007				MC_DEVICE	EQU	$ - PC_DEVICE				;AN000;
												;
 009B  000A			SC_XMAEM_SYS	DW	MC_XMAEM_SYS				;AN000;
 009D  58 4D 41 45 4D 2E	PC_XMAEM_SYS	DB	'XMAEM.SYS '                            ;AN000;
       53 59 53 20		
 = 000A				MC_XMAEM_SYS	EQU	$ - PC_XMAEM_SYS			;AN000;
												;
 00A7  000C			SC_XMA2EMS_SYS	DW	MC_XMA2EMS_SYS				;AN000;
 00A9  58 4D 41 32 45 4D	PC_XMA2EMS_SYS	DB	'XMA2EMS.SYS '                          ;AN000;
       53 2E 53 59 53 20	
 = 000C				MC_XMA2EMS_SYS	EQU	$ - PC_XMA2EMS_SYS			;AN000;
												;
 00B5  0009			SC_ANSI_SYS	DW	MC_ANSI_SYS				;AN000;
 00B7  41 4E 53 49 2E 53	PC_ANSI_SYS	DB	'ANSI.SYS '                             ;AN000;
       59 53 20			
 = 0009				MC_ANSI_SYS	EQU	$ - PC_ANSI_SYS 			;AN000;
												;
 00C0  000D			SC_VDISK_SYS	DW	MC_VDISK_SYS				;AN000;
 00C2  52 41 4D 44 52 49	PC_VDISK_SYS	DB	'RAMDRIVE.SYS '                         ;AN000;
       56 45 2E 53 59 53	
       20			
 = 000D				MC_VDISK_SYS	EQU	$ - PC_VDISK_SYS			;AN000;
												;
 00CF  0011			SC_DISPLAY_SYS	DW	MC_DISPLAY_SYS				;AN000;
 00D1  44 49 53 50 4C 41	PC_DISPLAY_SYS	DB	'DISPLAY.SYS CON=('                     ;AN000;
       59 2E 53 59 53 20	
       43 4F 4E 3D 28		
 = 0011				MC_DISPLAY_SYS	EQU	$ - PC_DISPLAY_SYS			;AN000;
												;
						PUBLIC	SC_DISPLAY_EGA				;AN000;
 00E2  0008			SC_DISPLAY_EGA	DW	MC_DISPLAY_EGA				;AN000;
 00E4  45 47 41 2E 43 50	PC_DISPLAY_EGA	DB	'EGA.CPI)'                              ;AN000;
       49 29			
 = 0008				MC_DISPLAY_EGA	EQU	$ - PC_DISPLAY_EGA			;AN000;
												;
						PUBLIC	SD_DISPLAY_EGA				;AN001;GHG
 00EC  0003			SD_DISPLAY_EGA	DW	MD_DISPLAY_EGA				;AN001;GHG
 00EE  45 47 41			PD_DISPLAY_EGA	DB	'EGA'                                   ;AN001;GHG
 = 0003				MD_DISPLAY_EGA	EQU	$ - PD_DISPLAY_EGA			;AN001;GHG
												;
						PUBLIC	SC_DISPLAY_LCD				;AN000;
 00F1  0008			SC_DISPLAY_LCD	DW	MC_DISPLAY_LCD				;AN000;
 00F3  4C 43 44 2E 43 50	PC_DISPLAY_LCD	DB	'LCD.CPI)'                              ;AN000;
       49 29			
 = 0008				MC_DISPLAY_LCD	EQU	$ - PC_DISPLAY_LCD			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-4
GEN_COMS					;AN000;                                        

												;
						PUBLIC	SD_DISPLAY_LCD				;AN001;GHG
 00FB  0003			SD_DISPLAY_LCD	DW	MD_DISPLAY_LCD				;AN001;GHG
 00FD  4C 43 44			PD_DISPLAY_LCD	DB	'LCD'                                   ;AN001;GHG
 = 0003				MD_DISPLAY_LCD	EQU	$ - PD_DISPLAY_LCD			;AN001;GHG
												;
 0100  000C			SC_PRINTER_SYS	DW	MC_PRINTER_SYS				;AN000;
 0102  50 52 49 4E 54 45	PC_PRINTER_SYS	DB	'PRINTER.SYS '                          ;AN000;
       52 2E 53 59 53 20	
 = 000C				MC_PRINTER_SYS	EQU	$ - PC_PRINTER_SYS			;AN000;
												;
 010E  0003			SC_LPT		DW	MC_LPT					;AN000;
 0110  4C 50 54			PC_LPT		DB	'LPT'                                   ;AN000;
 = 0003				MC_LPT		EQU	$ - PC_LPT				;AN000;
												;
 0113  0003			SC_COM		DW	MC_COM					;AN011; SEH
 0115  43 4F 4D			PC_COM		DB	'COM'                                   ;AN011; SEH
 = 0003				MC_COM		EQU	$ - PC_COM				;AN011; SEH
												;
 0118  0002			SC_EQUAL_OPEN	DW	MC_EQUAL_OPEN				;AN000;
 011A  3D 28			PC_EQUAL_OPEN	DB	'=('                                    ;AN000;
 = 0002				MC_EQUAL_OPEN	EQU	$ - PC_EQUAL_OPEN			;AN000;
												;
 011C  0005			SC_437		DW	MC_437					;AN000;
 011E  2C 34 33 37 2C		PC_437		DB	',437,'                                 ;AN000;
 = 0005				MC_437		EQU	$ - PC_437				;AN000;
												;
 0123  0001			SC_COMMA	DW	MC_COMMA				;AN000;
 0125  2C			PC_COMMA	DB	','                                     ;AN000;
 = 0001				MC_COMMA	EQU	$ - PC_COMMA				;AN000;
												;
 0126  0008			SC_INSTALL	DW	MC_INSTALL				;AN000;
 0128  49 4E 53 54 41 4C	PC_INSTALL	DB	'INSTALL='                              ;AN000;
       4C 3D			
 = 0008				MC_INSTALL	EQU	$ - PC_INSTALL				;AN000;
												;
 0130  0009			SC_KEYB_C	DW	MC_KEYB_C				;AN000;
 0132  4B 45 59 42 2E 43	PC_KEYB_C	DB	'KEYB.COM '                             ;AN000;
       4F 4D 20			
 = 0009				MC_KEYB_C	EQU	$ - PC_KEYB_C				;AN000;
												;
 013B  000C			SC_KEYBOARD_SYS DW	MC_KEYBOARD_SYS 			;AN000;
 013D  4B 45 59 42 4F 41	PC_KEYBOARD_SYS DB	'KEYBOARD.SYS'                          ;AN000;
       52 44 2E 53 59 53	
 = 000C				MC_KEYBOARD_SYS EQU	$ - PC_KEYBOARD_SYS			;AN000;
												;
 0149  0005			SC_KEYB_SWITCH	DW	MC_KEYB_SWITCH				;AN002;JW
 014B  20 2F 49 44 3A		PC_KEYB_SWITCH	DB	' /ID:'                                 ;AN002;JW
 = 0005				MC_KEYB_SWITCH	EQU	$ - PC_KEYB_SWITCH			;AN002;JW
												;
 0150  000A			SC_SHARE	DW	MC_SHARE				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-5
GEN_COMS					;AN000;                                        

 0152  53 48 41 52 45 2E	PC_SHARE	DB	'SHARE.EXE '                            ;AN000;
       45 58 45 20		
 = 000A				MC_SHARE	EQU	$ - PC_SHARE				;AN000;
												;
 015C  000D			SC_FASTOPEN	DW	MC_FASTOPEN				;AN000;
 015E  46 41 53 54 4F 50	PC_FASTOPEN	DB	'FASTOPEN.EXE '                         ;AN000;
       45 4E 2E 45 58 45	
       20			
 = 000D				MC_FASTOPEN	EQU	$ - PC_FASTOPEN 			;AN000;
												;
 016B  000C			SC_NLSFUNC	DW	MC_NLSFUNC				;AN000;
 016D  4E 4C 53 46 55 4E	PC_NLSFUNC	DB	'NLSFUNC.EXE '                          ;AN000;
       43 2E 45 58 45 20	
 = 000C				MC_NLSFUNC	EQU	$ - PC_NLSFUNC				;AN000;
												;
 0179  0009			SC_ECHO 	DW	MC_ECHO 				;AN000;
 017B  40 45 43 48 4F 20	PC_ECHO 	DB	'@ECHO OFF  '                           ;AN000;  TWO SPACES REQUIRED FOR CR,
				LF
       4F 46 46 20 20		
 = 0009				MC_ECHO 	EQU	$ - PC_ECHO - 2 			;AN000;
												;
 0186  0005			SC_PATH 	DW	MC_PATH 				;AN000;
 0188  50 41 54 48 20		PC_PATH 	DB	'PATH '                                 ;AN000;
 = 0005				MC_PATH 	EQU	$ - PC_PATH				;AN000;
												;
 018D  0007			SC_APPEND	DW	MC_APPEND				;AN000;
 018F  41 50 50 45 4E 44	PC_APPEND	DB	'APPEND '                               ;AN000;
       20			
 = 0007				MC_APPEND	EQU	$ - PC_APPEND				;AN000;
												;
 0196  0007			SC_PROMPT	DW	MC_PROMPT				;AN000;
 0198  50 52 4F 4D 50 54	PC_PROMPT	DB	'PROMPT '                               ;AN000;
       20			
 = 0007				MC_PROMPT	EQU	$ - PC_PROMPT				;AN000;
												;
 019F  000C			SC_SET_COMSPEC	DW	MC_SET_COMSPEC				;AN000;
 01A1  53 45 54 20 43 4F	PC_SET_COMSPEC	DB	'SET COMSPEC='                          ;AN000;
       4D 53 50 45 43 3D	
 = 000C				MC_SET_COMSPEC	EQU	$ - PC_SET_COMSPEC			;AN000;
												;
 01AD  000B			SC_COMMAND_COM	DW	MC_COMMAND_COM				;AN000;
 01AF  43 4F 4D 4D 41 4E	PC_COMMAND_COM	DB	'COMMAND.COM'                           ;AN000;
       44 2E 43 4F 4D		
 = 000B				MC_COMMAND_COM	EQU	$ - PC_COMMAND_COM			;AN000;
												;
 01BA  0009			SC_GRAPHICS	DW	MC_GRAPHICS				;AN000;
 01BC  47 52 41 50 48 49	PC_GRAPHICS	DB	'GRAPHICS '                             ;AN000;
       43 53 20			
 = 0009				MC_GRAPHICS	EQU	$ - PC_GRAPHICS 			;AN000;
												;
 01C5  0009			SC_GRAFTABL	DW	MC_GRAFTABL				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-6
GEN_COMS					;AN000;                                        

 01C7  47 52 41 46 54 41	PC_GRAFTABL	DB	'GRAFTABL '                             ;AN000;
       42 4C 20			
 = 0009				MC_GRAFTABL	EQU	$ - PC_GRAFTABL 			;AN000;
												;
				;SC_DATE	 DW	 MC_DATE				;
				;PC_DATE	 DB	 'DATE  '                               ;  TWO SPACES REQUIRED FOR CR,LF
				;MC_DATE	 EQU	 $ - PC_DATE - 2			;
												;
				;SC_TIME	 DW	 MC_TIME				;
				;PC_TIME	 DB	 'TIME  '                               ;  TWO SPACES REQUIRED FOR CR,LF
				;MC_TIME	 EQU	 $ - PC_TIME - 2			;
												;
 01D0  0003			SC_VER		DW	MC_VER					;AN000;
 01D2  56 45 52 20 20		PC_VER		DB	'VER  '                                 ;AN000;  TWO SPACES REQUIRED FOR CR,
				LF
 = 0003				MC_VER		EQU	$ - PC_VER - 2				;AN000;
												;
 01D7  0013			SC_MODE_CON	DW	MC_MODE_CON				;AN000;
 01D9  4D 4F 44 45 20 43	PC_MODE_CON	DB	'MODE CON CP PREP=(('                   ;AN000;
       4F 4E 20 43 50 20	
       50 52 45 50 3D 28	
       28			
 = 0013				MC_MODE_CON	EQU	$ - PC_MODE_CON 			;AN000;
												;
 01EC  0008			SC_MODE_COM	DW	MC_MODE_COM				;AN000;
 01EE  4D 4F 44 45 20 43	PC_MODE_COM	DB	'MODE COM'                              ;AN000;
       4F 4D			
 = 0008				MC_MODE_COM	EQU	$ - PC_MODE_COM 			;AN000;
												;
 01F6  0008			SC_MODE_LPT	DW	MC_MODE_LPT				;AN000;
 01F8  4D 4F 44 45 20 4C	PC_MODE_LPT	DB	'MODE LPT'                              ;AN000;
       50 54			
 = 0008				MC_MODE_LPT	EQU	$ - PC_MODE_LPT 			;AN000;
												;
 0200  0004			SC_EQUAL_COM	DW	MC_EQUAL_COM				;AN000;
 0202  3D 43 4F 4D		PC_EQUAL_COM	DB	'=COM'                                  ;AN000;
 = 0004				MC_EQUAL_COM	EQU	$ - PC_EQUAL_COM			;AN000;
												;
 0206  000B			SC_PREPARE	DW	MC_PREPARE				;AN000;
 0208  20 43 50 20 50 52	PC_PREPARE	DB	' CP PREP=(('                           ;AN000;
       45 50 3D 28 28		
 = 000B				MC_PREPARE	EQU	$ - PC_PREPARE				;AN000;
												;
 0213  0002			SC_CLOSE_BRAC	DW	MC_CLOSE_BRAC				;AN000;
 0215  29 20			PC_CLOSE_BRAC	DB	') '                                    ;AN000;
 = 0002				MC_CLOSE_BRAC	EQU	$ - PC_CLOSE_BRAC			;AN000;
												;
 0217  0005			SC_KEYB_A	DW	MC_KEYB_A				;AN000;
 0219  4B 45 59 42 20		PC_KEYB_A	DB	'KEYB '                                 ;AN000;
 = 0005				MC_KEYB_A	EQU	$ - PC_KEYB_A				;AN000;
												;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-7
GEN_COMS					;AN000;                                        

 021E  0002			SC_COMMAS	DW	MC_COMMAS				;AN000;
 0220  2C 2C			PC_COMMAS	DB	',,'                                    ;AN000;
 = 0002				MC_COMMAS	EQU	$ - PC_COMMAS				;AN000;
												;
 0222  0005			SC_CHCP 	DW	MC_CHCP 				;AN000;
 0224  43 48 43 50 20		PC_CHCP 	DB	'CHCP '                                 ;AN000;
 = 0005				MC_CHCP 	EQU	$ - PC_CHCP				;AN000;
												;
 0229  0003			SC_DRIVE_C	DW	MC_DRIVE_C				;AN013;JW
 022B  40 43 3A 20 20		PC_DRIVE_C	DB	'@C:  '                                 ;AN013;JW
 = 0003				MC_DRIVE_C	EQU	$ - PC_DRIVE_C - 2			;AN013;JW
												;
 0230  0036			SC_SHELLC_1	DW	MC_SHELLC_1				;AN000;
 0232  40 53 48 45 4C 4C	PC_SHELLC_1	DB	'@SHELLB DOSSHELL',E_CR,E_LF            ;AC019;SEH
       42 20 44 4F 53 53	
       48 45 4C 4C 00 E 00 E	
 0244  40 49 46 20 45 52			DB	'@IF ERRORLEVEL 255 GOTO END',E_CR,E_LF ;AN000;
       52 4F 52 4C 45 56	
       45 4C 20 32 35 35	
       20 47 4F 54 4F 20	
       45 4E 44 00 E 00 E	
 0261  3A 43 4F 4D 4D 4F			DB	':COMMON  '				;AN000;
       4E 20 20			
 = 0036				MC_SHELLC_1	EQU	$ - PC_SHELLC_1 - 2			;AN000; 2 SPACES FOR ASCII-Z CONVERS
				ION
												;
 026A  0004			SC_SHELLC_2	DW	MC_SHELLC_2				;AN000;
 026C  3A 45 4E 44 20 20	PC_SHELLC_2	DB	':END  '                                ;AN000;
 = 0004				MC_SHELLC_2	EQU	$ - PC_SHELLC_2 - 2			;AN000;
												;
 0272  0008			SC_SHELLC	DW	MC_SHELLC				;AN000;
 0274  40 53 48 45 4C 4C	PC_SHELLC	DB	'@SHELLC '                              ;AN000;
       43 20			
 = 0008				MC_SHELLC	EQU	$ - PC_SHELLC				;AN000;
												;
 027C  0008			SC_SHELLP	DW	MC_SHELLP				;AN000;
 027E  44 4F 53 53 48 45	PC_SHELLP	DB	'DOSSHELL  '                            ;AC019;SEH
       4C 4C 20 20		
 = 0008				MC_SHELLP	EQU	$ - PC_SHELLP - 2			;AN000;
												;
 0288  0009			SC_PRINT_COM	DW	MC_PRINT_COM				;AN000;
 028A  50 52 49 4E 54 20	PC_PRINT_COM	DB	'PRINT /D:'                             ;AC011; SEH
       2F 44 3A			
 = 0009				MC_PRINT_COM	EQU	$ - PC_PRINT_COM			;AN011; SEH
												;
 0293  0001			SC_AT_SIGN	DW	MC_AT_SIGN				;AN000;
 0295  40			PC_AT_SIGN	DB	'@'                                     ;AN000;
 = 0001				MC_AT_SIGN	EQU	$ - PC_AT_SIGN				;AN000;
												;
 0296  0032			S_DOS_PATH	DW	M_DOS_PATH				;AN000;
 0298  0032[			P_DOS_PATH	DB	50 DUP(?)				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-8
GEN_COMS					;AN000;                                        

	   ??			
			 ]	
				
 = 0032				M_DOS_PATH	EQU	$ - P_DOS_PATH				;AN000;
												;
 02CA				DATA		ENDS						;AN000;DATA
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
					INCLUDE EXT.INC 					;AN000;
			     C	;	Change History:
			     C	;
			     C	;	;AN003; for DCR225
			     C	;	;AN004; for DCR65 (360KB support)
			     C	;
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C		EXTRN	SUPPORT_STATUS:WORD		;AN000;
			     C		EXTRN	I_USER_INDEX:WORD		;AN000;
			     C		EXTRN	N_USER_NUMERIC:WORD		;AN000;
			     C		EXTRN	MIN_INPUT_VAL:WORD		;AN000;
			     C		EXTRN	MAX_INPUT_VAL:WORD		;AN000;
			     C		EXTRN	S_USER_STRING:WORD		;AN000;
			     C		EXTRN	P_USER_STRING:BYTE		;AN000;
			     C		EXTRN	M_USER_STRING:ABS		;AN000;
			     C		EXTRN	N_VALID_KEYS:WORD		;AN000;
			     C		EXTRN	N_USER_FUNC:WORD		;AN000;
			     C		EXTRN	E_ENTER:ABS			;AN000;
			     C		EXTRN	E_ESCAPE:ABS			;AN000;
			     C		EXTRN	E_TAB:ABS			;AN000;
			     C		EXTRN	E_F3:ABS			;AN000;
			     C		EXTRN	E_SPACE:ABS			;AN000;
			     C		EXTRN	ERROR_KEYS:BYTE 		;AN000;
			     C		EXTRN	ERROR_KEYS_LEN:ABS		;AN000;
			     C		EXTRN	E_QUIT:ABS			;AN000;
			     C		EXTRN	E_RETURN:ABS			;AN000;
			     C		EXTRN	FK_ENT_F3:BYTE			;AN000;DT
			     C		EXTRN	FK_ENT_F3_LEN:ABS		;AN000;DT
			     C		EXTRN	FK_ENT_ESC:BYTE 		;AN000;
			     C		EXTRN	FK_ENT_ESC_LEN:ABS		;AN000;
			     C		EXTRN	FK_ENT_ESC_F3:BYTE		;AN003;GHG
			     C		EXTRN	FK_ENT_ESC_F3_LEN:ABS		;AN003;GHG
			     C		EXTRN	FK_ENT:BYTE			;AN000;
			     C		EXTRN	FK_ENT_LEN:ABS			;AN000;
			     C		EXTRN	FK_TEXT:BYTE			;AN000;
			     C		EXTRN	FK_TEXT_LEN:ABS 		;AN000;
			     C		EXTRN	FK_SCROLL:BYTE			;AN000;
			     C		EXTRN	FK_SCROLL_LEN:ABS		;AN000;
			     C		EXTRN	FK_TAB:BYTE			;AN000;
			     C		EXTRN	FK_TAB_LEN:ABS			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-9
GEN_COMS					;AN000;                                        

			     C		EXTRN	FK_REVIEW:BYTE			;AN000;
			     C		EXTRN	FK_REVIEW_LEN:ABS		;AN000;
			     C		EXTRN	FK_DATE:BYTE			;AN000;
			     C		EXTRN	FK_DATE_LEN:ABS 		;AN000;
			     C		EXTRN	FK_FORMAT:BYTE			;AN000;
			     C		EXTRN	FK_FORMAT_LEN:ABS		;AN000;
			     C		EXTRN	FK_REBOOT:BYTE			;AN000;
			     C		EXTRN	FK_REBOOT_LEN:ABS		;AN000;
			     C		EXTRN	E_YES:ABS			;AN000;
			     C		EXTRN	E_NO:ABS			;AN000;
			     C		EXTRN	E_NA:ABS			;AN000;
			     C		EXTRN	N_SELECT_MODE:WORD		;AN000;
			     C		EXTRN	E_SELECT_MENU:ABS		;AN000;
			     C		EXTRN	E_SELECT_FDISK:ABS		;AN000;
			     C		EXTRN	E_SELECT_INV:ABS		;AN000;
			     C		EXTRN	S_SELECT_TMP:WORD		;AN000;
			     C		EXTRN	N_FORMAT_MODE:WORD		;AN000;
			     C		EXTRN	E_FORMAT_SELECT:ABS		;AN000;
			     C		EXTRN	E_FORMAT_NEW:ABS		;AN000;
			     C		EXTRN	E_FORMAT_USED:ABS		;AN000;
			     C		EXTRN	S_SPACE:WORD			;AN000;
			     C		EXTRN	S_OFF:WORD			;AN000;
			     C		EXTRN	S_ON:WORD			;AN000;
			     C		EXTRN	I_WORKSPACE:WORD		;AN000;
			     C		EXTRN	N_WORK_PREV:WORD		;AN000;
			     C		EXTRN	E_WORKSPACE_BAL:ABS		;AN000;
			     C		EXTRN	E_WORKSPACE_MIN:ABS		;AN000;
			     C		EXTRN	E_WORKSPACE_MAX:ABS		;AN000;
			     C		EXTRN	S_ANSI:WORD			;AN000;
			     C		EXTRN	M_ANSI:ABS			;AN000;
			     C		EXTRN	D_ANSI_1:WORD			;AN000;
			     C		EXTRN	F_ANSI:WORD			;AN000;
			     C		EXTRN	E_ANSI_NO:ABS			;AN000;
			     C		EXTRN	E_ANSI_YES:ABS			;AN000;
			     C		EXTRN	E_ANSI_B:ABS			;AN000;
			     C		EXTRN	E_ANSI_C:ABS			;AN000;
			     C		EXTRN	S_APPEND:WORD			;AN000;
			     C		EXTRN	M_APPEND:ABS			;AN000;
			     C		EXTRN	S_APPEND_P:WORD 		;AN000;JW
			     C		EXTRN	M_APPEND_P:ABS			;AN000;JW
			     C		EXTRN	F_APPEND:WORD			;AN000;
			     C		EXTRN	E_APPEND_NO:ABS 		;AN000;
			     C		EXTRN	E_APPEND_YES:ABS		;AN000;
			     C		EXTRN	S_BREAK:WORD			;AN000;
			     C		EXTRN	M_BREAK:ABS			;AN000;
			     C		EXTRN	ST_BREAK:WORD			;AN000;
			     C		EXTRN	MT_BREAK:ABS			;AN000;
			     C		EXTRN	S_BUFFERS:WORD			;AN000;
			     C		EXTRN	M_BUFFERS:ABS			;AN000;
			     C		EXTRN	D_BUFFERS_1:WORD		;AN000;
			     C		EXTRN	D_BUFFERS_2:WORD		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-10
GEN_COMS					;AN000;                                        

			     C		EXTRN	ST_BUFFERS:WORD 		;AN000;
			     C		EXTRN	MT_BUFFERS:ABS			;AN000;
			     C		EXTRN	S_CPSW:WORD			;AN000;
			     C		EXTRN	M_CPSW:ABS			;AN000;
			     C		EXTRN	F_CPSW:WORD			;AN000;
			     C		EXTRN	E_CPSW_NO:ABS			;AN000;
			     C		EXTRN	E_CPSW_YES:ABS			;AN000;
			     C		EXTRN	E_CPSW_NA:ABS			;AN000;
			     C		EXTRN	E_CPSW_B:ABS			;AN000;
			     C		EXTRN	E_CPSW_C:ABS			;AN000;
			     C		EXTRN	ST_CPSW:WORD			;AN000;
			     C		EXTRN	MT_CPSW:ABS			;AN000;
			     C		EXTRN	N_CPSW:WORD			;AN000;
			     C		EXTRN	E_CPSW_NOT_VAL:ABS		;AN000;
			     C		EXTRN	E_CPSW_NOT_REC:ABS		;AN000;
			     C		EXTRN	E_CPSW_VALID:ABS		;AN000;
			     C		EXTRN	S_FASTOPEN:WORD 		;AN000;
			     C		EXTRN	M_FASTOPEN:ABS			;AN000;
			     C		EXTRN	D_FASTOPEN_1:WORD		;AN000;
			     C		EXTRN	D_FASTOPEN_2:WORD		;AN000;
			     C		EXTRN	F_FASTOPEN:WORD 		;AN000;
			     C		EXTRN	E_FASTOPEN_NO:ABS		;AN000;
			     C		EXTRN	E_FASTOPEN_YES:ABS		;AN000;
			     C		EXTRN	E_FASTOPEN_C:ABS		;AN000;
			     C		EXTRN	S_FCBS:WORD			;AN000;
			     C		EXTRN	M_FCBS:ABS			;AN000;
			     C		EXTRN	D_FCBS_1:WORD			;AN000;
			     C		EXTRN	ST_FCBS:WORD			;AN000;
			     C		EXTRN	MT_FCBS:ABS			;AN000;
			     C		EXTRN	S_FILES:WORD			;AN000;
			     C		EXTRN	M_FILES:ABS			;AN000;
			     C		EXTRN	D_FILES_1:WORD			;AN000;
			     C		EXTRN	D_FILES_2:WORD			;AN000;
			     C		EXTRN	ST_FILES:WORD			;AN000;
			     C		EXTRN	MT_FILES:ABS			;AN000;
			     C		EXTRN	S_GRAPHICS:WORD 		;AN000;
			     C		EXTRN	M_GRAPHICS:ABS			;AN000;
			     C		EXTRN	F_GRAPHICS:WORD 		;AN000;
			     C		EXTRN	E_GRAPHICS_NO:ABS		;AN000;
			     C		EXTRN	E_GRAPHICS_YES:ABS		;AN000;
			     C		EXTRN	E_GRAPHICS_B:ABS		;AN000;
			     C		EXTRN	E_GRAPHICS_C:ABS		;AN000;
			     C		EXTRN	F_GRAFTABL:WORD 		;AN000;
			     C		EXTRN	E_GRAFTABL_NO:ABS		;AN000;
			     C		EXTRN	E_GRAFTABL_YES:ABS		;AN000;
			     C		EXTRN	E_GRAFTABL_NA:ABS		;AN000;
			     C		EXTRN	E_GRAFTABL_B:ABS		;AN000;
			     C		EXTRN	E_GRAFTABL_C:ABS		;AN000;
			     C		EXTRN	S_LASTDRIVE:WORD		;AN000;
			     C		EXTRN	M_LASTDRIVE:ABS 		;AN000;
			     C		EXTRN	D_LASTDRIVE_1:WORD		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-11
GEN_COMS					;AN000;                                        

			     C		EXTRN	ST_LASTDRIVE:WORD		;AN000;
			     C		EXTRN	MT_LASTDRIVE:ABS		;AN000;
			     C		EXTRN	S_PATH:WORD			;AN000;
			     C		EXTRN	M_PATH:ABS			;AN000;
			     C		EXTRN	F_PATH:WORD			;AN000;
			     C		EXTRN	E_PATH_NO:ABS			;AN000;
			     C		EXTRN	E_PATH_YES:ABS			;AN000;
			     C		EXTRN	S_PROMPT:WORD			;AN000;
			     C		EXTRN	M_PROMPT:ABS			;AN000;
			     C		EXTRN	D_PROMPT_1:WORD 		;AN000;
			     C		EXTRN	F_PROMPT:WORD			;AN000;
			     C		EXTRN	E_PROMPT_NO:ABS 		;AN000;
			     C		EXTRN	E_PROMPT_YES:ABS		;AN000;
			     C		EXTRN	S_SHARE:WORD			;AN000;
			     C		EXTRN	F_SHARE:WORD			;AN000;
			     C		EXTRN	M_SHARE:ABS			;AN000;
			     C		EXTRN	E_SHARE_NO:ABS			;AN000;
			     C		EXTRN	E_SHARE_YES:ABS 		;AN000;
			     C		EXTRN	E_SHARE_C:ABS			;AN000;
			     C		EXTRN	S_SHELL:WORD			;AN000;
			     C		EXTRN	M_SHELL:ABS			;AN000;
			     C		EXTRN	D_SHELL_1:WORD			;AN000;
			     C		EXTRN	D_SHELL_2:WORD			;AN000;
			     C		EXTRN	F_SHELL:WORD			;AN000;
			     C		EXTRN	E_SHELL_NO:ABS			;AN000;
			     C		EXTRN	E_SHELL_YES:ABS 		;AN000;
			     C		EXTRN	E_SHELL_B:ABS			;AN000;
			     C		EXTRN	E_SHELL_C:ABS			;AN000;
			     C		EXTRN	S_STACKS:WORD			;AN000;
			     C		EXTRN	M_STACKS:ABS			;AN000;
			     C		EXTRN	ST_STACKS:WORD			;AN000;
			     C		EXTRN	MT_STACKS:ABS			;AN000;
			     C		EXTRN	S_VDISK:WORD			;AN000;
			     C		EXTRN	M_VDISK:ABS			;AN000;
			     C		EXTRN	F_VDISK:WORD			;AN000;
			     C		EXTRN	E_VDISK_NO:ABS			;AN000;
			     C		EXTRN	E_VDISK_YES:ABS 		;AN000;
			     C		EXTRN	E_VDISK_B:ABS			;AN000;
			     C		EXTRN	E_VDISK_C:ABS			;AN000;
			     C		EXTRN	S_VERIFY:WORD			;AN000;
			     C		EXTRN	M_VERIFY:ABS			;AN000;
			     C		EXTRN	ST_VERIFY:WORD			;AN000;
			     C		EXTRN	MT_VERIFY:ABS			;AN000;
			     C		EXTRN	S_XMAEM:WORD			;AN000;
			     C		EXTRN	M_XMAEM:ABS			;AN000;
			     C		EXTRN	S_XMA2EMS:WORD			;AN000;
			     C		EXTRN	M_XMA2EMS:ABS			;AN000;
			     C		EXTRN	D_XMA2EMS_1:WORD		;AN000;
			     C		EXTRN	F_XMA:WORD			;AN000;
			     C		EXTRN	E_XMA_NO:ABS			;AN000;
			     C		EXTRN	E_XMA_YES:ABS			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-12
GEN_COMS					;AN000;                                        

			     C		EXTRN	E_XMA_NA:ABS			;AN000;
			     C		EXTRN	E_XMA_C:ABS			;AN000;
			     C		EXTRN	N_XMA:WORD			;AN000;
			     C		EXTRN	E_XMA_ABSENT:ABS		;AN000;
			     C		EXTRN	E_XMA_PRESENT:ABS		;AN000;
			     C		EXTRN	I_DEST_DRIVE:WORD		;AN000;
			     C		EXTRN	E_DEST_DRIVE_C:ABS		;AN000;
			     C		EXTRN	E_DEST_DRIVE_B:ABS		;AN000;
			     C		EXTRN	E_DEST_DRIVE_A:ABS		;AN111;JW
			     C		EXTRN	N_DEST_DRIVE:BYTE		;AN000;
			     C		EXTRN	E_DEST_SELECT:ABS		;AN000;
			     C		EXTRN	E_DEST_USER:ABS 		;AN000;
			     C		EXTRN	N_DISKETTE_TOT:BYTE		;AN000;
			     C		EXTRN	N_ZERO_DISKETTE:ABS		;AN000;
			     C		EXTRN	N_DISKETTE_A:BYTE		;AN000;
			     C		EXTRN	N_DISKETTE_B:BYTE		;AN000;
			     C		EXTRN	E_DISKETTE_INV:ABS		;AN000;
			     C		EXTRN	E_DISKETTE_360:ABS		;AN000;
			     C		EXTRN	E_DISKETTE_720:ABS		;AN000;
			     C		EXTRN	E_DISKETTE_1200:ABS		;AN000;
			     C		EXTRN	E_DISKETTE_1440:ABS		;AN000;
			     C		EXTRN	S_DEST_DRIVE:WORD		;AN000;
			     C		EXTRN	M_DEST_DRIVE:ABS		;AN000;
			     C		EXTRN	S_DRIVE_A:WORD			;AN000;
			     C		EXTRN	S_A_DRIVE:WORD			;AN039;SEH
			     C		EXTRN	S_B_DRIVE:WORD			;AN039;SEH
			     C		EXTRN	S_C_DRIVE:WORD			;AN000;JW
			     C		EXTRN	S_DOS_LOC:WORD			;AN000;
			     C		EXTRN	M_DOS_LOC:ABS			;AN000;
			     C		EXTRN	D_DOS_LOC_1:WORD		;AN000;
			     C		EXTRN	S_INSTALL_PATH:WORD		;AN000;
			     C		EXTRN	M_INSTALL_PATH:ABS		;AN000;
			     C		EXTRN	I_CTY_KYBD:WORD 		;AN000;
			     C		EXTRN	E_CTY_KB_PREDEF:ABS		;AN000;
			     C		EXTRN	E_CTY_KB_USER:ABS		;AN000;
			     C		EXTRN	N_CTY_LIST:WORD 		;AN000;
			     C		EXTRN	E_CTY_LIST_1:ABS		;AN000;
			     C		EXTRN	E_CTY_LIST_2:ABS		;AN000;
			     C		EXTRN	I_COUNTRY:WORD			;AN000;
			     C		EXTRN	N_COUNTRY:WORD			;AN000;
			     C		EXTRN	N_KYBD_LIST:WORD		;AN000;
			     C		EXTRN	E_KYBD_LIST_1:ABS		;AN000;
			     C		EXTRN	E_KYBD_LIST_2:ABS		;AN000;
			     C		EXTRN	I_KEYBOARD:WORD 		;AN000;
			     C		EXTRN	S_KEYBOARD:WORD 		;AN000;
			     C		EXTRN	M_KEYBOARD:ABS			;AN000;
			     C		EXTRN	N_KYBD_VAL:BYTE 		;AN000;
			     C		EXTRN	E_KYBD_VAL_NO:ABS		;AN000;
			     C		EXTRN	E_KYBD_VAL_YES:ABS		;AN000;
			     C		EXTRN	E_KYBD_VAL_DEF:ABS		;AN000;
			     C		EXTRN	N_DESIGNATES:WORD		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-13
GEN_COMS					;AN000;                                        

			     C		EXTRN	N_CP_PRI:WORD			;AN000;
			     C		EXTRN	N_CP_SEC:WORD			;AN000;
			     C		EXTRN	I_KYBD_ALT:WORD 		;AN000;
			     C		EXTRN	S_KYBD_ALT:WORD 		;AN000;
			     C		EXTRN	M_KYBD_ALT:ABS			;AN000;
			     C		EXTRN	N_KYBD_ALT:BYTE 		;AN000;
			     C		EXTRN	E_KYBD_ALT_NO:ABS		;AN000;
			     C		EXTRN	E_KYBD_ALT_YES:ABS		;AN000;
			     C		EXTRN	N_KYB_LOAD:WORD 		;AN000;
			     C		EXTRN	E_KYB_LOAD_SUC:ABS		;AN000;
			     C		EXTRN	E_KYB_LOAD_ERR:ABS		;AN000;
			     C		EXTRN	E_KYB_LOAD_US:ABS		;AN000;
			     C		EXTRN	E_KYB_LOAD_UND:ABS		;AN000;
			     C		EXTRN	CTY_TAB_A:BYTE			;AN000;
			     C		EXTRN	CTY_TAB_A_1:BYTE		;AN000;
			     C		EXTRN	CTY_A_ITEMS:ABS 		;AN000;
			     C		EXTRN	CTY_TAB_B:BYTE			;AN000;
			     C		EXTRN	CTY_TAB_B_1:BYTE		;AN000;
			     C		EXTRN	CTY_B_ITEMS:ABS 		;AN000;
			     C		EXTRN	N_CTY_RES:BYTE			;AN000;
			     C		EXTRN	KYBD_TAB_A:BYTE 		;AN000;
			     C		EXTRN	KYBD_TAB_A_1:BYTE		;AN000;
			     C		EXTRN	KYBD_A_ITEMS:ABS		;AN000;
			     C		EXTRN	KYBD_TAB_B:BYTE 		;AN000;
			     C		EXTRN	KYBD_TAB_B_1:BYTE		;AN000;
			     C		EXTRN	KYBD_B_ITEMS:ABS		;AN000;
			     C		EXTRN	ALT_TAB_PTR:WORD		;AN000;
			     C		EXTRN	ALT_KYB_ID:BYTE 		;AN000;
			     C		EXTRN	ALT_KYB_ID_PREV:BYTE		;AN000;
			     C		EXTRN	ALT_FRENCH:ABS			;AN000;
			     C		EXTRN	ALT_ITALIAN:ABS 		;AN000;
			     C		EXTRN	ALT_UK:ABS			;AN000;
			     C		EXTRN	ALT_KYB_TABLE:BYTE		;AN000;
			     C		EXTRN	ALT_KYB_TAB_1:BYTE		;AN000;
			     C		EXTRN	ALT_KYB_ITEMS:ABS		;AN000;
			     C		EXTRN	ALT_KYBD_FR:BYTE		;AN000;
			     C		EXTRN	ALT_KYBD_FR_1:WORD		;AN000;
			     C		EXTRN	ALT_FR_ITEMS:ABS		;AN000;
			     C		EXTRN	ALT_KYBD_IT:BYTE		;AN000;
			     C		EXTRN	ALT_KYBD_IT_1:BYTE		;AN000;
			     C		EXTRN	ALT_IT_ITEMS:ABS		;AN000;
			     C		EXTRN	ALT_KYBD_UK:BYTE		;AN000;
			     C		EXTRN	ALT_KYBD_UK_1:BYTE		;AN000;
			     C		EXTRN	ALT_UK_ITEMS:ABS		;AN000;
			     C		EXTRN	ALT_ID_DEF:BYTE 		;AN000;DT
			     C		EXTRN	S_US:WORD			;AN000;
			     C		EXTRN	S_SWISS:WORD			;AN000;
			     C		EXTRN	N_NUMPRINT:WORD 		;AN000;
			     C		EXTRN	MIN_NUMPRINT:ABS		;AN000;
			     C		EXTRN	MAX_NUMPRINT:ABS		;AN000;
			     C		EXTRN	N_PARALLEL:WORD 		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-14
GEN_COMS					;AN000;                                        

			     C		EXTRN	N_SERIAL:WORD			;AN000;
			     C		EXTRN	PRINTER_TABLES:ABS		;AN000;
			     C		EXTRN	I_PRINTER:WORD			;AN000;
			     C		EXTRN	N_PRINTER_TYPE:BYTE		;AN000;
			     C		EXTRN	E_SERIAL:ABS			;AN000;
			     C		EXTRN	E_PARALLEL:ABS			;AN000;
			     C		EXTRN	I_PORT:WORD			;AN000;
			     C		EXTRN	I_REDIRECT:WORD 		;AN000;
			     C		EXTRN	S_MODE_PARM:WORD		;AN000;
			     C		EXTRN	M_MODE_PARM:ABS 		;AN000;
			     C		EXTRN	S_CP_DRIVER:WORD		;AN000;
			     C		EXTRN	M_CP_DRIVER:ABS 		;AN000;
			     C		EXTRN	S_CP_PREPARE:WORD		;AN000;
			     C		EXTRN	M_CP_PREPARE:ABS		;AN000;
			     C		EXTRN	S_GRAPH_PARM:WORD		;AN000;
			     C		EXTRN	M_GRAPH_PARM:ABS		;AN000;
			     C		EXTRN	F_REVIEW:WORD			;AN000;
			     C		EXTRN	E_REVIEW_ACCEPT:ABS		;AN000;
			     C		EXTRN	E_REVIEW_VIEW:ABS		;AN000;
			     C		EXTRN	N_DISPLAY:BYTE			;AN000;
			     C		EXTRN	E_CPSW_DISP:ABS 		;AN000;
			     C		EXTRN	E_NOCPSW_DISP:ABS		;AN000;
			     C		EXTRN	N_YEAR:WORD			;AN000;
			     C		EXTRN	MIN_YEAR:ABS			;AN000;
			     C		EXTRN	MAX_YEAR:ABS			;AN000;
			     C		EXTRN	N_MONTH:WORD			;AN000;
			     C		EXTRN	MIN_MONTH:ABS			;AN000;
			     C		EXTRN	MAX_MONTH:ABS			;AN000;
			     C		EXTRN	N_DAY:WORD			;AN000;
			     C		EXTRN	MIN_DAY:ABS			;AN000;
			     C		EXTRN	MAX_DAY:ABS			;AN000;
			     C		EXTRN	N_HOUR:WORD			;AN000;
			     C		EXTRN	MIN_HOUR:ABS			;AN000;
			     C		EXTRN	MAX_HOUR:ABS			;AN000;
			     C		EXTRN	N_MINUTE:WORD			;AN000;
			     C		EXTRN	MIN_MINUTE:ABS			;AN000;
			     C		EXTRN	MAX_MINUTE:ABS			;AN000;
			     C		EXTRN	N_SECOND:WORD			;AN000;
			     C		EXTRN	MIN_SECOND:ABS			;AN000;
			     C		EXTRN	MAX_SECOND:ABS			;AN000;
			     C		EXTRN	PARM_BLOCK:WORD 		;AN000;
			     C		EXTRN	CMD_BUFF:BYTE			;AN000;
			     C		EXTRN	S_STR40:WORD			;AN000;JW
			     C		EXTRN	M_STR40:ABS			;AN000;JW
			     C		EXTRN	S_STR120_1:WORD 		;AN000;
			     C		EXTRN	P_STR120_1:BYTE 		;AN000;
			     C		EXTRN	M_STR120_1:ABS			;AN000;
			     C		EXTRN	S_STR120_2:WORD 		;AN000;
			     C		EXTRN	M_STR120_2:ABS			;AN000;
			     C		EXTRN	S_STR120_3:WORD 		;AN000;
			     C		EXTRN	M_STR120_3:ABS			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-15
GEN_COMS					;AN000;                                        

			     C		EXTRN	S_STR120_4:WORD 		;AN039;SEH
			     C		EXTRN	M_STR120_4:ABS			;AN039;SEH
			     C		EXTRN	SC_LINE:WORD			;AN000;
			     C		EXTRN	MC_LINE:ABS			;AN000;
			     C		EXTRN	COPY_INST_1200_1440:BYTE 	;AN000;
			     C		EXTRN	E_INST_1200_1440:ABS		;AN000;
			     C		EXTRN	COPY_SEL_SHEL:BYTE		;AN000;
			     C		EXTRN	E_SEL_SHEL:ABS			;AN000;
			     C		EXTRN	COPY_SEL_EGA:BYTE		;AN000;
			     C		EXTRN	E_SEL_EGA:ABS			;AN000;
			     C		EXTRN	COPY_SEL_LCD:BYTE		;AN000;
			     C		EXTRN	E_SEL_LCD:ABS			;AN000;
			     C		EXTRN	COPY_OPER_1200_1440:BYTE	;AN000;
			     C		EXTRN	E_OPER_1200_1440:ABS		;AN000;
			     C		EXTRN	COPY_SHELL_1200_1440:BYTE	;AN000;
			     C		EXTRN	E_SHELL_1200_1440:ABS		;AN000;
			     C		EXTRN	S_DOS_SHEL_DISK:WORD		;AN000;
			     C		EXTRN	S_DOS_SEL_360:WORD		;AN000;GHG 360KB
			     C		EXTRN	S_DOS_UTIL1_DISK:WORD		;AN000;GHG 360KB
			     C		EXTRN	S_DOS_UTIL2_DISK:WORD		;AN000;GHG 360KB
			     C		EXTRN	S_DOS_UTIL3_DISK:WORD		;AN000;GHG 360KB
			     C		EXTRN	S_DOS_COM_360:WORD		;AN000;DT  360KB
			     C		EXTRN	E_FILE_ATTR:ABS 		;AN000;
			     C		EXTRN	S_SHELL2:BYTE			;AN000;DT
			     C		EXTRN	S_SHELL_NEW:WORD		;AN000;DT
			     C		EXTRN	S_SHELL_NEW_B:WORD		;AN000;DT
			     C		EXTRN	S_DSKCPY_TO_B:WORD		;AN000;DT
			     C		EXTRN	S_SELCOM_NEW_B:WORD		;AN000;DT
			     C		EXTRN	S_SELHLP_NEW_B:WORD		;AN000;DT
			     C		EXTRN	S_SELPRT_NEW_B:WORD		;AN000;DT
			     C		EXTRN	S_SELEXE_NEW_B:WORD		;AN000;DT
			     C		EXTRN	S_SELDAT_NEW_B:WORD		;AN000;DT
			     C		EXTRN	S_SELCOM_C:WORD 		;AN000;DT
			     C		EXTRN	S_SELDAT_C:WORD 		;AN000;DT
			     C		EXTRN	S_SELPRT_C:WORD 		;AN000;DT
			     C		EXTRN	S_SELEXE_C:WORD 		;AN000;DT
			     C		EXTRN	S_SELHLP_C:WORD 		;AN000;DT
			     C		EXTRN	S_AUTOEX_C:WORD 		;AN000;DT
			     C		EXTRN	S_CONSYS_C:WORD 		;AN000;DT
			     C		EXTRN	S_VDISK_B:WORD			;AN000;JW
			     C		EXTRN	S_ANSI_B:WORD			;AN000;JW
			     C		EXTRN	S_APPEND_B:WORD 		;AN000;JW
			     C		EXTRN	S_GRAFTABL_B:WORD		;AN000;JW
			     C		EXTRN	S_GRAPHICS_B:WORD		;AN000;JW
			     C		EXTRN	S_GRAPHPRO_B:WORD		;AN000;JW
			     C		EXTRN	S_RECOVER_B:WORD		;AN000;JW
			     C		EXTRN	S_FASTOPEN_B:WORD		;AN000;JW
			     C		EXTRN	S_VDISK_C:WORD			;AN000;JW
			     C		EXTRN	S_ANSI_C:WORD			;AN000;JW
			     C		EXTRN	S_APPEND_C:WORD 		;AN000;JW
			     C		EXTRN	S_GRAFTABL_C:WORD		;AN000;JW
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-16
GEN_COMS					;AN000;                                        

			     C		EXTRN	S_GRAPHICS_C:WORD		;AN000;JW
			     C		EXTRN	S_GRAPHPRO_C:WORD		;AN000;JW
			     C		EXTRN	S_RECOVER_C:WORD		;AN000;JW
			     C		EXTRN	S_FASTOPEN_C:WORD		;AN000;JW
			     C		EXTRN	S_AUTO_NEW:WORD 		;AN000;
			     C		EXTRN	S_CONFIG_NEW:WORD		;AN000;
			     C		EXTRN	S_AUTO_NEW_B:WORD		;AN000;
			     C		EXTRN	S_CONFIG_NEW_B:WORD		;AN000;
			     C		EXTRN	S_OS2_CONFIG_C:WORD		;AN065;SEH
			     C		EXTRN	S_OS2_AUTO_C:WORD		;AN065;SEH
			     C		EXTRN	S_AUTO_REN:WORD 		;AN000;
			     C		EXTRN	S_CONFIG_REN:WORD		;AN000;
			     C		EXTRN	S_AUTO_NEW_C:WORD		;AN000;
			     C		EXTRN	S_CONFIG_NEW_C:WORD		;AN000;
			     C		EXTRN	S_AUTO_C:WORD			;AN000;
			     C		EXTRN	S_CONFIG_C:WORD 		;AN000;
			     C		EXTRN	S_CONFIG_AUTO:BYTE		;AN000;
			     C		EXTRN	S_AUTO_MENU:WORD		;AN000;
			     C		EXTRN	S_AUTO_FDISK:WORD		;AN000;
			     C		EXTRN	S_AUTO_REBOOT:WORD		;AN000;
			     C		EXTRN	E_FILES:ABS			;AN000;
			     C		EXTRN	SH_FILES:ABS			;AN000;DT
			     C		EXTRN	HIDE_SEL:BYTE			;AN000;
			     C		EXTRN	HIDE_STARTUP:BYTE		;AN004;GHG
			     C		EXTRN	E_HIDE_SEL:ABS			;AN000;
			     C		EXTRN	E_HIDE_STARTUP:ABS		;AN004;GHG
			     C		EXTRN	S_PREP_EGA:WORD 		;AN000;
			     C		EXTRN	S_PREP_LCD:WORD 		;AN000;
			     C		EXTRN	S_CP_SEL:WORD			;AN000;
			     C		EXTRN	S_MODE:WORD			;AN000;
			     C		EXTRN	N_HANDLE:WORD			;AN000;
			     C		EXTRN	N_WRITE_HANDLE:WORD		;AN000;
			     C		EXTRN	N_WRITE_ERR_CODE:WORD		;AN000;
			     C		EXTRN	N_RETCODE:WORD			;AN000;
			     C		EXTRN	N_COUNTER:WORD			;AN000;
			     C		EXTRN	N_WORD_1:WORD			;AN000;
			     C		EXTRN	N_WORD_2:WORD			;AN000;
			     C		EXTRN	N_WORD_3:WORD			;AN000;
			     C		EXTRN	N_WORD_4:WORD			;AN000;
			     C		EXTRN	N_WORD_5:WORD			;AN000;
			     C		EXTRN	N_WORD_6:WORD			;AN000;
			     C		EXTRN	N_BYTE_1:BYTE			;AN025;
			     C		EXTRN	SAVE_AREA:BYTE			;AN000;
			     C		EXTRN	S_KEYB:WORD			;AN000;
			     C		EXTRN	S_FDISK:WORD			;AN000;
			     C		EXTRN	S_DISKCOPY:WORD 		;AN000;
			     C		EXTRN	S_DISKCOPY_PARM:WORD		;AN000;
			     C		EXTRN	SC_1:WORD			;AN000;
			     C		EXTRN	SC_2:WORD			;AN000;
			     C		EXTRN	SC_PRI:WORD			;AN000;
			     C		EXTRN	SC_EXT:WORD			;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-17
GEN_COMS					;AN000;                                        

			     C		EXTRN	SC_LOG:WORD			;AN000;
			     C		EXTRN	S_FORMAT:WORD			;AN000;
			     C		EXTRN	S_FORMAT_B:WORD 		;AN000;
			     C		EXTRN	S_FORMAT_A:WORD 		;AN000;
			     C		EXTRN	S_REPLACE:WORD			;AN000;
			     C		EXTRN	S_REPLACE_PAR1:WORD		;AN000;
			     C		EXTRN	S_A_STARS:WORD			;AN000;
			     C		EXTRN	S_SLASH_A:WORD			;AN000;
			     C		EXTRN	S_SLASH_R:WORD			;AN000;JW
			     C		EXTRN	S_SLASH_S:WORD			;AN000;
			     C		EXTRN	S_SLASH_Q:WORD			;AN000;
			     C		EXTRN	S_SLASH:WORD			;AN000;DT
			     C		EXTRN	S_COLON:WORD			;AN000;
			     C		EXTRN	S_SYS_C:WORD			;AN000;
			     C		EXTRN	S_VOL_SEL:WORD			;AN000;
			     C		EXTRN	S_DRIVE_C:WORD			;AN000;
			     C		EXTRN	N_HOUSE_CLEAN:BYTE		;AN000;
			     C		EXTRN	E_CLEAN_YES:ABS 		;AN000;
			     C		EXTRN	E_CLEAN_NO:ABS			;AN000;
			     C		EXTRN	E_CR:ABS			;AN000;
			     C		EXTRN	E_LF:ABS			;AN000;
			     C		EXTRN	E_PART_PRI_DOS:ABS		;AN000;
			     C		EXTRN	E_PART_EXT_DOS:ABS		;AN000;
			     C		EXTRN	E_PART_LOG_DRI:ABS		;AN000;
			     C		EXTRN	E_FREE_MEM_EDOS:ABS		;AN000;
			     C		EXTRN	E_FREE_MEM_DISK:ABS		;AN000;
			     C		EXTRN	E_PART_OTHER:ABS		;AN000;
			     C		EXTRN	E_PART_UNFORMAT:ABS		;AN000;
			     C		EXTRN	E_PART_FORMAT:ABS		;AN000;
			     C		EXTRN	E_PART_FAT:ABS			;AN000;
			     C		EXTRN	E_PART_KSAM:ABS 		;AN000;
			     C		EXTRN	E_PART_UNDEF:ABS		;AN000;
			     C		EXTRN	E_PART_IGNORE:ABS		;AN000;
			     C		EXTRN	N_DISK_1:WORD			;AN000;
			     C		EXTRN	E_DISK_1:ABS			;AN000;
			     C		EXTRN	N_DISK_2:WORD			;AN000;
			     C		EXTRN	E_DISK_2:ABS			;AN000;
			     C		EXTRN	E_DISK_INV:ABS			;AN000;
			     C		EXTRN	E_DISK_NO_PART:ABS		;AN000;
			     C		EXTRN	E_DISK_VAL_PART:ABS		;AN000;
			     C		EXTRN	N_DISK_1_S1:WORD		;AN000;
			     C		EXTRN	N_DISK_2_S1:WORD		;AN000;
			     C		EXTRN	E_DISK_PRI:ABS			;AN000;
			     C		EXTRN	E_DISK_EXT_DOS:ABS		;AN000;
			     C		EXTRN	E_DISK_LOG_DRI:ABS		;AN000;
			     C		EXTRN	E_DISK_EDOS_MEM:ABS		;AN000;
			     C		EXTRN	E_DISK_FREE_MEM:ABS		;AN000;
			     C		EXTRN	N_DISK_1_S2:WORD		;AN000;
			     C		EXTRN	N_DISK_2_S2:WORD		;AN000;
			     C		EXTRN	E_SPACE_NONE:ABS		;AN000;
			     C		EXTRN	E_SPACE_EDOS:ABS		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-18
GEN_COMS					;AN000;                                        

			     C		EXTRN	E_SPACE_DISK:ABS		;AN000;
			     C		EXTRN	F_PARTITION:WORD		;AN000;
			     C		EXTRN	E_PART_DEFAULT:ABS		;AN000;
			     C		EXTRN	E_PART_USER:ABS 		;AN000;
			     C		EXTRN	F_FORMAT:WORD			;AN000;
			     C		EXTRN	E_FORMAT_FAT:ABS		;AN000;
			     C		EXTRN	E_FORMAT_NO:ABS 		;AN000;
			     C		EXTRN	N_DISK1_MODE:WORD		;AN000;
			     C		EXTRN	E_DISK1_INSTALL:ABS		;AN000;
			     C		EXTRN	E_DISK1_REPLACE:ABS		;AN000;
			     C		EXTRN	DISK_1_TABLE:BYTE		;AN000;
			     C		EXTRN	DISK_1_VAL_ITEM:BYTE		;AN000;
			     C		EXTRN	DISK_1_START:BYTE		;AN000;
			     C		EXTRN	M_DISK_1_ITEMS:ABS		;AN000;
			     C		EXTRN	DISK_2_TABLE:BYTE		;AN000;
			     C		EXTRN	DISK_2_VAL_ITEM:BYTE		;AN000;
			     C		EXTRN	DISK_2_START:BYTE		;AN000;
			     C		EXTRN	M_DISK_2_ITEMS:ABS		;AN000;
			     C		EXTRN	N_NAME_PART:BYTE		;AN000;
			     C		EXTRN	N_SIZE_PART:WORD		;AN000;
			     C		EXTRN	N_STATUS_PART:BYTE		;AN000;
			     C		EXTRN	N_TYPE_PART:BYTE		;AN000;
			     C		EXTRN	P_DRIVE_PART:BYTE		;AN000;
			     C		EXTRN	N_LEVEL1_PART:BYTE		;AN065;SEH version number for DOS 4.00 1st part = bl
				ank
			     C		EXTRN	N_LEVEL2_PART:BYTE		;AN065;SEH version number for DOS 4.00 2nd part = 4
			     C		EXTRN	N_LEVEL3_PART:BYTE		;AN065;SEH version number for DOS 4.00 3rd part = .
			     C		EXTRN	N_LEVEL4_PART:BYTE		;AN065;SEH version number for DOS 4.00 4th part = 0
			     C		EXTRN	STACK_INDEX:BYTE		;AN000;
			     C		EXTRN	SELECT_STACK:WORD		;AN000;
			     C		EXTRN	STACK_SIZE:ABS			;AN000;
			     C		EXTRN	N_DEST:BYTE			;AN000;
			     C		EXTRN	E_DEST_DOS:ABS			;AN000;
			     C		EXTRN	E_DEST_SHELL:ABS		;AN000;
			     C		EXTRN	INT_24_ERROR:WORD		;AN000;
			     C		EXTRN	INT_24_FLAG:BYTE		;AN000;
			     C		EXTRN	OLD_INT_24:DWORD		;AN000;
			     C		EXTRN	OLD_INT_23:DWORD		;AN000;
			     C		EXTRN	OLD_INT_2F:DWORD		;AN000;
			     C		EXTRN	ACTIVE:BYTE			;AN000;
			     C		EXTRN	ALTERNATE:BYTE			;AN000;
			     C		EXTRN	EGA:ABS 			;AN000;
			     C		EXTRN	LCD:ABS 			;AN000;
			     C		EXTRN	CGA:ABS 			;AN000;
			     C		EXTRN	MONO:ABS			;AN000;
			     C		EXTRN	S_PRINT_FILE:WORD		;AN000;
			     C		EXTRN	M_PRINT_FILE:ABS		;AN000;
			     C		EXTRN	I_DESTINATION:WORD		;AN000;JW
			     C		EXTRN	E_ENTIRE_DISK:ABS		;AN000;JW
			     C		EXTRN	N_MOD80:WORD			;AN000;JW
			     C		EXTRN	E_IS_MOD80:ABS			;AN000;JW
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-19
GEN_COMS					;AN000;                                        

			     C		EXTRN	E_DISK_ROW:ABS			;AN000;JW
			     C		EXTRN	E_DISK_COL:ABS			;AN000;JW
			     C		EXTRN	E_DRIVE_ROW:ABS 		;AN000;JW
			     C		EXTRN	E_DRIVE_COL:ABS 		;AN000;JW
			     C		EXTRN	N_DISK_NUM:BYTE 		;AN000;JW
			     C		EXTRN	MEM_SIZE:WORD			;AN000;DT
			     C		EXTRN	MACHINE_TYPE:BYTE		;AN000;JW
			     C		EXTRN	PS2_FLAG:BYTE			;AN000;JW
			     C		EXTRN	MOD25_OR_MOD30:ABS		;AN000;JW
			     C		EXTRN	DRIVE_A:ABS			;AN000;JW
			     C		EXTRN	DRIVE_B:ABS			;AN000;JW
			     C		EXTRN	N_DSKCPY_ERR:BYTE		;AN000;JW
			     C		EXTRN	E_DSKCPY_RETRY:ABS		;AN000;JW
			     C		EXTRN	E_DSKCPY_OK:ABS 		;AN000;JW
			     C		EXTRN	N_DRIVE_OPTION:WORD		;AN111;JW
			     C		EXTRN	E_OPTION_B_C:ABS		;AN111;JW
			     C		EXTRN	E_OPTION_A_C:ABS		;AN111;JW
			     C		EXTRN	SOURCE_PANEL:WORD		;AN111;JW
			     C		EXTRN	DEST_PANEL:WORD 		;AN111;JW
			     C		EXTRN	FORMAT_WHICH:BYTE		;AN111;JW
			     C		EXTRN	STARTUP:ABS			;AN111;JW
			     C		EXTRN	SHELL:ABS			;AN111;JW
			     C		EXTRN	DISK_PANEL:WORD 		;AN000;JW
			     C		EXTRN	SEARCH_FILE:WORD		;AN000;JW
			     C		EXTRN	SUB_ERROR:BYTE			;AN000;JW
			     C		EXTRN	S_COMMAND_COM:WORD		;AN017;JW
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	
					INCLUDE STRUC.INC					;AN000;
			     C	;;STRUC--Stucture Macro Library
			     C	;;Optimizing Version 2.30  03/31/87
			     C	
			     C	else	       ;else for if1
			     C	$Pop	$Temp
			     C	;;if	   $Temp ne $NoType
			     C	.xcref $NoConj,$And,$Or,$Short,$Near,$NearToShort,$AndOr,$Temp,$Temp2,$Dist
			     C	.xcref $NoType,$ConjIfType,$IfType,$ElseType,$WhileType,$ConjWhileType
			     C	.xcref $RepeatType,$ConjUntilType,$ForType,$ConjLeaveType,jncxz
			     C	.xcref $SelectType,$WhenType,$OtherwiseType,$ConjWhenType
			     C	.xcref jeq,jgt,jlt,jneq,jngt,jnlt,jnna,jnnae,jnnb,jnnbe,jnnc,jnncxz
			     C	.xcref jnne,jnng,jnnge,jnnl,jnnle,jnno,jnnp,jnns,jnnz,jnpe,jnpo,$BuildJump
			     C	.xcref $GetConj,$GetDist,$Poke,$Peek,$Push,$Pop,$Label,$CondJump,$CondLoop,$Test
			     C	.xcref $TopTest,$leave2,$until2,$StrucError,j,jn,jand,jnand,jnnand
			     C	.xcref jnnonzero,jnonzero,jnzero,jzero
			     C	.xcref $st,$sn,$OrFound,$LoopEnd,$LeaveFound,$DefDist
			     C	.xcref $LastLabel,$LastLabelOrg,$EquateLabel,$TraceLabel,$CondJump2,$ncxz
			     C	endif
			     C	
			     C	
 = 0000                      C	$st	= 0
 = 0000                      C	$sn	= 0
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-20
GEN_COMS					;AN000;                                        

 = 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					;AN000;
			     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 ASCII-N string for passing
			     C	;;	 parameters.  The string is defined below.
			     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 with at least one byte for the
			     C	;;	 purpose of changing the ASCII-N string to an ASCII-Z string.
			     C	;;
			     C	;;****************************************************************************
			     C	;;****************************************************************************
			     C	;;  Macro Change History.
			     C	;;
			     C	;;  June 18, 1987 - Split MACROS.INC into 5 smaller 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, there is an INCLUDE statement
			     C	;;		   to include the next file.  Therefore, 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 macro.
			     C	;;
			     C	;;  June 24, 1987 - Added the PREPARE_FILE, WRITE_LINE and SAVE_FILE macros.
			     C	;;		  - Revised the SCAN_PARAMETERS macro to read two of the
			     C	;;		    parameters from a file instead of the command line.
			     C	;;
			     C	;;  June 26, 1987 - Changed the EXEC_PROGRAM macros to perform a call to
			     C	;;		    EXEC_PROGRAM_ROUTINE which performs the same tasks are the
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-21
GEN_COMS					;AN000;                                        

			     C	;;		    previously defined macro.  EXEC_PROGRAM_ROUTINE was added
			     C	;;		    to ROUTINES.INC.
			     C	;;
			     C	;;  June 29, 1987 - Changed the GET_COUNTRY_INDEX to a subroutine call to
			     C	;;		    GET_CNTY_INDEX_ROUTINE.  The routine has been changed
			     C	;;		    to get the new information from the structure, NUM_DESIGNATES,
			     C	;;		    CPSW_STAT, and RESERVED_1.
			     C	;;		   - Changed GET_COUNTRY_DEFAULTS, GET_KEYBOARD_INDEX and
			     C	;;		     GET_KEYBOARD macros to perform subroutines calls.
			     C	;;
			     C	;;****************************************************************************
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-22
GEN_COMS					;AN000;                                        

			     C	PAGE					;AN000;
			     C	INCLUDE  MAC_EQU.INC			;AN000;
			     C	INCLUDE VERSIONA.INC				;AN047;SEH check DOS version in VERSIONA.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 Get Version function
			     C	       ;  int 021h			;Version ret. in AX,minor version first
			     C	       ;  cmp ax,expected_version	;ALL utilities 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 nam
				es 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 the buffer
 = 0006                      C	ERR_FINDING_NAME	EQU	  6		;AN000; There was an error locating a printer name a
				fter a P or S
 = 0007                      C	ERR_ACCESSING_FILE	EQU	  7		;AN000; There was an error updating the file pointer
 = 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 memory
 = 000B                      C	ERR_CDP_CPP		EQU	  11		;AN000; A prn defn had either a CDP or CPP but not b
				oth
 = 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.INC ;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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-23
GEN_COMS					;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;
 = 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;
			     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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-24
GEN_COMS					;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/write
			     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
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   PUSHH  ALLOWS THE PROGRAMER TO SPECIFY A LIST 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 LIST 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	;;****************************************************************************
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-25
GEN_COMS					;AN000;                                        

			     C	;;
			     C	;;   DOSCALL:  DOS interrupt 21 function call
			     C	;;
			     C	;;   SYNTAX:   DOSCALL
			     C	;;
			     C	;;   INPUT:    none
			     C	;;
			     C	;;   OUTPUT:   none
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   DOSCALL INVOKES THE DOS INTERRUPT 21 FUNCTION CALL.
			     C	;;   THE AH REGISTER MUST ALREADY BE LOADED WITH 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 immediate 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 identified 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 word variable.
			     C	;;
			     C	;;   SYNTAX:  COPY_WORD  var_dest, var_src
			     C	;;
			     C	;;   INPUT:   var_dest - The destination word variable.
			     C	;;	      var_src - The source word variable.
			     C	;;
			     C	;;   OUTPUT:  none
			     C	;;
			     C	;;   OPERATION:  The contents of var_src remain intact.
			     C	;;		 The contents of AX is destroyed.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-26
GEN_COMS					;AN000;                                        

			     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 variable.
			     C	;;	      var_src - The source byte variable.
			     C	;;
			     C	;;   OUTPUT:  none
			     C	;;
			     C	;;   OPERATION:  The contents of var_src remain intact.
			     C	;;		 The contents of AL is destroyed.
			     C	;;
			     C	;;************************************************************************
			     C	COPY_BYTE  MACRO  VAR_DEST, VAR_SRC		;;AN000;
			     C		MOV	AL, VAR_SRC			;;AN000;
			     C		MOV	VAR_DEST,AL			;;AN000;
			     C		ENDM					;;AN000;
			     C	;;****************************************************************************
			     C	;;
			     C	;;   COMP_WORDS:  Compare two 16 bit memory variable.
			     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 variable	 (16 bits)
			     C	;;
			     C	;;   OUTPUT:  none
			     C	;;
			     C	;;   OPERATION:  The two 16 bit memory variables are compared and the status
			     C	;;	 flags are updated.  Refer to the ASSEMBLER 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 variables.
			     C	;;
			     C	;;   SYNTAX:  COMP_BYTES  var_dest, var_src
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-27
GEN_COMS					;AN000;                                        

			     C	;;   INPUT:   var_dest - The destination memory variable ( 8 bits)
			     C	;;	      var_src - The source memory variable	 ( 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 ASSEMBLER reference for more details.
			     C	;;
			     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 variable 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 incremented 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 variable 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 decremented by one.
			     C	;;
			     C	;;************************************************************************
			     C	DEC_VAR 	MACRO	VAR_DEST		;;AN000;
			     C		DEC	VAR_DEST			;;AN000;
			     C		ENDM					;;AN000;
			     C	;;****************************************************************************
			     C	;;
			     C	;;   INIT:    initializes the DS to the beginning of the data
			     C	;;
			     C	;;   SYNTAX:  INIT
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-28
GEN_COMS					;AN000;                                        

			     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 together to form a third one
			     C	;;
			     C	;;   SYNTAX:  MERGE_STRING  name_dest, immed_max, name_src1, name_src2
			     C	;;
			     C	;;   INPUT:   name_dest - Destination string variable (ASCII-N format)
			     C	;;	      immed_max - Maximum length of destination string
			     C	;;	      name_src1 - Source string variable 1 (ASCII-N format)
			     C	;;	      name_src2 - Source string variable 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 to 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 space is used up.
			     C	;;	 It is assumed that the input strings and the output string
			     C	;;	 are in the current data segment.
			     C	;;
			     C	;;
			     C	;;**************************************************************************************
			     C	MERGE_STRING   MACRO   NAME_DEST, IMMED_MAX, NAME_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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-29
GEN_COMS					;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_max, name_src
			     C	;;
			     C	;;   INPUT:   name_dest - Destination string variable (ASCII-N format)
			     C	;;	      immed_max - Maximum length of destination string
			     C	;;	      name_src	- Source string variable   (ASCII-N format)
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OPERATION:
			     C	;;	 The ASCII-N string text defined in name_scr is appended to the
			     C	;;	 end of name_dest.
			     C	;;
			     C	;;**************************************************************************************
			     C	APPEND_STRING	MACRO	NAME_DEST, IMMED_MAX, NAME_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 variable.
			     C	;;	 immed_max - The maximum length of destination string.
			     C	;;	 name_src - source string veriable (ASCII-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 name_dest will not exceed immed_max.
			     C	;;
			     C	;;**************************************************************************
			     C	COPY_STRING MACRO  NAME_DEST, IMMED_MAX, NAME_SRC	;;AN000;
			     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	;;**************************************************************************
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-30
GEN_COMS					;AN000;                                        

			     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 pushed 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:
			     C	;;	 None.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OPERATION: The screen label address from the 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 screen 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-BYTE USER MEMORY AREA
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-31
GEN_COMS					;AN000;                                        

			     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 CURRENT DIRECTORY FOR THE
			     C	;;   SPECIFIED DRIVE IN THE BUFFER.
			     C	;;   THE RETURNING STRING IS AN ASCIIZ STRING AND 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				;;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 GIVING THE REQUIRED
			     C	;;			   PATH
			     C	;;   OUTPUT:	CY = 0, AX = undefined,  call was successful
			     C	;;		CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   THE DIRECTORY IS MADE USING THE DOS INT 21H (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
			     C		CALL  RESTORE_INT_24		;;AN000;
			     C		ENDM				;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-32
GEN_COMS					;AN000;                                        

			     C	;;**************************************************************************
			     C	;;
			     C	;;   MAKE_DIR_PATHS: Create the specified directory 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 error code.
			     C	;;
			     C	;;   OPERATION: The directory pathname is created.
			     C	;;	 If the drive letter and colon are not followed by a '\', then the
			     C	;;	 macro will start creating the directories from the default directory.
			     C	;;	 If they are followed by a '\', then the 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 giving the REQUIRED PATH
			     C	;;
			     C	;;   OUTPUT:   CY = 0, AX = undefined,	successful
			     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 in 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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-33
GEN_COMS					;AN000;                                        

			     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 to 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 identified 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 ASCII-N string for passing
			     C	;;	 parameters.  The string is defined below.
			     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 with 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:26
SELECT - SELECT.EXE				;AN000;                              Page     1-34
GEN_COMS					;AN000;                                        

			     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 to close.
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = undefined,  successful
			     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_attr, var_handle
			     C	;;
			     C	;;   INPUT:   name_file - filename in ASCII-N string format.
			     C	;;	      immed_attr - file attribute
			     C	;;
			     C	;;   OUTPUT:  CY = 0 Success: var_handle contain the file handle
			     C	;;	      CY = 1 Error: AX contains as error code
			     C	;;
			     C	;;
			     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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-35
GEN_COMS					;AN000;                                        

			     C	;;****************************************************************************
			     C	;;
			     C	;;   ERASE_FILE: Erase File
			     C	;;
			     C	;;   SYNTAX:  ERASE_FILE  filename
			     C	;;
			     C	;;   INPUT:   filename = POINTER TO ASCII-N STRING - FILE NAME
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = undefined,  successful
			     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					;;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 STRING - 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 used in the search
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-36
GEN_COMS					;AN000;                                        

			     C	;;   OUTPUT:  CY = 0, AX = undefined,  successful
			     C	;;	      CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   FINDFILE FINDS THE FIRST FILENAME SPECIFIED USING INT 21 (AH=4EH).
			     C	;;   AND LOADS INFORMATION INTO THE CURRENT DTA.
			     C	;;   NOTE : THE DEFAULT DTA IS AT 80H IN THE PSP.
			     C	;;   IF AN ERROR OCCURS, THE CARRY FLAG IS SET, 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 directory.
			     C	;;
			     C	;;   SYNTAX:  FIND_NEXT
			     C	;;
			     C	;;   INPUT:
			     C	;;	 None.
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = undefined,  successful
			     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 command for the next match.
			     C	;;	 If none is found then the carry flag is set.
			     C	;;	 This macro uses the data in the DTA for the directory seach so
			     C	;;	 it is important not to change the address 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 errors
			     C		MOV	AH,4FH				;;AN000;
			     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, handle
			     C	;;
			     C	;;   INPUT:   file_name = POINTER TO ASCII-N STRING - FILE NAME
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-37
GEN_COMS					;AN000;                                        

			     C	;;	      mode =  0,1,2 (read,write,read/write)
			     C	;;	      handle = POINTER TO A LOCATION TO STORE FILE HANDLE
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = FILE HANDLE, successful
			     C	;;	      CY = 1, AX = error code
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   THIS MACRO OPENS A FILE FOR READ/WRITE OPERATIONS.
			     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	;;
			     C	;;   SYNTAX:  RENAME_FILE  old_name, new_name
			     C	;;
			     C	;;   INPUT:   old_name = POINTER TO ASCII-N STRING -OLD FILE NAME
			     C	;;	      new_name = POINTER TO ASCII-N STRING -NEW FILE NAME
			     C	;;
			     C	;;   OUTPUT:  CY = 0, AX = undefined,  successful
			     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 of bytes from a file into a
			     C	;;	 buffer location.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-38
GEN_COMS					;AN000;                                        

			     C	;;
			     C	;;   SYNTAX:  READ_FILE  var_handle, buffer, immed_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 - number of bytes read
			     C	;;	 CY = 1, Read error. AX contains the error 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 WRITTEN.
			     C	;;
			     C	;;************************************************************************
			     C	READ_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 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, immed_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 - number of bytes written.
			     C	;;	 CY = 1, Write error. AX contains the error code.
			     C	;;
			     C	;;   OPERATION:
			     C	;;
			     C	;;   THIS MACRO WRITES TO AN ALREADY OPENED FILE.
			     C	;;   IT MAKES USE OF INT 21 (AH=3DH).
			     C	;;   AX WILL RETURN THE NUMBER BYTES ACTUALLY WRITTEN.
			     C	;;
			     C	;;************************************************************************
			     C	WRITE_FILE   MACRO   VAR_HANDLE, BUFFER, IMMED_CHAR, VAR_CHAR ;;AN000;
			     C							 ;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-39
GEN_COMS					;AN000;                                        

			     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 create. (ASCII-N format)
			     C	;;
			     C	;;   OUTPUT:  CY = 0: No error was encountered.
			     C	;;	      CY = 1: There was an error encountered.
			     C	;;
			     C	;;   OPERATION:  A attempt is made to create the 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 be calling WRITE_LINE macro.  The
			     C	;;	 data will be temperarily stored in a buffer 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 filename string
			     C	    CALL PREPARE_FILE_ROUTINE			 ;;AN000; Call a routine to do that actual work
			     C	    ENDM					 ;;AN000;
			     C	;;**************************************************************************
			     C	;;
			     C	;;   WRITE_LINE:  Write a line to the file being 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 stored 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 actual work
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-40
GEN_COMS					;AN000;                                        

			     C	    ENDM					 ;;AN000;
			     C	;;**************************************************************************
			     C	;;
			     C	;;   SAVE_FILE:  Empty the data in the buffer being 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 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 the 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, then 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 name string
			     C	    CALL SAVE_FILE_ROUTINE			 ;;AN000; Call a subroutine to do the actual 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 other than level 4.00
			     C	;;
			     C	;;   OPERATION:  DOS function call 30h is performed to get the current DOS
			     C	;;	 version number.  If the DOS version is not 4.00, the carry flag is set.
			     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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-41
GEN_COMS					;AN000;                                        

			     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	;;
			     C	;;   CHECK_EXPANDED_MEMORY:  Check if the system 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 supported.
			     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 parameters. (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 present.  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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-42
GEN_COMS					;AN000;                                        

			     C	;;
			     C	;;	 All other models do not support expanded memory.
			     C	;;
			     C	;;************************************************************************
			     C	CHECK_EXPANDED_MEMORY	MACRO	VAR_XMA, VAR_MOD80	;;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	;;****************************************************************************
			     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 ASCII-N string for passing
			     C	;;	 parameters.  The string is defined below.
			     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 with 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:26
SELECT - SELECT.EXE				;AN000;                              Page     1-43
GEN_COMS					;AN000;                                        

			     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 drive
			     C	;;
			     C	;;   OPERATION:  DOS Function Call 19h is performed to get the default drive.
			     C	;;	 If the default drive is not drive A (AL <> 0), the carry flag is set.
			     C	;;
			     C	;;************************************************************************;;
			     C	CHECK_DEFAULT_DRIVE	MACRO			 ;;AN000;
			     C	    MOV  AH, 19H				 ;;AN000; Fn. Number for getting current 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:
			     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 EDOS partitions exist
			     C	;;	 var_status = 01H: Primary DOS partition exists
			     C	;;		    = 02H: Extended DOS partitions 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 status bit can be set
			     C	;;	 var_status_2 = 0: There is no free space in EDOS partition and the
			     C	;;			   disk.
			     C	;;		      = 1: There is free space in the EDOS partition.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-44
GEN_COMS					;AN000;                                        

			     C	;;		      = 2: There is no EDOS partition, but there is free
			     C	;;			   disk space.
			     C	;;	 buffer   = Buffer for fixed disk status information.
			     C	;;
			     C	;;   OPERATION:  A call is performed to the FDISK utility (GET_DISK_STATUS)
			     C	;;	 to get the status of the specified fixed 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, VAR_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;
			     C	    MOV  VAR_STATUS_2, DX			;;AN000;
			     C	    ENDM					;;AN000;
			     C	;;************************************************************************;;
			     C	;;
			     C	;;   CHECK_DISKETTE:  Check the type of diskettes attached to the system.
			     C	;;
			     C	;;   SYNTAX:  CHECK_DISKETTE  var_disk_a, var_disk_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 inch)
			     C	;;		    = 1 740K diskette (3.5  inch)
			     C	;;		    = 2 1.2M diskette (5.25 inch)
			     C	;;		    = 7 1.44M diskette (3.5 inch)
			     C	;;	 var_disk_b = 0FFH Diskette drive B not present
			     C	;;		    = 0, 1, 2, 7 as defined above 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 function 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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-45
GEN_COMS					;AN000;                                        

			     C	;;		7 = Other
			     C	;;
			     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.  Shift to right
			     C		 MOV	 AH, 0				 ;;AN000; Clear the high byte
			     C		 INC	 AX				 ;;AN000; Make into the actual number of diskettes
			     C		 .IF < AX GT MAX_NUM_DISKETTE > 	 ;;AN000; Are there more then 2 diskette 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 		 ;;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_1440_SECTORS >  ;;AN000;
			     C			   MOV	AL, E_DISKETTE_INV	 ;;AN000;
			     C		      .else				;yuk- don't have time to get this working on 1.4M dr
				ives
			     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: combinations ;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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-46
GEN_COMS					;AN000;                                        

			     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	    .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 if install destination will
			     C	;;	 be selected by user or determined by SELECT.
			     C	;;
			     C	;;   SYNTAX:  CHECK_VALID_MEDIA  var_disk_a, var_disk_b, var_tot, var_disk,
			     C	;;				 var_def, var_index, 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 dikettes
			     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 drive 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 or C
			     C	;;		    = 4 possible drive A or B
			     C	;;
			     C	;;   OPERATION:  The diskette drive types are checked 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 selected 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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-47
GEN_COMS					;AN000;                                        

			     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 only, 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 is 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_O
				PTION ;;AN111;JW
			     C	
			     C	    MOV  AL, VAR_DISK_A 			;;AN111;JW
			     C	    MOV  BL, VAR_DISK_B 			;;AN111;JW
			     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 field and return status information.
			     C	;;
			     C	;;   SYNTAX:  SCAN_DISK_TABLE	 immed_disk, var_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 into table is valid
			     C	;;		       = 1: Error - Index invalid 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.  The 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 the index of the entry.
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-48
GEN_COMS					;AN000;                                        

			     C	;;	Note:  The index of the first entry in 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 disk status table for the
			     C	;;	 specified index item.
			     C	;;
			     C	;;   SYNTAX:  UPDATE_DISK_TABLE  immed_disk, var_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 table is valid, the disk table
			     C	;;	 is updated for the specifed index.  Disk status information is obtained
			     C	;;	 from pre-defined locations as specified above.
			     C	;;
			     C	;;************************************************************************;;
			     C	UPDATE_DISK_TABLE	MACRO	IMMED_DISK, VAR_INDEX, VAR_REF	;;AN000;
			     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 partition 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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-49
GEN_COMS					;AN000;                                        

			     C	;;	 var_dos  =  Size of DOS partition
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 name_dos = Size of DOS partition in ASCII-N format.
			     C	;;	 name_edos = Size of EDOS partition in ASCII-N format.
			     C	;;
			     C	;;   OPERATION:  The DOS partition size is converted to ASCII-N format.
			     C	;;	 The size of the Extended DOS partition is obtained by subtracting
			     C	;;	 the size of DOS partition from the free disk space.  If the size of
			     C	;;	 any partition is zero, a zero string length is returned.
			     C	;;
			     C	;;************************************************************************;;
			     C	GET_PARTITION_SIZE	MACRO	VAR_TOT, VAR_DOS, 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 size
			     C	    WORD_TO_CHAR     VAR_TOT, NAME_EDOS 	 ;;AN000; Convert binay values to ASCII
			     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 return a pointer to the system
			     C	;;	 descriptor vector.  The model byte is retrieved from this vector
			     C	;;	 and placed in the supplied variable. The 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:26
SELECT - SELECT.EXE				;AN000;                              Page     1-50
GEN_COMS					;AN000;                                        

			     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 ASCII-N string for passing
			     C	;;	 parameters.  The string is defined below.
			     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 with 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:26
SELECT - SELECT.EXE				;AN000;                              Page     1-51
GEN_COMS					;AN000;                                        

			     C	page					;;AN000;
			     C	;;****************************************************************************
			     C	;;
			     C	;;   GET_DATE: Get the current system date.
			     C	;;
			     C	;;   SYNTAX:  GET_DATE	var_year, var_month, var_day
			     C	;;
			     C	;;   INPUT:   NONE
			     C	;;
			     C	;;   OUTPUT:  CY = 0: CURRENT SYSTEM DATE IS 1/1/80
			     C	;;	      CY = 1: CURRENT SYSTEM DATE IS NOT 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 performed to get the current
			     C	;;		 system date.  If the system date is not 1/1/80, the
			     C	;;		 carry flag is set.
			     C	;;
			     C	;;****************************************************************************
			     C	GET_DATE	MACRO	VAR_YEAR, VAR_MONTH, VAR_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
			     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 performed to get the current
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-52
GEN_COMS					;AN000;                                        

			     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;
			     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, var_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 performed to set the system date.
			     C	;;	 If the date is not valid, the carry flag is set.
			     C	;;
			     C	;;************************************************************;;
			     C	SET_DATE   MACRO	VAR_YEAR, VAR_MONTH, VAR_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;
			     C		   STC				;;AN000;
			     C		.ENDIF				;;AN000;
			     C		ENDM				;;AN000;
			     C	;;****************************************************************************
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-53
GEN_COMS					;AN000;                                        

			     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 performed to set the current system
			     C	;;		 time.	If the time is not valid, 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;
			     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 time is different from the
			     C	;;		 specified system time.
			     C	;;
			     C	;;   SYNTAX:  CHECK_TIME_CHANGE: var_u_hour, var_u_min, var_u_sec,
			     C	;;				 var_s_hour, var_s_min, var_s_sec
			     C	;;
			     C	;;   INPUT:   var_u_hour = User specified hour		 ( 16 bits )
			     C	;;	      var_u_min  = User specified minutes	 ( 16 bits )
			     C	;;	      var_u_sec  = User specified seconds	 ( 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 the same as the system time.
			     C	;;	      CY = 1: User specified time is different from the system time.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-54
GEN_COMS					;AN000;                                        

			     C	;;
			     C	;;   OPERATION:  The user time and system time are compared and the carry
			     C	;;		 flag is updated as specified above.
			     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 ;;AN000;
			     C		 MOV  AX, VAR_S_HOUR		;;AN000;
			     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 > ;;AN000;
			     C			       CLC		;;AN000;
			     C			       JMP   EXIT_CHECK_TIME_CHANGE;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 date is different from the
			     C	;;		 specified system date.
			     C	;;
			     C	;;   SYNTAX:  CHECK_DATE_CHANGE: var_u_year, var_u_month, var_u_day,
			     C	;;				 var_s_year, var_s_month, var_s_day
			     C	;;
			     C	;;   INPUT:   var_u_year   = User specified year	   ( 16 bits )
			     C	;;	      var_u_month  = User specified month	   ( 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 the same as the system date.
			     C	;;	      CY = 1: User specified date is different from the system date.
			     C	;;
			     C	;;   OPERATION:  The user date and system date are compared and the carry
			     C	;;		 flag is updated as specified above.
			     C	;;
			     C	;;************************************************************************;;
			     C	CHECK_DATE_CHANGE	MACRO	VAR_U_YEAR, VAR_U_MONTH, VAR_U_DAY, VAR_S_YEAR, VAR_S_MONTH, VAR_S_D
				AY ;;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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-55
GEN_COMS					;AN000;                                        

			     C			   MOV	AX, VAR_S_DAY		;;AN000;
			     C			   .IF < VAR_U_DAY   EQ AX >	;;AN000;
			     C			       CLC			;;AN000;
			     C			       JMP   EXIT_CHECK_DATE_CHANGE ;;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	;;
			     C	;;   INPUT:
			     C	;;	 file_handle = The handle of the file to 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 invalid
			     C	;;
			     C	;;   OPERATION:  The data and time values are converted to internal formats
			     C	;;	 defined below and DOS function call 57h 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 08 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 second increments
			     C	;;
			     C	;;	 The internal date format is:
			     C	;;		 bits	 15 14 13 12 11 10 09 08 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	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-56
GEN_COMS					;AN000;                                        

			     C	;;****************************************************************************
			     C	SET_FILE_DATE_TIME	MACRO	FILE_HANDLE, VAR_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;
			     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 operating
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-57
GEN_COMS					;AN000;                                        

			     C	;;
			     C	;;   OPERATION:  A call to the real time clock services (INT 1Ah, AH = 02h)
			     C	;;	 is performed to get the real time clock.  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 returned.
			     C	;;
			     C	;;	 Since the older machines may not have the clock services interrupt,
			     C	;;	 the registers are set to zero before the call is made and checked for
			     C	;;	 non-zero on return.
			     C	;;
			     C	;;****************************************************************************
			     C	CHECK_CLOCK	MACRO		;;AN000;
			     C		MOV	CX, 0		;;AN000; Zero the registers for later comparison
			     C		MOV	DX, 0		;;AN000;
			     C		MOV	AH, 02		;;AN000;
			     C		INT	1AH		;;AN000; Time of day service routine
			     C		.IF < ZERO CX > AND	;;AN000; If CX and DH are zero, clock is not there.
			     C		.IF < ZERO DH > 	;;AN000;
			     C		   STC			;;AN000;
			     C		.ELSE			;;AN000;
			     C		   CLC			;;AN000; The clock 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 ASCII-N string for passing
			     C	;;	 parameters.  The string is defined below.
			     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 with 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:26
SELECT - SELECT.EXE				;AN000;                              Page     1-58
GEN_COMS					;AN000;                                        

			     C	page					;;AN000;
			     C	;;************************************************************************;;
			     C	;;
			     C	;;   GET_COUNTRY_DEFAULTS: Get country, keyboard and codepage for the
			     C	;;		 specified entry from the CTY_TABLE.
			     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 table
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 N_COUNTRY    = Country code
			     C	;;	 N_KYBD_VAL   = 0: Keyboard code is not valid
			     C	;;		      = 1: Keyboard code is valid
			     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, primary codepage and the
			     C	;;	 seondary codepage from the CTY_TABLE for the specified index is
			     C	;;	 returned as spedified above.
			     C	;;
			     C	;;   Note:  Index of the first item is the table 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 table
			     C	    CALL GET_CNTY_DEF_ROUTINE			 ;;AN000;
			     C	    ENDM					 ;;AN000;
			     C	
			     C	;;************************************************************************;;
			     C	;;
			     C	;;   GET_DOS_COUNTRY: Get current country information.
			     C	;;
			     C	;;   SYNTAX:  GET_DOS_COUNTRY  buffer, var_country
			     C	;;
			     C	;;   INPUT:
			     C	;;	 BUFFER = 38 byte data buffer area for country information.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 VAR_COUNTRY = Default country code
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-59
GEN_COMS					;AN000;                                        

			     C	;;   OPERATION:  DOS function call 65h (id=1) is performed to get the extended
			     C	;;	 country information into the specified data buffer for the default
			     C	;;	 and the active CON device.  The country code value from the data buffer
			     C	;;	 is returned in the memory variable specified.
			     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 (current)
			     C		MOV	DX, -1				 ;;AN000; Get information for default country
			     C		MOV	CX, 38				 ;;AN000; Amount of data to return
			     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 country code into the table.
			     C	;;
			     C	;;   SYNTAX:  GET_COUNTRY_INDEX  var_country, var_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 the 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, VAR_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 value
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-60
GEN_COMS					;AN000;                                        

			     C	    MOV  VAR_TAB, DX				 ;;AN000; Which table it was found in
			     C	    MOV  VAR_INDEX, BX				 ;;AN000; Which location in that table
			     C	    ENDM					 ;;AN000;
			     C	;;****************************************************************************
			     C	;;
			     C	;;   GET_KEYBOARD_INDEX: Scan KYBD_TABLE for the specified keyboard code and
			     C	;;			 return index of keyboard code in the table and the
			     C	;;			 alternate keyboard indicator.
			     C	;;
			     C	;;   SYNTAX:  GET_KEYBOARD_INDEX  name_kybd, var_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 KYBD_TAB_A
			     C	;;		   = 2: Keyboard is in table KYBD_TAB_B
			     C	;;	 var_index = The index into keyboard table.
			     C	;;	 var_alt   = 0: No alternate keyboard
			     C	;;		   = 1: Alternate keyboard present
			     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 search for
			     C	    CALL GET_KYBD_INDEX_ROUTINE 		 ;;AN000; Search for this keyboard code
			     C	    MOV  VAR_TABLE, DX				 ;;AN000; Which table the code was found in
			     C	    MOV  VAR_INDEX, BX				 ;;AN000; Which index in the table
			     C	    MOV  VAR_ALT, AL				 ;;AN000; Returned alternate keyboard byte
			     C	    ENDM					 ;;AN000;
			     C	;;************************************************************************;;
			     C	;;
			     C	;;   GET_KEYBOARD: Get the keyboard code and the 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_index, name_kybd, var_alt
			     C	;;
			     C	;;   INPUT:
			     C	;;	 var_table = 1: Keyboard code is in table KYBD_TAB_A
			     C	;;		   = 2: Keyboard code is is table KYBD_TAB_B
			     C	;;	 var_index  = index into the keyboard table.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 name_kybd = keyboard code in ASCII-N format.
			     C	;;	 var_alt   = 0: No alternate keyboard
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-61
GEN_COMS					;AN000;                                        

			     C	;;		   = 1: Alternate keyboard present
			     C	;;
			     C	;;   OPERATION:  The keyboard code from the KYBD_TABLE for the specified
			     C	;;	 index item is returned.  Also, the alternate 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, NAME_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			 ;;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 specified keyboards alternate keyboard
			     C	;;	 code list.
			     C	;;
			     C	;;   SYNTAX:  GET_ALT_KYBD_TABLE  name_kybd, var_table, var_kyb
			     C	;;
			     C	;;   INPUT:
			     C	;;	 name_kybd  = Keyboard code in ASCII-N format.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 var_table = Pointer to alternat keyboards list.
			     C	;;	 var_kyb   = 1: French
			     C	;;		   = 2: Italian
			     C	;;		   = 3: UK English
			     C	;;
			     C	;;   OPERATION:  The ALT_KYB_TABLE is scanned for 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 table
			     C	    MOV  AL, ALT_KYB_TABLE			 ;;AN000; Number of entries in the table
			     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 	 ;;AN000;
			     C	    .WHILE < BL LE AL > 			 ;;AN000;
			     C		 INC  BL				 ;;AN000;
			     C		 ADD  SI, TYPE ALT_KYB_DEF		 ;;AN000;
			     C	    .ENDWHILE					 ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-62
GEN_COMS					;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 keyboard 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 keyboard table
			     C	;;	 var_kyb    = 1: French
			     C	;;		    = 2: Italian
			     C	;;		    = 3: UK English
			     C	;;	 var_index  = Index into the keyboard table.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	 name_kybd = The keyboard code in ASCII-N format.
			     C	;;
			     C	;;   OPERATION:  The keyboard code from the specified 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 length 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 required entry
			     C							 ;;
			     C	    PUSH ES					 ;;AN000;
			     C	    PUSH DS					 ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-63
GEN_COMS					;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 keyboard code
			     C	    MOV  [DI], CX				 ;;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 memory and begins execution.
			     C	;;
			     C	;;   SYNTAX:  EXEC_PROGRAM  child, name_com, parm_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 Stderr 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 end of the buffer.  (The
			     C	;;	 command line length can be zero.
			     C	;;
			     C	;;	 The segment offsets in the parameter block 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
			     C	;;	 parent program (SELECT) gets control, all available memory is
			     C	;;	 allocated to it.  It is assumed that memory has been freed (Function
			     C	;;	 call 4Ah - FREE_MEM) before invoking this function.
			     C	;;
			     C	;;************************************************************************;;
			     C	EXEC_PROGRAM	MACRO  CHILD, NAME_COM, PARM_BLOCK, 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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-64
GEN_COMS					;AN000;                                        

			     C	    ENDM					 ;;AN000;
			     C	;;*****************************************************************************
			     C	;;
			     C	;;   FREE_MEM: Free memory by modifying the memory block
			     C	;;
			     C	;;   SYNTAX:  FREE_MEM	address
			     C	;;
			     C	;;   INPUT:
			     C	;;	 address - The address of the first free 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 TO
			     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, 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 BIOS function to scroll the
			     C	;;	screen completely.
			     C	;;
			     C	;;****************************************************************************
			     C	CLEAR_SCREEN	MACRO				;;AN000;
			     C		MOV	CX,0			;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-65
GEN_COMS					;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,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 on black
			     C	;;
			     C	;;   SYNTAX:  CLEAR_SCREEN2
			     C	;;
			     C	;;   INPUT:
			     C	;;	None.
			     C	;;
			     C	;;   OUTPUT:
			     C	;;	None.
			     C	;;
			     C	;;   OPERATION: Clears the screen using the BIOS 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; 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 left 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.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-66
GEN_COMS					;AN000;                                        

			     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
			     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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-67
GEN_COMS					;AN000;                                        

			     C	;;
			     C	;;   INPUT:   label = an assembler label for a branching instruction
			     C	;;
			     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 number 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 specifed value.
			     C	;;
			     C	;;   OPERATION:  The specified 8 bit numeric variable 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	;;
			     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 specifed value.
			     C	;;
			     C	;;   OPERATION:  The specified 16 bit numeric variable contents are converted
			     C	;;	 to ASCII and stored in ASCII-N format.  Leading zeros will not be
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-68
GEN_COMS					;AN000;                                        

			     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	;;												
					  ;;AN000;
			     C	;; Note: Many of the macros make use of an ASCII-N string for passing				
					  ;;AN000;
			     C	;;	 parameters.  The string is defined below.						
					  ;;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 with 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:26
SELECT - SELECT.EXE				;AN000;                              Page     1-69
GEN_COMS					;AN000;                                        

			     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 scanned for parameters.  The			
					  ;;AN000;
			     C	;;	 return codes for the various parameters are provided in variables			
					  ;;AN000;
			     C	;;	 defined above. 									
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;  Note:											
					  ;;AN000;
			     C	;;	 Before this macro is executed, there must be as ASSUME ES:DATA 			
					  ;;AN000;
			     C	;;	 statement.  If not, the parser will not execute properly and				
					  ;;AN000;
			     C	;;	 either the computer will hang or erroneous values will be returned.			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;****************************************************************************			
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-70
GEN_COMS					;AN000;                                        

					  ;;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 parameters.						
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   SYNTAX:  SCAN_INFO_FILE   option_0, option_1, option_2, option_3, path, filename, buffer, buff_
				size		  ;;AC033;SEH add option_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 read 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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-71
GEN_COMS					;AN000;                                        

			     C	;;	 option_3 = 1										
					  ;;AC033;
			     C	;;		  = 2										
					  ;;AC033;
			     C	;;		  = 0FFh: Parameter is invalid (not 1, 2)					
					  ;;AC033;
			     C	;;	 path	  = Install path in ASCII-N format						
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   OPERATION: 										
					  ;;AN000;
			     C	;;	 If the parameter on the command line is FDISK, then the				
					  ;;AN000;
			     C	;;	 file specified in FILENAME is opened and additional parameters 			
					  ;;AN000;
			     C	;;	 are read.  If the parameters in the file 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, BUFF_SIZ
				E
			     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											
					  ;;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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-72
GEN_COMS					;AN000;                                        

			     C	    MOV  OPTION_2, CX										
					  ;;AN000;
			     C	    MOV  OPTION_3, DX										
					  ;;AN033;SEH return OPTION_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_table, 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;
			     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 files 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 the list. 					
					  ;;AN000;
			     C	;;												
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-73
GEN_COMS					;AN000;                                        

					  ;;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 destination is C, then a path				
					  ;;AN000;
			     C	;;	      path can be specified.								
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	COPY_FILES    MACRO	DEST, FILE_TABLE, NUM_FILES						
					  ;;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_FILES, 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
			     C	    MOV  SI, OFFSET PATH									
					  ;;AN111;JW
			     C	    CALL HOOK_INT_24		;AN000;JW							
					  ;;AN111;JW
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-74
GEN_COMS					;AN000;                                        

			     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, target_disk						
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   INPUT:											
					  ;;AN000;
			     C	;;	 source_disk = 1: Read the files from the first diskette				
					  ;;AN000;
			     C	;;		     = 2: Read the files from the second diskette				
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;	 target_disk = 1: Copy the files to the start-up diskette				
					  ;;AN000;
			     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_DISK						
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-75
GEN_COMS					;AN000;                                        

					  ;;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 profile file and load the printer			
					  ;;AN000;
			     C	;;	 names into a table.									
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     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 where the printer names table is held ( 16 bit )	
					  ;;AN000;
			     C	;;	 NAMES_TABLE_OFFSET	= The offset in the segment of the printer names table ( 16 bit )
					  ;;AN000;
			     C	;;	 LONGEST_NAME		= The longest printer name in the file ( 16 bit )		
					  ;;AN000;
			     C	;;	 SIZE_NAMES_TABLE_ENTRY = The number of bytes between each printer name in the table (abs va
				lue ) ;;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 defined below.					
					  ;;AN000;
			     C	;;	 AX - Contains the DOS error number if the error listed in BX is a			
					  ;;AN000;
			     C	;;	      file related error.								
					  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-76
GEN_COMS					;AN000;                                        

			     C	;;												
					  ;;AN000;
			     C	;;	 Error number			    Explaination.					
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;	      1 	     There is not enough 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 DOS error code.					
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;	      3 	     There was an error reading the printer profile file.		
					  ;;AN000;
			     C	;;			     AX contains the DOS 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 printer profile file was found to			
					  ;;AN000;
			     C	;;			     be longer then allowed in the buffer.				
					  ;;AN000;
			     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 then 255 printer definitions in the 		
					  ;;AN000;
			     C	;;			     file.								
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-77
GEN_COMS					;AN000;                                        

					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;	      9 	     The number of actual definitions in the printer profile		
					  ;;AN000;
			     C	;;			     file did not agree with the number given at the			
					  ;;AN000;
			     C	;;			     beginning of the file.						
					  ;;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;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	GET_PRINTER_TITLES MACRO     FILENAME								
					  ;;AN000;
			     C													
					  ;;AN000;
			     C	    MOV  DI, OFFSET FILENAME	       ; The name of the printer definition file		
					  ;;AN000;
			     C	    CALL GET_PRINTER_TITLES_ROUTINE    ; Subroutine to perform the function.			
					  ;;AN000;
			     C	    ENDM											
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   GET_PRINTER_INFO:	Given the number of a printer, 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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-78
GEN_COMS					;AN000;                                        

			     C	;;	 printer_num = The number the printer to get the information on.			
					  ;;AN000;
			     C	;;		       The number is the location of this printer in the			
					  ;;AN000;
			     C	;;		       printer names list.							
					  ;;AN000;
			     C	;;   OUTPUT:											
					  ;;AN000;
			     C	;;	 If CY = 0, there were no errors.							
					  ;;AN000;
			     C	;;	 The following variable are updated with 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 encountered.						
					  ;;AN000;
			     C	;;	      BX = An error code indicating the type of error that occured.			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;		 = 3  There was an error reading the file					
					  ;;AN000;
			     C	;;		 = 7  There was a error accessing the file					
					  ;;AN000;
			     C	;;		 = 11 A printer definition has either a CDP or a CPP				
					  ;;AN000;
			     C	;;			Prefix, but BOTH were not present.					
					  ;;AN000;
			     C	;;		 = 12 There was an error in the printer definition.				
					  ;;AN000;
			     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. 				
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-79
GEN_COMS					;AN000;                                        

					  ;;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 profile file and free the				
					  ;;AN000;
			     C	;;	 allocated memory.									
					  ;;AN000;
			     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 encountered.						
					  ;;AN000;
			     C	;;	 If CY = 1, There was an error. 							
					  ;;AN000;
			     C	;;	     AX = The DOS error code for the deallocate memory function 			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-80
GEN_COMS					;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;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   GET_PRINTER_PARAMS: Get parameters for specified 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 retrieve the information on.			
					  ;;AN000;
			     C	;;		    If var_port = 0, the information that is returned is			
					  ;;AN000;
			     C	;;		    that which cooresponds to var_prt.						
					  ;;AN000;
			     C	;;	   var_port = 0 : Get the information on printer number VAR_PRT 			
					  ;;AN000;
			     C	;;		    = 1 : Get the information for the printer attached to LPT1			
					  ;;AN000;
			     C	;;		    = 2 : Get the information for the printer attached to LPT2			
					  ;;AN000;
			     C	;;		    = 3 : Get the information for the printer attached to LPT3			
					  ;;AN000;
			     C	;;		    = 4 : Get the information for the printer attached to COM1			
					  ;;AN000;
			     C	;;		    = 5 : Get the information for the printer attached to COM2			
					  ;;AN000;
			     C	;;		    = 6 : Get the information for the printer attached to COM3			
					  ;;AN000;
			     C	;;		    = 7 : Get the information for the printer attached to COM4			
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-81
GEN_COMS					;AN000;                                        

					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   OUTPUT:											
					  ;;AN000;
			     C	;;	 var_status = 1: Printer information is valid						
					  ;;AN000;
			     C	;;		    = 0: Printer not valid: default values returned				
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   OPERATION: Printer information for the specified printer is returned.			
					  ;;AN000;
			     C	;;	 If the specified printer is not defined, default values will be			
					  ;;AN000;
			     C	;;	 returned.										
					  ;;AN000;
			     C	;;	      I_PRINTER      = Index into printer list (16 bit variable) : default 1		
					  ;;AN000;
			     C	;;	      N_PRINTER_TYPE = P: Parallel printer						
					  ;;AN000;
			     C	;;			     = S: Serial printer						
					  ;;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 parameters	   - ASCII-N format			
					  ;;AN000;
			     C	;;	      S_GRAPH_PARM   = Graphics parameters	   - ASCII-N format			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;	 The structures of printer information are searched for the one with			
					  ;;AN000;
			     C	;;	 the same number as specified by VAR_PRT.  If found, the information			
					  ;;AN000;
			     C	;;	 in that structure is returned in the variables listed above.				
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	GET_PRINTER_PARAMS MACRO     VAR_PRT, VAR_PORT, VAR_STATUS					
					  ;;AN000;
			     C													
					  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-82
GEN_COMS					;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 information in the printer structures		
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   SYNTAX:  SAVE_PRINTER_PARAMS  var_prt							
					  ;;AN000;
			     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 specified printer is stored.			
					  ;;AN000;
			     C	;;	      I_PRINTER      = Index into printer list (16 bit variable) : default 1		
					  ;;AN000;
			     C	;;	      N_PRINTER_TYPE = P: Parallel printer						
					  ;;AN000;
			     C	;;			     = S: Serial printer						
					  ;;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 parameters	   - ASCII-N format			
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-83
GEN_COMS					;AN000;                                        

					  ;;AN000;
			     C	;;	      S_GRAPH_PARM   = Graphics parameters	   - ASCII-N format			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;	 The information is stored in the structures 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 for 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 command in the autoexec.bat and			
					  ;;AN000;
			     C	;;	 change the parameters for that line.							
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   SYNTAX:  CHANGE_AUTOEXEC	FILENAME, APPEND_STRING 					
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   INPUT:											
					  ;;AN000;
			     C	;;	 FILENAME = An ASCII-N string containing the name of the file to change.		
					  ;;AN000;
			     C	;;	      Since the string has to be converted into an ASCII-Z string,			
					  ;;AN000;
			     C	;;	      an extra byte must always be available following the string.			
					  ;;AN000;
			     C	;;	 APPEND_STRING = An ASCII-N string containing the parameters to add to			
					  ;;AN000;
			     C	;;	      the SELECT command.								
					  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-84
GEN_COMS					;AN000;                                        

			     C	;;												
					  ;;AN000;
			     C	;;   OUTPUT:											
					  ;;AN000;
			     C	;;	 None.											
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   OPERATION: 										
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	CHANGE_AUTOEXEC    MACRO     FILENAME, APPEND_STRING						
					  ;;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;
			     C													
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   LOAD_MESSAGES:  Load the messages and initialize 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.							
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-85
GEN_COMS					;AN000;                                        

					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   OPERATION: 										
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	LOAD_MESSAGES MACRO										
					  ;;AN000;
			     C													
					  ;;AN000;
			     C	    CALL SYSLOADMSG										
					  ;;AN000;
			     C	    ENDM											
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   DISPLAY_MESSAGE:  Call the message retriever 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 displaying the message.					
					  ;;AN000;
			     C	;;	 If CY = 0, there were no errors.							
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   OPERATION: 										
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	DISPLAY_MESSAGE    MACRO     MSG_NUMBER 							
					  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-86
GEN_COMS					;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 for 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 containing 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;
			     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	;;****************************************************************************			
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-87
GEN_COMS					;AN000;                                        

					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   CHECK_PATH:  Check to see if a path is valid.						
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   SYNTAX:  CHECK_PATH    path_str, drive, root						
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   INPUT:											
					  ;;AN000;
			     C	;;	 path_str - An ASCII-N string containing the path to check.				
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;	 drive	  = 0: Drive letter cannot be specified.  (8 bit or immediate value)		
					  ;;AN000;
			     C	;;		  = 1: Drive letter is optional and can be specified.				
					  ;;AN000;
			     C	;;		  = 2: Drive letter must be specified.						
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;	 root	  = 0: First non-drive character cannot be a backslash ('\') (8 bit or immediate val
				ue)   ;;AN000;
			     C	;;		  = 1: First non-drive character may be a backslash ('\')                           
				      ;;AN000;
			     C	;;		  = 2: First non-drive character 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 invalid.						
					  ;;AN000;
			     C	;;	      = 2, There was no drive specified.						
					  ;;AN000;
			     C	;;	      = 3, There was a drive specified. 						
					  ;;AN000;
			     C	;;	      = 4, There was a leading backslash						
					  ;;AN000;
			     C	;;	      = 5, The leading backslash was NOT present.					
					  ;;AN000;
			     C	;;	      = 6, There was a trailing backslash.						
					  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-88
GEN_COMS					;AN000;                                        

			     C	;;												
					  ;;AN000;
			     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 parallel and serial ports attached			
					  ;;AN000;
			     C	;;	      to the computer.									
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   SYNTAX:  GET_NUMBER_PORTS	 parallel, serial						
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   INPUT:											
					  ;;AN000;
			     C	;;	 None.											
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   OUTPUT:											
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-89
GEN_COMS					;AN000;                                        

					  ;;AN000;
			     C	;;	 parallel = The number of parallel ports 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 interrupt 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;
			     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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-90
GEN_COMS					;AN000;                                        

			     C	;;												
					  ;;AN000;
			     C	;;   SYNTAX:  CHANGE_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 the 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 encountered.						
					  ;;AN000;
			     C	;;	 If CY = 0, there were no errors.							
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   OPERATION: The macro reads the attribute of the file, stores it in the			
					  ;;AN000;
			     C	;;	 word following the filename in the list, and then assigns the new			
					  ;;AN000;
			     C	;;	 attribute to the file. 								
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	CHANGE_ATTRIBUTE   MACRO     LIST_PTR, NUM_FILES						
					  ;;AN000;
			     C													
					  ;;AN000;
			     C	    LEA  SI, LIST_PTR				 ;; Get the address of the file list		
					  ;;AN000;
			     C	    MOV  AX, 0					 ;; Indicate we are to attach a new attribute to the
				 file ;;AN000;
			     C	    MOV  BX, NUM_FILES				 ;; Load the number of files in the list	
					  ;;AN000;
			     C	    CALL CHANGE_ATTRIBUTE_ROUTINE		 ;; Change the attributes			
					  ;;AN000;
			     C	    ENDM											
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-91
GEN_COMS					;AN000;                                        

					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   RESTORE_ATTRIBUTE: Restore the original attributes 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 the 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;
			     C	;;	 If CY = 1, there was an error encountered.						
					  ;;AN000;
			     C	;;	 If CY = 0, there were no errors.							
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   OPERATION: This macros restores the attribute previously stored for the			
					  ;;AN000;
			     C	;;	 listed files.										
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	RESTORE_ATTRIBUTE   MACRO     LIST_PTR, NUM_FILES						
					  ;;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 attribute to the
				 file ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-92
GEN_COMS					;AN000;                                        

			     C	    MOV  BX, NUM_FILES				 ;; Load the number of files in the list	
					  ;;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;
			     C	;;   SYNTAX:  COMPARE_STRINGS	string_1, string_2						
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   INPUT:											
					  ;;AN000;
			     C	;;	 string_1 = The address of the first string. (ASCII-N string)				
					  ;;AN000;
			     C	;;	 string_2 = The address of the second string. (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;
			     C	    ENDM											
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-93
GEN_COMS					;AN000;                                        

					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   CHECK_WRITE_PROTECT  Determine if the diskette 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 accessing the drive.					
					  ;;AN000;
			     C	;;	 If CY = 0, There were no errors.							
					  ;;AN000;
			     C	;;	 RET_CODE = 1: The diskette IS write protected. 					
					  ;;AN000;
			     C	;;		  = 0: The diskette is NOT write protected.					
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   OPERATION: 										
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	CHECK_WRITE_PROTECT	MACRO	  DRIVE, RET_CODE						
					  ;;AC000;JW
			     C	    MOV  CX,DRIVE										
					  ;;AN000;JW
			     C	    CALL CHECK_WRITE_ROUTINE									
					  ;;AN000;
			     C	    MOV  RET_CODE, AX										
					  ;;AN000;
			     C	    ENDM											
					  ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-94
GEN_COMS					;AN000;                                        

			     C	;;****************************************************************************			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   GET_FREE_SPACE  Determine the free disk space 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;
			     C	;;   OUTPUT:											
					  ;;AN000;
			     C	;;	 If CY = 1, there was an error accessing the disk					
					  ;;AN000;
			     C	;;	 If CY = 0, there were no errors.							
					  ;;AN000;
			     C	;;	     space = The amount of free space on 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										
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-95
GEN_COMS					;AN000;                                        

					  ;;AN000;
			     C		 MOV  WORD PTR SPACE[0], AX								
					  ;;AN000;
			     C		 MOV  WORD PTR SPACE[2], DX								
					  ;;AN000;
			     C	    .ENDIF											
					  ;;AN000;
			     C	    ENDM											
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   MATCH_DISK_FILES  Determine if a list of file 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 drive, 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 ignored.						
					  ;;AN000;
			     C	;;	 list_type = 1: Use a small list with 12 byte between filenames.			
					  ;;AN000;
			     C	;;		   = 2: Use a list with 14 bytes between filenames.				
					  ;;AN000;
			     C	;;												
					  ;;AN000;
			     C	;;   OUTPUT:											
					  ;;AN000;
			     C	;;	 If CY = 1, There was an error accessing the disk.					
					  ;;AN000;
			     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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-96
GEN_COMS					;AN000;                                        

			     C	;;												
					  ;;AN000;
			     C	;;****************************************************************************			
					  ;;AN000;
			     C	MATCH_DISK_FILES   MACRO     PATH, FILE_LIST, LIST_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;
			     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 BUFFERS = null (
				spaces)
			     C		INIT_VAR		S_FCBS, 0				;;AN000;set FCBS = null (spa
				ces)
			     C		INIT_VAR		F_ANSI, E_ANSI_NO			;;AN000;set ANSI = no
			     C		INIT_VAR		S_ANSI, 0				;;AN000;set ANSI field = nul
				l (spaces)
			     C		INIT_VAR		F_FASTOPEN, E_FASTOPEN_NO		;;AN000;set FASTOPEN = no
			     C		INIT_VAR		S_FASTOPEN, 0				;;AN000;set FASTOPEN = null 
				(spaces)
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-97
GEN_COMS					;AN000;                                        

			     C		INIT_VAR		F_GRAPHICS, E_GRAPHICS_NO		;;AN000;set GRAPHICS = no
			     C		INIT_VAR		S_GRAPHICS, 0				;;AN000;set GRAPHICS field =
				 null (spaces)
			     C		COPY_STRING		S_FILES, M_FILES, D_FILES_2		;AN000; set FILES = 8
			     C		ENDM
			     C	
			     C	INIT_VAR_BALANCE MACRO
			     C		COPY_STRING		S_BUFFERS, M_BUFFERS, D_BUFFERS_1	;;AN000;set BUFFERS = 20
			     C		INIT_VAR		S_FCBS, 0				;;AN000;set FCBS = null (spa
				ces)
			     C		INIT_VAR		F_ANSI, E_ANSI_YES			;;AN000;set ANSI = yes
			     C		INIT_VAR		S_ANSI, 0				;;AN000;set ANSI field = nul
				l (spaces)
			     C		INIT_VAR		F_FASTOPEN, E_FASTOPEN_YES		;;AN000;set FASTOPEN = yes
			     C		COPY_STRING		S_FASTOPEN, M_FASTOPEN, D_FASTOPEN_1	;;AN000;set FASTOPEN = C:=(5
				0,25)
			     C		INIT_VAR		F_GRAPHICS, E_GRAPHICS_YES		;;AN000;set GRAPHICS = yes
			     C		INIT_VAR		S_GRAPHICS, 0				;;AN000;set GRAPHICS field =
				 null (spaces)
			     C		COPY_STRING		S_FILES, M_FILES, D_FILES_1		;AN000; set FILES = 20
			     C		ENDM
			     C	
			     C	INIT_VAR_MAXIMIZE MACRO
			     C		COPY_STRING		S_BUFFERS, M_BUFFERS, D_BUFFERS_2	;;AN000;set BUFFERS = 50,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_FASTOPEN_YES		;;AN000;set FASTOPEN = yes
			     C		COPY_STRING		S_FASTOPEN, M_FASTOPEN, D_FASTOPEN_2	;;AN000;set FASTOPEN = C:(15
				0,150)
			     C		INIT_VAR		F_GRAPHICS, E_GRAPHICS_YES		;;AN000;set GRAPHICS = yes
			     C		INIT_VAR		S_GRAPHICS, 0				;;AN000;set GRAPHICS field =
				 null (spaces)
			     C		COPY_STRING		S_FILES, M_FILES, D_FILES_1		;AN000; set FILES = 20
			     C		ENDM
			     C	
			     C	SAVE_PARAMETERS MACRO		SAV_FILE, RET_CODE		;;AN000;
			     C		PREPARE_FILE		SAV_FILE			;;AN000;
			     C		WORD_TO_CHAR		F_SHELL, S_STR120_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_STR120_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_CODE		;;AN000;
			     C		ENDM							;;AN000;
			     C	
			     C	CREATE_CONFIG  MACRO	CONFIG_FILE, RET_CODE			;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-98
GEN_COMS					;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_CODE		;;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	   ;;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				;;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	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-99
GEN_COMS					;AN000;                                        

			     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 user 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		     ;;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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-100
GEN_COMS					;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;
			     C			ENDM				     ;;AN000;
			     C	
			     C	
			     C	
					INCLUDE ROUT_EXT.INC					;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; Routines in ROUTINES.ASM
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	EXTRN	 APPEND_STRING_ROUTINE:FAR			;AN000;
			     C	EXTRN	 BEEP_ROUTINE:FAR				;AN000;
			     C	EXTRN	 BIN_TO_CHAR_ROUTINE:FAR			;AN000;
			     C	EXTRN	 CHK_EX_MEM_ROUTINE:FAR 			;AN000;
			     C	EXTRN	 COPY_ROUTINE:FAR				;AN000;
			     C	EXTRN	 DISPLAY_MESSAGE_ROUTINE:FAR			;AN000;
			     C	EXTRN	 EXEC_PROGRAM_ROUTINE:FAR			;AN000;
			     C	EXTRN	 GET_CNTY_DEF_ROUTINE:FAR			;AN000;
			     C	EXTRN	 GET_CNTY_INDEX_ROUTINE:FAR			;AN000;
			     C	EXTRN	 GET_KYBD_INDEX_ROUTINE:FAR			;AN000;
			     C	EXTRN	 GET_KYBD_ROUTINE:FAR				;AN000;
			     C	EXTRN	 GET_PRINTER_PARAMS_ROUTINE: FAR		;AN000;
			     C	EXTRN	 HOOK_INT_23:FAR				;AN074;SEH ctrl-break
			     C	EXTRN	 HOOK_INT_24:FAR				;AN000;
			     C	EXTRN	 HOOK_INT_2F:FAR				;AN000;
			     C	EXTRN	 HOOK_INT_2F_256KB:FAR				;AN000;
			     C	EXTRN	 HOOK_INT_2F_FORMAT:FAR 			;AN111;JW
			     C	EXTRN	 MAKE_DIR_PATHS_ROUTINE:FAR			;AN000;
			     C	EXTRN	 POP_ROUTINE:FAR				;AN000;
			     C	EXTRN	 POS_ZERO:FAR					;AN000;
			     C	EXTRN	 PREPARE_FILE_ROUTINE:FAR			;AN000;
			     C	EXTRN	 PUSH_ROUTINE:FAR				;AN000;
			     C	EXTRN	 RESTORE_INT_23:FAR				;AN074;SEH ctrl-break
			     C	EXTRN	 RESTORE_INT_24:FAR				;AN000;
			     C	EXTRN	 RESTORE_INT_2F:FAR				;AN000;
			     C	EXTRN	 SAVE_FILE_ROUTINE:FAR				;AN000;
			     C	EXTRN	 SAVE_PRINTER_PARAMS_ROUTINE: FAR		;AN000;
			     C	EXTRN	 SCAN_PARAMETERS_ROUTINE:FAR			;AN000;
			     C	EXTRN	 SCAN_INFO_FILE_ROUTINE:FAR			;AN001; GHG for 360kb
			     C	EXTRN	 WRITE_LINE_ROUTINE:FAR 			;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; Routines in ROUTINE2.ASM
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	EXTRN	CHANGE_ATTRIBUTE_ROUTINE:FAR			;AN000;
			     C	EXTRN	CHECK_DISK_ROUTINE:FAR				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-101
GEN_COMS					;AN000;                                        

			     C	EXTRN	CHECK_DOS_PATH_ROUTINE:FAR			;AN000;
			     C	EXTRN	CHECK_VALID_MEDIA_ROUTINE:FAR			;AN000;
			     C	EXTRN	CHECK_VALID_PATH:FAR				;AN000;
			     C	EXTRN	CHECK_WRITE_ROUTINE:FAR 			;AN000;
			     C	EXTRN	CHK_W_PROTECT_FLAG:FAR				;AN000;
			     C	EXTRN	CLOSE_FILE_ROUTINE:FAR				;AN000;
			     C	EXTRN	COMPARE_ROUTINE:FAR				;AN000;
			     C	EXTRN	CREATE_FILE_ROUTINE:FAR 			;AN000;
			     C	EXTRN	ERASE_FILE_ROUTINE:FAR				;AN000;
			     C	EXTRN	CHMOD_FILE_ROUTINE:FAR				;AN000;
			     C	EXTRN	FIND_FILE_ROUTINE:FAR				;AN000;
			     C	EXTRN	MATCH_FILES_ROUTINE:FAR 			;AN000;
			     C	EXTRN	OPEN_FILE_ROUTINE:FAR				;AN000;
			     C	EXTRN	READ_FILE_ROUTINE:FAR				;AN000;
			     C	EXTRN	REMOVE_END_BLANKS:FAR				;AN000;
			     C	EXTRN	RENAME_FILE_ROUTINE:FAR 			;AN000;
			     C	EXTRN	SCAN_DISK_TABLE_ROUTINE:FAR			;AN000;
			     C	EXTRN	UPDATE_DISK_TABLE_ROUTINE:FAR			;AN000;
			     C	EXTRN	WRITE_FILE_ROUTINE:FAR				;AN000;
			     C	EXTRN	W_PROTECT_FLAG:FAR				;AN000;
			     C								;
			     C	; Routine in MOD_COPY.ASM				;
			     C	EXTRN	 MOD_XCOPY:FAR					;AN000;
			     C								;
			     C	; Routines in PRN_DEF.ASM				;
			     C	EXTRN	 CHANGE_AUTOEXEC_ROUTINE:FAR			;AN000;
			     C	EXTRN	 GET_PRINTER_INFO_ROUTINE:FAR			;AN000;
			     C	EXTRN	 GET_PRINTER_TITLES_ROUTINE:FAR 		;AN000;
			     C	EXTRN	 RELEASE_PRINTER_INFO_ROUTINE:FAR		;AN000;
			     C								;
			     C	; Routines in S_DISPLY.ASM				;
			     C	EXTRN	 SET_DISPLAY_MODE_ROUTINE:FAR			;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0000				SELECT	SEGMENT PARA PUBLIC 'SELECT'                            ;AN000;segment for far routine
					ASSUME	CS:SELECT,DS:DATA				;AN000;
												;
					PUBLIC	CREATE_CONFIG_SYS				;AN000;
					PUBLIC	CREATE_AUTOEXEC_BAT				;AN000;
					PUBLIC	CREATE_SHELL_BAT				;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;	Create AUTOEXEC.BAT file
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0000				CREATE_AUTOEXEC_BAT	PROC					;AN000;
												;
					;;;install to B:, install path	= null			;
					;;;install to root of C:, install path = c:\		;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-102
GEN_COMS					;AN000;                                        

					;;;install to directory in C:, install path = c:\path\	;
					.IF < I_DEST_DRIVE eq E_DEST_DRIVE_B >			;AN000; if install to drive B:
 0000  81 3E 0000 E 0000 E   3						cmp I_DEST_DRIVE,E_DEST_DRIVE_B 
 0006  75 08                 6						jne $l2 
					.THEN							;AN000;
					   INIT_VAR		S_DOS_PATH,0			;AN000;    set path = null
 0008  C7 06 0296 R 0000     1		MOV	S_DOS_PATH,0		; 
					.ELSE							;AN000; else
 000E  EB 28                 3						jmp short $l1 
 0010                        2	$l2: 
					   COPY_STRING		S_DOS_PATH,M_DOS_PATH,S_INSTALL_PATH;AN000;set path = user defined p
				ath
 0010  8D 3E 0296 R          1		LEA	DI, S_DOS_PATH				; 
 0014  8D 36 0000 E          1		LEA	SI, S_INSTALL_PATH				; 
 0018  B8 0032               1		MOV	AX, M_DOS_PATH				; 
 001B  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
					   .IF < S_DOS_PATH gt M_DEST_DRIVE >			;AN000;   if install is not to root 
				of drive C:
 0020  81 3E 0296 R 0000 E   3						cmp S_DOS_PATH,M_DEST_DRIVE 
 0026  7E 10                 6						jng $l1 
					   .THEN						;AN000;
					      APPEND_STRING	S_DOS_PATH,M_DOS_PATH,S_SLASH	;AN000;      append back slash
 0028  B9 0032               1		MOV	CX, M_DOS_PATH				; 
 002B  8D 3E 0296 R          1		LEA	DI, S_DOS_PATH				; 
 002F  8D 36 0000 E          1		LEA	SI, S_SLASH				; 
 0033  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   .ENDIF						;AN000;
					.ENDIF							;AN000;
 0038                        2	$l1: 
												;
					;;;write @ECHO OFF					;
					WRITE_LINE		SC_ECHO 			;AN000; write ECHO OFF command
 0038  BB 0179 R             1	    MOV  BX, OFFSET SC_ECHO			 ; 
 003B  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
												;
					;;;write SET COMSPEC=<path>\COMMAND.COM 		;
					.IF < I_DEST_DRIVE ne E_DEST_DRIVE_C >			;AC043;SEH COMSPEC formerly after PR
				OMPT ;AN111; if install destination is drive B: or A: JW
 0040  81 3E 0000 E 0000 E   3						cmp I_DEST_DRIVE,E_DEST_DRIVE_C 
 0046  74 22                 6						je $l9 
					   MERGE_STRING 	   SC_LINE,MC_LINE,SC_SET_COMSPEC,S_DRIVE_A  ;AC043;SEH ;AN000;JW
 0048  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 004C  8D 36 019F R          1		LEA	SI, SC_SET_COMSPEC				; 
 0050  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0053  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0058  B9 0000 E             1		MOV	CX, MC_LINE				; 
 005B  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 005F  8D 36 0000 E          1		LEA	SI, S_DRIVE_A				; 
 0063  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					.ELSE							;AC043;SEH ;AN000;JW
 0068  EB 20                 3						jmp short $l8 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-103
GEN_COMS					;AN000;                                        

 006A                        2	$l9: 
					   MERGE_STRING 	   SC_LINE,MC_LINE,SC_SET_COMSPEC,S_DOS_PATH	 ;AC043;SEH ;AN000;J
				W
 006A  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 006E  8D 36 019F R          1		LEA	SI, SC_SET_COMSPEC				; 
 0072  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0075  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 007A  B9 0000 E             1		MOV	CX, MC_LINE				; 
 007D  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0081  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 0085  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					.ENDIF							;AC043;SEH ;AN000;JW
 008A                        2	$l8: 
					APPEND_STRING		SC_LINE,MC_LINE, SC_COMMAND_COM ;AC043;SEH ;AN000;
 008A  B9 0000 E             1		MOV	CX, MC_LINE				; 
 008D  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0091  8D 36 01AD R          1		LEA	SI, SC_COMMAND_COM				; 
 0095  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					WRITE_LINE		SC_LINE 			;AC043;SEH ;AN000; write SET COMSPEC
				 command
 009A  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 009D  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
												;
					;;;write VERIFY <parameter>				;
					.IF < S_VERIFY gt 0 >					;AN000; if field length > zero
 00A2  83 3E 0000 E 00       3						cmp S_VERIFY,0 
 00A7  7E 28                 6						jng $l12 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_VERIFY,S_VERIFY;AN000;
 00A9  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 00AD  8D 36 0015 R          1		LEA	SI, SC_VERIFY				; 
 00B1  B8 0000 E             1		MOV	AX, MC_LINE				; 
 00B4  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 00B9  B9 0000 E             1		MOV	CX, MC_LINE				; 
 00BC  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 00C0  8D 36 0000 E          1		LEA	SI, S_VERIFY				; 
 00C4  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write VERIFY command
 00C9  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 00CC  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 00D1                        2	$l12: 
												;
					;;;write PATH <parameter>				;
					.IF < F_PATH eq E_PATH_YES > and			;AN000; if PATH command required
 00D1  81 3E 0000 E 0000 E   3						cmp F_PATH,E_PATH_YES 
 00D7  75 2F                 6						jne $l15 
					.IF < S_PATH gt 0 >					;AN000; and field length > zero
 00D9  83 3E 0000 E 00       3						cmp S_PATH,0 
 00DE  7E 28                 6						jng $l15 
					.THEN							;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-104
GEN_COMS					;AN000;                                        

					   MERGE_STRING 	SC_LINE,MC_LINE,SC_PATH, S_PATH ;AN000;
 00E0  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 00E4  8D 36 0186 R          1		LEA	SI, SC_PATH				; 
 00E8  B8 0000 E             1		MOV	AX, MC_LINE				; 
 00EB  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 00F0  B9 0000 E             1		MOV	CX, MC_LINE				; 
 00F3  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 00F7  8D 36 0000 E          1		LEA	SI, S_PATH				; 
 00FB  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write PATH command
 0100  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0103  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 0108                        2	$l15: 
												;
					;;;write APPEND <parameter>				;AN000;JW
					;;;write APPEND <path>					;
					.IF < F_APPEND eq E_APPEND_YES >			;AN000; if APPEND command required
 0108  81 3E 0000 E 0000 E   3						cmp F_APPEND,E_APPEND_YES 
 010E  75 5E                 6						jne $l18 
					   .IF < S_APPEND_P gt 0 >				;AN000; and field length > zero    J
				W
 0110  83 3E 0000 E 00       3						cmp S_APPEND_P,0 
 0115  7E 28                 6						jng $l21 
					   .THEN						;AN000; 			   J
				W
					      MERGE_STRING	   SC_LINE,MC_LINE,SC_APPEND,S_APPEND_P 		     ;AN000;
				JW
 0117  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 011B  8D 36 018D R          1		LEA	SI, SC_APPEND				; 
 011F  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0122  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0127  B9 0000 E             1		MOV	CX, MC_LINE				; 
 012A  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 012E  8D 36 0000 E          1		LEA	SI, S_APPEND_P				; 
 0132  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      WRITE_LINE	   SC_LINE			;AN000;    write APPEND command    J
				W
 0137  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 013A  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					   .ENDIF						;AN000; 			   J
				W
 013F                        2	$l21: 
					   .IF < S_APPEND gt 0 >				;AN000; and field length > zero
 013F  83 3E 0000 E 00       3						cmp S_APPEND,0 
 0144  7E 28                 6						jng $l18 
					   .THEN						;AN000;
					      MERGE_STRING	   SC_LINE,MC_LINE,SC_APPEND,S_APPEND;AN000;
 0146  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 014A  8D 36 018D R          1		LEA	SI, SC_APPEND				; 
 014E  B8 0000 E             1		MOV	AX, MC_LINE				; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-105
GEN_COMS					;AN000;                                        

 0151  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0156  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0159  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 015D  8D 36 0000 E          1		LEA	SI, S_APPEND				; 
 0161  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      WRITE_LINE	   SC_LINE			;AN000;    write APPEND command
 0166  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0169  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					   .ENDIF						;AN000;
					.ENDIF							;AN000;JW
 016E                        2	$l18: 
												;
					;;;write PROMPT <parameter>				;
					.IF < F_PROMPT eq E_PROMPT_YES > and			;AN000; if PROMPT command required
 016E  81 3E 0000 E 0000 E   3						cmp F_PROMPT,E_PROMPT_YES 
 0174  75 2F                 6						jne $l27 
					.IF < S_PROMPT gt 0 >					;AN000; and field length > zero
 0176  83 3E 0000 E 00       3						cmp S_PROMPT,0 
 017B  7E 28                 6						jng $l27 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_PROMPT,S_PROMPT;AN000;
 017D  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0181  8D 36 0196 R          1		LEA	SI, SC_PROMPT				; 
 0185  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0188  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 018D  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0190  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0194  8D 36 0000 E          1		LEA	SI, S_PROMPT				; 
 0198  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write PROMPT command
 019D  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 01A0  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 01A5                        2	$l27: 
												;
					;;;write <path>\GRAPHICS <parameter>			;
					.IF < F_GRAPHICS eq E_GRAPHICS_YES >			;AN000; if GRAPHICS command is to be
				 included
 01A5  81 3E 0000 E 0000 E   3						cmp F_GRAPHICS,E_GRAPHICS_YES 
 01AB  75 38                 6						jne $l30 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,S_DOS_PATH,SC_GRAPHICS;AN000;
 01AD  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 01B1  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 01B5  B8 0000 E             1		MOV	AX, MC_LINE				; 
 01B8  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 01BD  B9 0000 E             1		MOV	CX, MC_LINE				; 
 01C0  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 01C4  8D 36 01BA R          1		LEA	SI, SC_GRAPHICS				; 
 01C8  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, S_GRAPHICS	;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-106
GEN_COMS					;AN000;                                        

 01CD  B9 0000 E             1		MOV	CX, MC_LINE				; 
 01D0  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 01D4  8D 36 0000 E          1		LEA	SI, S_GRAPHICS				; 
 01D8  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write GRAPHICS command
 01DD  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 01E0  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 01E5                        2	$l30: 
												;
					;;;init S_STR120_1 to primary code page 		;
					;;;init S_STR120_2 to secondary code page		;
					WORD_TO_CHAR		N_CP_PRI, S_STR120_1		;AN000; primary code page in ASCII-N
				 format
 01E5  A1 0000 E             1		MOV	AX, N_CP_PRI			; 
 01E8  BF 0000 E             1		MOV	DI, OFFSET S_STR120_1		; 
 01EB  9A 0000 ---- E        1		CALL	BIN_TO_CHAR_ROUTINE		; 
					WORD_TO_CHAR		N_CP_SEC, S_STR120_2		;AN000; secondary code page in ASCII
				-N format
 01F0  A1 0000 E             1		MOV	AX, N_CP_SEC			; 
 01F3  BF 0000 E             1		MOV	DI, OFFSET S_STR120_2		; 
 01F6  9A 0000 ---- E        1		CALL	BIN_TO_CHAR_ROUTINE		; 
												;
					;;;write <path>\GRAFTABL <primary code page>		;
					.IF < F_GRAFTABL eq E_GRAFTABL_YES >			;AN000; if GRAFTABL command required
 01FB  81 3E 0000 E 0000 E   3						cmp F_GRAFTABL,E_GRAFTABL_YES 
 0201  75 38                 6						jne $l33 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,S_DOS_PATH,SC_GRAFTABL;AN000;
 0203  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0207  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 020B  B8 0000 E             1		MOV	AX, MC_LINE				; 
 020E  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0213  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0216  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 021A  8D 36 01C5 R          1		LEA	SI, SC_GRAFTABL				; 
 021E  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, S_STR120_1	;AN000;
 0223  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0226  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 022A  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 022E  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write GRAFTABL command
 0233  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0236  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 023B                        2	$l33: 
												;
					;;;write VER						;
					WRITE_LINE		SC_VER				;AN000; write VER command
 023B  BB 01D0 R             1	    MOV  BX, OFFSET SC_VER			 ; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-107
GEN_COMS					;AN000;                                        

 023E  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
												;
					;;;S_STR120_1 = primary code page			;
					;;;S_STR120_2 = secondary code apge			;
					;;;init S_STR120_3 to code page list			;
					INIT_VAR	     S_STR120_3, 0			;AN000;
 0243  C7 06 0000 E 0000     1		MOV	S_STR120_3,0		; 
					.IF < N_CP_PRI eq 0 > or				;AN000;   if primary code page is 0 
				or 437
 0249  83 3E 0000 E 00       3						cmp N_CP_PRI,0 
 024E  74 1A                 6						je $l36 
					.IF < N_CP_PRI eq 437 > 				;AN000;
 0250  81 3E 0000 E 01B5     3						cmp N_CP_PRI,437 
 0256  75 02                 6						jne $l37 
					.THEN							;AN000;      no action
					.ELSE							;AN000;   else
 0258  EB 10                 3						jmp short $l36 
 025A                        2	$l37: 
					   APPEND_STRING	S_STR120_3,M_STR120_3,S_STR120_1;AN000;      append code page to cp 
				list
 025A  B9 0000 E             1		MOV	CX, M_STR120_3				; 
 025D  8D 3E 0000 E          1		LEA	DI, S_STR120_3				; 
 0261  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 0265  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					.ENDIF							;AN000;
 026A                        2	$l36: 
												;
					.IF < N_CP_SEC eq 0 > or				;AN000;   if secondary code page is 
				0 or 437
 026A  83 3E 0000 E 00       3						cmp N_CP_SEC,0 
 026F  74 31                 6						je $l40 
					.IF < N_CP_SEC eq 437 > 				;AN000;
 0271  81 3E 0000 E 01B5     3						cmp N_CP_SEC,437 
 0277  75 02                 6						jne $l41 
					.THEN							;AN000;      no action
					.ELSE							;AN000;   else
 0279  EB 27                 3						jmp short $l40 
 027B                        2	$l41: 
					   .IF < S_STR120_3 ne 0 >				;AN000;      if primary code page is
				 in cp list
 027B  83 3E 0000 E 00       3						cmp S_STR120_3,0 
 0280  74 10                 6						je $l44 
					   .THEN						;AN000;
					      APPEND_STRING	S_STR120_3, M_STR120_3, S_SPACE ;AN000; 	append space to cp l
				ist
 0282  B9 0000 E             1		MOV	CX, M_STR120_3				; 
 0285  8D 3E 0000 E          1		LEA	DI, S_STR120_3				; 
 0289  8D 36 0000 E          1		LEA	SI, S_SPACE				; 
 028D  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   .ENDIF						;AN000;
 0292                        2	$l44: 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-108
GEN_COMS					;AN000;                                        

					   APPEND_STRING	S_STR120_3,M_STR120_3,S_STR120_2;AN000;      append code page to cp 
				list
 0292  B9 0000 E             1		MOV	CX, M_STR120_3				; 
 0295  8D 3E 0000 E          1		LEA	DI, S_STR120_3				; 
 0299  8D 36 0000 E          1		LEA	SI, S_STR120_2				; 
 029D  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					.ENDIF							;AN000;
 02A2                        2	$l40: 
												;
					;;;S_STR120_3 = code page list				;
					;;;write MODE CON CODEPAGE PREPARE ((<cp list>) <path>\<display>.CPI
					.IF < F_CPSW eq E_CPSW_YES > near			;AN000; if code page switching requi
				red
 02A2  81 3E 0000 E 0000 E   3						cmp F_CPSW,E_CPSW_YES 
 02A8  74 03                 6						je $+5 
 02AA  E9 033E R             5						jmp $l47 
					.THEN							;AN000;
					   .IF < S_STR120_3 ne 0 > near 			;AN000;   if primary/secondary code 
				pages are not 0 or 437
 02AD  83 3E 0000 E 00       3						cmp S_STR120_3,0 
 02B2  75 03                 5						jne $+5 
 02B4  E9 033E R             5						jmp $l47 
					   .THEN						;AN000;
					      MERGE_STRING	SC_LINE,MC_LINE,SC_MODE_CON,S_STR120_3;AN000;
 02B7  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 02BB  8D 36 01D7 R          1		LEA	SI, SC_MODE_CON				; 
 02BF  B8 0000 E             1		MOV	AX, MC_LINE				; 
 02C2  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 02C7  B9 0000 E             1		MOV	CX, MC_LINE				; 
 02CA  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 02CE  8D 36 0000 E          1		LEA	SI, S_STR120_3				; 
 02D2  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      APPEND_STRING	SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000;      append close bracket
 02D7  B9 0000 E             1		MOV	CX, MC_LINE				; 
 02DA  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 02DE  8D 36 0213 R          1		LEA	SI, SC_CLOSE_BRAC				; 
 02E2  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      APPEND_STRING	SC_LINE, MC_LINE,S_DOS_PATH	;AN000;      append path
 02E7  B9 0000 E             1		MOV	CX, MC_LINE				; 
 02EA  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 02EE  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 02F2  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      .IF < ACTIVE eq EGA > or				;AN000;      if EGA adaptor
 02F7  80 3E 0000 E 00 E     3						cmp ACTIVE,EGA 
 02FC  74 07                 6						je $l55 
					      .IF < ALTERNATE eq EGA >				;AN000;
 02FE  80 3E 0000 E 00 E     3						cmp ALTERNATE,EGA 
 0303  75 13                 6						jne $l54 
 0305                        3	$l55: 
					      .THEN						;AN000;
						 APPEND_STRING	SC_LINE, MC_LINE, SC_DISPLAY_EGA;AN000; 	append	EGA.CPI)
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-109
GEN_COMS					;AN000;                                        

 0305  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0308  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 030C  8D 36 00E2 R          1		LEA	SI, SC_DISPLAY_EGA				; 
 0310  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      .ELSEIF < ACTIVE eq LCD > or			;AN000;      if LCD adaptor
 0315  EB 1F                 3						jmp short $l53 
 0317  90                    3						nop 
 0318                        2	$l54: 
 0318  80 3E 0000 E 00 E     3						cmp ACTIVE,LCD 
 031D  74 07                 6						je $l57 
					      .IF < ALTERNATE eq LCD >				;AN000;
 031F  80 3E 0000 E 00 E     3						cmp ALTERNATE,LCD 
 0324  75 10                 6						jne $l53 
 0326                        3	$l57: 
					      .THEN						;AN000;
						 APPEND_STRING	SC_LINE, MC_LINE, SC_DISPLAY_LCD;AN000; 	append LCD.CPI)
 0326  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0329  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 032D  8D 36 00F1 R          1		LEA	SI, SC_DISPLAY_LCD				; 
 0331  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      .ENDIF						;AN000;
 0336                        2	$l53: 
					      WRITE_LINE	SC_LINE 			;AN000;      write MODE CON CODEPAGE
				 command
 0336  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0339  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					   .ENDIF						;AN000;
					.ENDIF							;AN000;
 033E                        2	$l47: 
												;
					;;;S_STR120_3 = cp list 				;
					;;;write MODE LPT1 CODEPAGE PREPARE=((<cp list>) <path>\<cp paramaeters.CPI>)
					;;;write MODE LPT2 CODEPAGE PREPARE=((<cp list>) <path>\<cp paramaeters.CPI>)
					;;;write MODE LPT3 CODEPAGE PREPARE=((<cp list>) <path>\<cp paramaeters.CPI>)
					;;;N_WORD_1 = parallel port number			;
					INIT_VAR		N_WORD_1, 1			;AN000; set port number = 1
 033E  C7 06 0000 E 0001     1		MOV	N_WORD_1,1		; 
					.IF < F_CPSW eq E_CPSW_YES > near			;AN000; if code page switching requi
				red
 0344  81 3E 0000 E 0000 E   3						cmp F_CPSW,E_CPSW_YES 
 034A  74 03                 6						je $+5 
 034C  E9 0427 R             5						jmp $l58 
					.THEN							;AN000;
					   .REPEAT						;AN000;    repeat code block
 034F                        2	$l61: 
					      GET_PRINTER_PARAMS 0, N_WORD_1, N_RETCODE 	;AN000;       get printer parameters
 034F  B8 0000               1	    MOV  AX, 0											  ; 
 0352  8B 1E 0000 E          1	    MOV  BX, N_WORD_1										
					  ; 
 0356  9A 0000 ---- E        1	    CALL GET_PRINTER_PARAMS_ROUTINE								
					  ; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-110
GEN_COMS					;AN000;                                        

 035B  A3 0000 E             1	    MOV  N_RETCODE, AX 										  ; 
					      .IF < N_RETCODE eq 1 > and near			;AN000;       if valid return
 035E  83 3E 0000 E 01       3						cmp N_RETCODE,1 
 0363  74 03                 6						je $+5 
 0365  E9 0419 R             5						jmp $l63 
					      .IF < N_PRINTER_TYPE eq E_PARALLEL > and near	;AN000; 	 and parallel printe
				r
 0368  80 3E 0000 E 00 E     3						cmp N_PRINTER_TYPE,E_PARALLEL 
 036D  74 03                 6						je $+5 
 036F  E9 0419 R             5						jmp $l63 
					      .IF < S_CP_DRIVER gt 0 > and near 		;AN000; 	 and driver and prep
				are
 0372  83 3E 0000 E 00       3						cmp S_CP_DRIVER,0 
 0377  7F 03                 6						jg $+5 
 0379  E9 0419 R             5						jmp $l63 
					      .IF < S_CP_PREPARE gt 0 > near			;AN000; 	 parameters valid
 037C  83 3E 0000 E 00       3						cmp S_CP_PREPARE,0 
 0381  7F 03                 6						jg $+5 
 0383  E9 0419 R             5						jmp $l63 
					      .THEN						;AN000;
						 COPY_STRING	SC_LINE, MC_LINE, SC_MODE_LPT	;AN000; 	 append MODE LPT
 0386  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 038A  8D 36 01F6 R          1		LEA	SI, SC_MODE_LPT				; 
 038E  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0391  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
						 WORD_TO_CHAR	N_WORD_1, S_STR120_2		;AN000;
 0396  A1 0000 E             1		MOV	AX, N_WORD_1			; 
 0399  BF 0000 E             1		MOV	DI, OFFSET S_STR120_2		; 
 039C  9A 0000 ---- E        1		CALL	BIN_TO_CHAR_ROUTINE		; 
						 APPEND_STRING	SC_LINE, MC_LINE, S_STR120_2	;AN000; 	 append lpt number
 03A1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 03A4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 03A8  8D 36 0000 E          1		LEA	SI, S_STR120_2				; 
 03AC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE, MC_LINE, SC_PREPARE	;AN000; 	 append CODEPAGE PRE
				PARE
 03B1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 03B4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 03B8  8D 36 0206 R          1		LEA	SI, SC_PREPARE				; 
 03BC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE, MC_LINE, S_STR120_3	;AN000; 	 append cp list
 03C1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 03C4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 03C8  8D 36 0000 E          1		LEA	SI, S_STR120_3				; 
 03CC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; 	 append close bracke
				t
 03D1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 03D4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 03D8  8D 36 0213 R          1		LEA	SI, SC_CLOSE_BRAC				; 
 03DC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-111
GEN_COMS					;AN000;                                        

						 APPEND_STRING	SC_LINE, MC_LINE, S_DOS_PATH	;AN000; 	 append path
 03E1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 03E4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 03E8  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 03EC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE, MC_LINE, S_CP_PREPARE	;AN000; 	 append driver param
				eters
 03F1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 03F4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 03F8  8D 36 0000 E          1		LEA	SI, S_CP_PREPARE				; 
 03FC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; 	 append close bracke
				t
 0401  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0404  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0408  8D 36 0213 R          1		LEA	SI, SC_CLOSE_BRAC				; 
 040C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 WRITE_LINE	SC_LINE 			;AN000;    write PRINTER.SYS command
 0411  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0414  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					      .ENDIF						;AN000;
 0419                        2	$l63: 
					      INC_VAR		N_WORD_1			;AN000;       inc printer number
 0419  FF 06 0000 E          1		INC	N_WORD_1			; 
					   .UNTIL < N_WORD_1 gt 3 > near			;AN000;    end of repeat block
 041D  83 3E 0000 E 03       3						cmp N_WORD_1,3 
 0422  7F 03                 6						jg $+5 
 0424  E9 034F R             5						jmp $l61 
					.ENDIF							;AN000;
 0427                        2	$l58: 
												;
					;;;write serial printer parameters and redirection command
					;;;write MODE COMx:<parameter>				;
					;;;write MODE LPTy=COMx 				;
					;;;N_WORD_1 = serial port number			;
					INIT_VAR		N_WORD_1, 4			;AN000; set port number = 4
 0427  C7 06 0000 E 0004     1		MOV	N_WORD_1,4		; 
					INIT_VAR		N_WORD_2, 1			;AN000; set serial port number = 1
 042D  C7 06 0000 E 0001     1		MOV	N_WORD_2,1		; 
					.REPEAT 						;AN000; repeat code block
 0433                        2	$l66: 
					   GET_PRINTER_PARAMS 0, N_WORD_1, N_RETCODE		;AN000;    get printer parameters
 0433  B8 0000               1	    MOV  AX, 0											  ; 
 0436  8B 1E 0000 E          1	    MOV  BX, N_WORD_1										
					  ; 
 043A  9A 0000 ---- E        1	    CALL GET_PRINTER_PARAMS_ROUTINE								
					  ; 
 043F  A3 0000 E             1	    MOV  N_RETCODE, AX 										  ; 
					   .IF < N_RETCODE eq 1 > and near			;AN000;    if valid return
 0442  83 3E 0000 E 01       3						cmp N_RETCODE,1 
 0447  74 03                 6						je $+5 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-112
GEN_COMS					;AN000;                                        

 0449  E9 0511 R             5						jmp $l68 
					   .IF < N_PRINTER_TYPE eq E_SERIAL > and near		;AN000;       and serial printer
 044C  80 3E 0000 E 00 E     3						cmp N_PRINTER_TYPE,E_SERIAL 
 0451  74 03                 6						je $+5 
 0453  E9 0511 R             5						jmp $l68 
					   .IF < S_MODE_PARM gt 0 > near			;AN000;       and mode parameters pr
				esent
 0456  83 3E 0000 E 00       3						cmp S_MODE_PARM,0 
 045B  7F 03                 6						jg $+5 
 045D  E9 0511 R             5						jmp $l68 
					   .THEN						;AN000;
					      COPY_STRING	SC_LINE, MC_LINE, SC_MODE_COM	;AN000;       append MODE COM
 0460  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0464  8D 36 01EC R          1		LEA	SI, SC_MODE_COM				; 
 0468  B8 0000 E             1		MOV	AX, MC_LINE				; 
 046B  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
					      WORD_TO_CHAR	N_WORD_2, S_STR120_3		;AN000;       S_STR120_3 = serial po
				rt number
 0470  A1 0000 E             1		MOV	AX, N_WORD_2			; 
 0473  BF 0000 E             1		MOV	DI, OFFSET S_STR120_3		; 
 0476  9A 0000 ---- E        1		CALL	BIN_TO_CHAR_ROUTINE		; 
					      APPEND_STRING	SC_LINE, MC_LINE, S_STR120_3	;AN000;       append serial port num
				ber
 047B  B9 0000 E             1		MOV	CX, MC_LINE				; 
 047E  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0482  8D 36 0000 E          1		LEA	SI, S_STR120_3				; 
 0486  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      APPEND_STRING	SC_LINE, MC_LINE, S_COLON	;AN000;       append colon
 048B  B9 0000 E             1		MOV	CX, MC_LINE				; 
 048E  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0492  8D 36 0000 E          1		LEA	SI, S_COLON				; 
 0496  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      APPEND_STRING	SC_LINE, MC_LINE, S_MODE_PARM	;AN000;       append mode parameters
 049B  B9 0000 E             1		MOV	CX, MC_LINE				; 
 049E  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 04A2  8D 36 0000 E          1		LEA	SI, S_MODE_PARM				; 
 04A6  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      WRITE_LINE	SC_LINE 			;AN000;       write MODE COMx comman
				d
 04AB  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 04AE  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					      .IF < I_REDIRECT gt 1 >				;AN000;       if printer redirection
 04B3  83 3E 0000 E 01       3						cmp I_REDIRECT,1 
 04B8  7E 57                 6						jng $l68 
					      .THEN						;AN000;
						 COPY_STRING	SC_LINE,MC_LINE,SC_MODE_LPT	;AN000; 	 append MODE LPT
 04BA  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 04BE  8D 36 01F6 R          1		LEA	SI, SC_MODE_LPT				; 
 04C2  B8 0000 E             1		MOV	AX, MC_LINE				; 
 04C5  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
						 DEC_VAR	I_REDIRECT			;AN000; 	 first item in list 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-113
GEN_COMS					;AN000;                                        

				is 'None'
 04CA  FF 0E 0000 E          1		DEC	I_REDIRECT			; 
						 WORD_TO_CHAR	I_REDIRECT, S_STR120_2		;AN000; 	 convert LPT no to c
				hars
 04CE  A1 0000 E             1		MOV	AX, I_REDIRECT			; 
 04D1  BF 0000 E             1		MOV	DI, OFFSET S_STR120_2		; 
 04D4  9A 0000 ---- E        1		CALL	BIN_TO_CHAR_ROUTINE		; 
						 APPEND_STRING	SC_LINE,MC_LINE,S_STR120_2	;AN000; 	 append parallel por
				t
 04D9  B9 0000 E             1		MOV	CX, MC_LINE				; 
 04DC  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 04E0  8D 36 0000 E          1		LEA	SI, S_STR120_2				; 
 04E4  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE,MC_LINE,SC_EQUAL_COM	;AN000; 	 append =COM
 04E9  B9 0000 E             1		MOV	CX, MC_LINE				; 
 04EC  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 04F0  8D 36 0200 R          1		LEA	SI, SC_EQUAL_COM				; 
 04F4  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE,MC_LINE,S_STR120_3	;AN000; 	 append serial port 
				number
 04F9  B9 0000 E             1		MOV	CX, MC_LINE				; 
 04FC  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0500  8D 36 0000 E          1		LEA	SI, S_STR120_3				; 
 0504  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 WRITE_LINE	SC_LINE 			;AN000; 	 write MODE LPTx=COM
				y command
 0509  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 050C  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					      .ENDIF						;AN000;
					   .ENDIF						;AN000;
 0511                        2	$l68: 
					   INC_VAR		N_WORD_1			;AN000;    inc printer number
 0511  FF 06 0000 E          1		INC	N_WORD_1			; 
					   INC_VAR		N_WORD_2			;AN000;    inc serial port number
 0515  FF 06 0000 E          1		INC	N_WORD_2			; 
					.UNTIL < N_WORD_1 gt 7 > near				;AN000; end of repeat block
 0519  83 3E 0000 E 07       3						cmp N_WORD_1,7 
 051E  7F 03                 6						jg $+5 
 0520  E9 0433 R             5						jmp $l66 
												;
					;;;write KEYB <keyboard>,,<path>\KEYBOARD.SYS		;
					.IF < N_KYBD_VAL eq E_KYBD_VAL_YES > near		;AN000;    if kybd id is valid
 0523  80 3E 0000 E 00 E     3						cmp N_KYBD_VAL,E_KYBD_VAL_YES 
 0528  74 03                 6						je $+5 
 052A  E9 05C3 R             5						jmp $l74 
					.THEN							;AN000;
					   COPY_STRING	     SC_LINE, MC_LINE, SC_KEYB_A	;AN000;       copy KEYB
 052D  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0531  8D 36 0217 R          1		LEA	SI, SC_KEYB_A				; 
 0535  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0538  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-114
GEN_COMS					;AN000;                                        

					   APPEND_STRING     SC_LINE, MC_LINE, S_KEYBOARD	;AN000;       append kybd id
 053D  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0540  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0544  8D 36 0000 E          1		LEA	SI, S_KEYBOARD				; 
 0548  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING     SC_LINE, MC_LINE, SC_COMMAS	;AN000;       append ,,
 054D  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0550  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0554  8D 36 021E R          1		LEA	SI, SC_COMMAS				; 
 0558  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING     SC_LINE,MC_LINE, S_DOS_PATH	;AN000;       append install path
 055D  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0560  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0564  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 0568  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING     SC_LINE,MC_LINE,SC_KEYBOARD_SYS	;AN000;       append \KEYBOARD.SYS
 056D  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0570  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0574  8D 36 013B R          1		LEA	SI, SC_KEYBOARD_SYS				; 
 0578  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   .IF < N_KYBD_ALT ne E_KYBD_ALT_NO > and		;AN002;       if alternate keyboard 
				valid	 JW
 057D  80 3E 0000 E 00 E     3						cmp N_KYBD_ALT,E_KYBD_ALT_NO 
 0582  74 37                 6						je $l77 
					   .IF < I_KYBD_ALT eq 2 >				;AN002;       and not default settin
				g		 JW
 0584  83 3E 0000 E 02       3						cmp I_KYBD_ALT,2 
 0589  75 30                 6						jne $l77 
					   .THEN						;AN002; 			
						 JW
					      APPEND_STRING	SC_LINE, MC_LINE,SC_KEYB_SWITCH ;AN002;       append keyb id switch 
				'/ID:'       JW
 058B  B9 0000 E             1		MOV	CX, MC_LINE				; 
 058E  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0592  8D 36 0149 R          1		LEA	SI, SC_KEYB_SWITCH				; 
 0596  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      APPEND_STRING	SC_LINE, MC_LINE, S_KYBD_ALT	;AN002;       append alternate keybo
				ard id	 JW
 059B  B9 0000 E             1		MOV	CX, MC_LINE				; 
 059E  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 05A2  8D 36 0000 E          1		LEA	SI, S_KYBD_ALT				; 
 05A6  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      APPEND_STRING	SC_LINE, MC_LINE, S_SPACE	;AN090;JPW add space so last char no
				t overwritten
 05AB  B9 0000 E             1		MOV	CX, MC_LINE				; 
 05AE  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 05B2  8D 36 0000 E          1		LEA	SI, S_SPACE				; 
 05B6  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   .ENDIF						;AN002; 			
						 JW
 05BB                        2	$l77: 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-115
GEN_COMS					;AN000;                                        

					   WRITE_LINE	     SC_LINE				;AN000;       write KEYB command
 05BB  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 05BE  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 05C3                        2	$l74: 
												;
					;;;write CHCP <primary code page>			;
					.IF < F_CPSW eq E_CPSW_YES >				;AN000; if code page switching requi
				red
 05C3  81 3E 0000 E 0000 E   3						cmp F_CPSW,E_CPSW_YES 
 05C9  75 28                 6						jne $l80 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_CHCP,S_STR120_1;AN000;
 05CB  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 05CF  8D 36 0222 R          1		LEA	SI, SC_CHCP				; 
 05D3  B8 0000 E             1		MOV	AX, MC_LINE				; 
 05D6  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 05DB  B9 0000 E             1		MOV	CX, MC_LINE				; 
 05DE  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 05E2  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 05E6  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write CHCP command
 05EB  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 05EE  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 05F3                        2	$l80: 
												;
					;;;write 'PRINT /D:LPTx' or 'PRINT /D:COMx'             ;AC066;SEH moved print stmt.  NOTE: 
				PRINT AND SHELL STMTS MUST BE LAST IN AUTOEXEC.BAT
					.IF < I_WORKSPACE ne E_WORKSPACE_MIN > and near 	;AC066;SEH ;AN011; SEH
 05F3  81 3E 0000 E 0000 E   3						cmp I_WORKSPACE,E_WORKSPACE_MIN 
 05F9  75 03                 5						jne $+5 
 05FB  E9 06D6 R             5						jmp $l83 
					.IF < I_DEST_DRIVE eq E_DEST_DRIVE_C > and near 	;AC066;SEH ;AN015; JW	 If install 
				to fixed disk
 05FE  81 3E 0000 E 0000 E   3						cmp I_DEST_DRIVE,E_DEST_DRIVE_C 
 0604  74 03                 6						je $+5 
 0606  E9 06D6 R             5						jmp $l83 
					.IF < N_NUMPRINT gt 0 > near				;AC066;SEH ;AN011; SEH
 0609  83 3E 0000 E 00       3						cmp N_NUMPRINT,0 
 060E  7F 03                 6						jg $+5 
 0610  E9 06D6 R             5						jmp $l83 
					.THEN							;AC066;SEH ;AN011; SEH
					   GET_PRINTER_PARAMS	1, 0, N_RETCODE 		;AC066;SEH ;AN011; SEH	 get paramet
				ers for 1st printer selected
 0613  B8 0001               1	    MOV  AX, 1											  ; 
 0616  BB 0000               1	    MOV  BX, 0											  ; 
 0619  9A 0000 ---- E        1	    CALL GET_PRINTER_PARAMS_ROUTINE								
					  ; 
 061E  A3 0000 E             1	    MOV  N_RETCODE, AX 										  ; 
					   .IF < N_RETCODE ne 0 > near				;AC066;SEH ;AN011; SEH	 if valid re
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-116
GEN_COMS					;AN000;                                        

				turn
 0621  83 3E 0000 E 00       3						cmp N_RETCODE,0 
 0626  75 03                 5						jne $+5 
 0628  E9 06D6 R             5						jmp $l83 
					   .THEN						;AC066;SEH ;AN011; SEH
					      .IF < N_PRINTER_TYPE eq E_PARALLEL >		;AC066;SEH ;AN011; SEH	 LPT1, LPT2 
				or LPT3
 062B  80 3E 0000 E 00 E     3						cmp N_PRINTER_TYPE,E_PARALLEL 
 0630  75 28                 6						jne $l90 
					      .THEN						;AC066;SEH ;AN011; SEH
						 MERGE_STRING	SC_LINE, MC_LINE, SC_PRINT_COM, SC_LPT;AC066;SEH ;AN011; SEH   'PRIN
				T /D:LPT'
 0632  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0636  8D 36 0288 R          1		LEA	SI, SC_PRINT_COM				; 
 063A  B8 0000 E             1		MOV	AX, MC_LINE				; 
 063D  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0642  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0645  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0649  8D 36 010E R          1		LEA	SI, SC_LPT				; 
 064D  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 COPY_WORD	N_WORD_1, I_PORT		;AC066;SEH ;AN011; SEH	 get LPT num
				ber (1-3)
 0652  A1 0000 E             1		MOV	AX, I_PORT			; 
 0655  A3 0000 E             1		MOV	N_WORD_1,AX			; 
					      .ELSE						;AC066;SEH ;AN011; SEH	 serial prin
				ter
 0658  EB 59                 3						jmp short $l89 
 065A                        2	$l90: 
						 .IF < I_REDIRECT gt 1 >			;AC066;SEH ;AN011; SEH	 check if re
				directed to LPT
 065A  83 3E 0000 E 01       3						cmp I_REDIRECT,1 
 065F  7E 2C                 6						jng $l94 
						 .THEN						;AC066;SEH ;AN011; SEH
						    MERGE_STRING   SC_LINE, MC_LINE, SC_PRINT_COM, SC_LPT  ;AC066;SEH ;AN011; SEH   
				'PRINT /D:LPT'
 0661  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0665  8D 36 0288 R          1		LEA	SI, SC_PRINT_COM				; 
 0669  B8 0000 E             1		MOV	AX, MC_LINE				; 
 066C  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0671  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0674  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0678  8D 36 010E R          1		LEA	SI, SC_LPT				; 
 067C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						    COPY_WORD	N_WORD_1, I_REDIRECT		;AC066;SEH ;AN011; SEH	 gives LPT p
				rinter redirected to ---
 0681  A1 0000 E             1		MOV	AX, I_REDIRECT			; 
 0684  A3 0000 E             1		MOV	N_WORD_1,AX			; 
 0687  FF 0E 0000 E				    DEC 	N_WORD_1			;AC066;SEH ;AN011; SEH	 but must su
				btract off value 'none' to get port#
						 .ELSE						;AC066;SEH ;AN011; SEH	 serial port
				 that hasn't been redirected
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-117
GEN_COMS					;AN000;                                        

 068B  EB 26                 3						jmp short $l89 
 068D                        2	$l94: 
						    MERGE_STRING   SC_LINE, MC_LINE, SC_PRINT_COM, SC_COM  ;AC066;SEH ;AN011; SEH   
				'PRINT /D:COM'
 068D  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0691  8D 36 0288 R          1		LEA	SI, SC_PRINT_COM				; 
 0695  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0698  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 069D  B9 0000 E             1		MOV	CX, MC_LINE				; 
 06A0  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 06A4  8D 36 0113 R          1		LEA	SI, SC_COM				; 
 06A8  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						    COPY_WORD	N_WORD_1, I_PORT		;AC066;SEH ;AN011; SEH	 value of CO
				M port
 06AD  A1 0000 E             1		MOV	AX, I_PORT			; 
 06B0  A3 0000 E             1		MOV	N_WORD_1,AX			; 
						 .ENDIF 					;AC066;SEH ;AN011; SEH
					      .ENDIF						;AC066;SEH ;AN011; SEH
 06B3                        2	$l89: 
					      WORD_TO_CHAR	N_WORD_1, S_STR120_3		;AC066;SEH ;AN011; SEH
 06B3  A1 0000 E             1		MOV	AX, N_WORD_1			; 
 06B6  BF 0000 E             1		MOV	DI, OFFSET S_STR120_3		; 
 06B9  9A 0000 ---- E        1		CALL	BIN_TO_CHAR_ROUTINE		; 
					      APPEND_STRING	SC_LINE, MC_LINE, S_STR120_3	;AC066;SEH ;AN011; SEH	 add on the 
				com or lpt number to the string
 06BE  B9 0000 E             1		MOV	CX, MC_LINE				; 
 06C1  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 06C5  8D 36 0000 E          1		LEA	SI, S_STR120_3				; 
 06C9  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      WRITE_LINE	SC_LINE 			;AC066;SEH ;AN011; SEH	 write 'PRIN
				T /D:LPTx' or 'PRINT /D:COMx'  x=number
 06CE  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 06D1  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					   .ENDIF						;AC066;SEH ;AN011; SEH
					.ENDIF							;AC066;SEH ;AN011; SEH
 06D6                        2	$l83: 
												;
					;;;write SHELL <parameter>				;
					.IF < N_DEST eq E_DEST_SHELL > and			;AN000; if preparing for SHELL diske
				tte
 06D6  80 3E 0000 E 00 E     3						cmp N_DEST,E_DEST_SHELL 
 06DB  75 10                 6						jne $l97 
					.IF < F_SHELL eq E_SHELL_YES >				;AN000; if SHELL support required
 06DD  81 3E 0000 E 0000 E   3						cmp F_SHELL,E_SHELL_YES 
 06E3  75 08                 6						jne $l97 
					.THEN							;AN000;
					   WRITE_LINE		SC_SHELLP			;AN000;
 06E5  BB 027C R             1	    MOV  BX, OFFSET SC_SHELLP			 ; 
 06E8  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 06ED                        2	$l97: 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-118
GEN_COMS					;AN000;                                        

												;
 06ED  C3				RET							;AN000;
 06EE				CREATE_AUTOEXEC_BAT	ENDP					;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;	Create CONFIG.SYS file
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 06EE				CREATE_CONFIG_SYS	PROC					;AN000;
												;
					;;;install to B:, install path	= null			;
					;;;install to root of C:, install path = c:\		;
					;;;install to directory in C:, install path = c:\path\	;
					.IF < I_DEST_DRIVE eq E_DEST_DRIVE_B >			;AN000; if install to drive B:
 06EE  81 3E 0000 E 0000 E   3						cmp I_DEST_DRIVE,E_DEST_DRIVE_B 
 06F4  75 08                 6						jne $l101 
					.THEN							;AN000;
					   INIT_VAR		S_DOS_PATH,0			;AN000;    set path = null
 06F6  C7 06 0296 R 0000     1		MOV	S_DOS_PATH,0		; 
					.ELSE							;AN000; else
 06FC  EB 28                 3						jmp short $l100 
 06FE                        2	$l101: 
					   COPY_STRING		S_DOS_PATH,M_DOS_PATH,S_INSTALL_PATH;AN000;set path = user defined p
				ath
 06FE  8D 3E 0296 R          1		LEA	DI, S_DOS_PATH				; 
 0702  8D 36 0000 E          1		LEA	SI, S_INSTALL_PATH				; 
 0706  B8 0032               1		MOV	AX, M_DOS_PATH				; 
 0709  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
					   .IF < S_DOS_PATH gt M_DEST_DRIVE >			;AN000;    if install is not under r
				oot of C:
 070E  81 3E 0296 R 0000 E   3						cmp S_DOS_PATH,M_DEST_DRIVE 
 0714  7E 10                 6						jng $l100 
					   .THEN						;AN000;
					      APPEND_STRING	S_DOS_PATH,M_DOS_PATH,S_SLASH	;AN000;       append back slash to p
				ath
 0716  B9 0032               1		MOV	CX, M_DOS_PATH				; 
 0719  8D 3E 0296 R          1		LEA	DI, S_DOS_PATH				; 
 071D  8D 36 0000 E          1		LEA	SI, S_SLASH				; 
 0721  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   .ENDIF						;AN000;
					.ENDIF							;AN000;
 0726                        2	$l100: 
												;
					;;;write BREAK=<parameter>				;
					.IF < S_BREAK gt 0 >					;AN000; if field length > zero
 0726  83 3E 0000 E 00       3						cmp S_BREAK,0 
 072B  7E 28                 6						jng $l107 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_BREAK,S_BREAK;AN000;
 072D  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0731  8D 36 0006 R          1		LEA	SI, SC_BREAK				; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-119
GEN_COMS					;AN000;                                        

 0735  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0738  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 073D  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0740  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0744  8D 36 0000 E          1		LEA	SI, S_BREAK				; 
 0748  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write BREAK command
 074D  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0750  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 0755                        2	$l107: 
												;
					;;;write COUNTRY=<country>,,<path>\COUNTRY.SYS		;
					.IF < N_COUNTRY eq 1 >					;AN000; if country is US (001)
 0755  83 3E 0000 E 01       3						cmp N_COUNTRY,1 
 075A  75 02                 6						jne $l111 
					.THEN							;AN000;    no action
					.ELSE							;AN000; else
 075C  EB 63                 3						jmp short $l110 
 075E                        2	$l111: 
					   WORD_TO_CHAR 	N_COUNTRY, S_STR120_1		;AN000;    S_STR120_1 = country in A
				SCII
 075E  A1 0000 E             1		MOV	AX, N_COUNTRY			; 
 0761  BF 0000 E             1		MOV	DI, OFFSET S_STR120_1		; 
 0764  9A 0000 ---- E        1		CALL	BIN_TO_CHAR_ROUTINE		; 
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_COUNTRY,S_STR120_1;AN000;
 0769  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 076D  8D 36 001E R          1		LEA	SI, SC_COUNTRY				; 
 0771  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0774  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0779  B9 0000 E             1		MOV	CX, MC_LINE				; 
 077C  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0780  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 0784  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, SC_COMMAS	;AN000;
 0789  B9 0000 E             1		MOV	CX, MC_LINE				; 
 078C  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0790  8D 36 021E R          1		LEA	SI, SC_COMMAS				; 
 0794  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE,S_DOS_PATH	;AN000;
 0799  B9 0000 E             1		MOV	CX, MC_LINE				; 
 079C  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 07A0  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 07A4  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE,SC_COUNTRY_SYS ;AN000;
 07A9  B9 0000 E             1		MOV	CX, MC_LINE				; 
 07AC  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 07B0  8D 36 0028 R          1		LEA	SI, SC_COUNTRY_SYS				; 
 07B4  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write COUNTRY command
 07B9  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-120
GEN_COMS					;AN000;                                        

 07BC  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 07C1                        2	$l110: 
												;
					;;;write BUFFERS=<parameter>				;
					;;;write BUFFERS=<parameter> /E if expanded memory support
					.IF < S_BUFFERS gt 0 >					;AN000; if field lengh > zero
 07C1  83 3E 0000 E 00       3						cmp S_BUFFERS,0 
 07C6  7E 48                 6						jng $l114 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_BUFFERS,S_BUFFERS;AN000;
 07C8  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 07CC  8D 36 0035 R          1		LEA	SI, SC_BUFFERS				; 
 07D0  B8 0000 E             1		MOV	AX, MC_LINE				; 
 07D3  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 07D8  B9 0000 E             1		MOV	CX, MC_LINE				; 
 07DB  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 07DF  8D 36 0000 E          1		LEA	SI, S_BUFFERS				; 
 07E3  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   .IF < N_XMA eq E_XMA_PRESENT > and			;AN000;    if expanded memory presen
				t
 07E8  81 3E 0000 E 0000 E   3						cmp N_XMA,E_XMA_PRESENT 
 07EE  75 18                 6						jne $l117 
					   .IF < F_XMA eq E_XMA_YES >				;AN000;       and is to be used
 07F0  81 3E 0000 E 0000 E   3						cmp F_XMA,E_XMA_YES 
 07F6  75 10                 6						jne $l117 
					   .THEN						;AN000;
					      APPEND_STRING	SC_LINE, MC_LINE, SC_SLASH_X	;AC046;SEH    append /X to command  
				 (formerly /E)
 07F8  B9 0000 E             1		MOV	CX, MC_LINE				; 
 07FB  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 07FF  8D 36 003F R          1		LEA	SI, SC_SLASH_X				; 
 0803  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   .ENDIF						;AN000;
 0808                        2	$l117: 
					   WRITE_LINE		SC_LINE 			;AN000;    write BUFFERS command
 0808  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 080B  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 0810                        2	$l114: 
												;
					;;;write FCBS=<parameter>				;
					.IF < S_FCBS gt 0 >					;AN000; if field length > zero
 0810  83 3E 0000 E 00       3						cmp S_FCBS,0 
 0815  7E 28                 6						jng $l120 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE, SC_FCBS,S_FCBS ;AN000;
 0817  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 081B  8D 36 0044 R          1		LEA	SI, SC_FCBS				; 
 081F  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0822  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-121
GEN_COMS					;AN000;                                        

 0827  B9 0000 E             1		MOV	CX, MC_LINE				; 
 082A  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 082E  8D 36 0000 E          1		LEA	SI, S_FCBS				; 
 0832  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write FCBS command
 0837  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 083A  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 083F                        2	$l120: 
												;
					;;;write FILES=<parameter>				;
					.IF < S_FILES gt 0 >					;AN000; if field length > zero
 083F  83 3E 0000 E 00       3						cmp S_FILES,0 
 0844  7E 28                 6						jng $l123 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_FILES,S_FILES;AN000;
 0846  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 084A  8D 36 004B R          1		LEA	SI, SC_FILES				; 
 084E  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0851  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0856  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0859  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 085D  8D 36 0000 E          1		LEA	SI, S_FILES				; 
 0861  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write FILES command
 0866  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0869  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 086E                        2	$l123: 
												;
					;;;write LASTDRIVE=<parameter>				;
					.IF < S_LASTDRIVE gt 0 >				;AN000; if field length > zero
 086E  83 3E 0000 E 00       3						cmp S_LASTDRIVE,0 
 0873  7E 28                 6						jng $l126 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_LASTDRIVE,S_LASTDRIVE;AN000;
 0875  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0879  8D 36 0053 R          1		LEA	SI, SC_LASTDRIVE				; 
 087D  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0880  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0885  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0888  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 088C  8D 36 0000 E          1		LEA	SI, S_LASTDRIVE				; 
 0890  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write LASTDRIVE command
 0895  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0898  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 089D                        2	$l126: 
												;
					;;;write STACKS=<parameter>				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-122
GEN_COMS					;AN000;                                        

					.IF < S_STACKS gt 0 >					;AN000; if field length > zero
 089D  83 3E 0000 E 00       3						cmp S_STACKS,0 
 08A2  7E 28                 6						jng $l129 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_STACKS,S_STACKS;AN000;
 08A4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 08A8  8D 36 005F R          1		LEA	SI, SC_STACKS				; 
 08AC  B8 0000 E             1		MOV	AX, MC_LINE				; 
 08AF  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 08B4  B9 0000 E             1		MOV	CX, MC_LINE				; 
 08B7  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 08BB  8D 36 0000 E          1		LEA	SI, S_STACKS				; 
 08BF  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write STACKS command
 08C4  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 08C7  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 08CC                        2	$l129: 
												;
					;;;write SHELL=<path>\COMMAND.COM /MSG /P /E:256	;
					.IF < I_DEST_DRIVE ne E_DEST_DRIVE_C >			;AN111; if install destination is dr
				ive B: or A: JW
 08CC  81 3E 0000 E 0000 E   3						cmp I_DEST_DRIVE,E_DEST_DRIVE_C 
 08D2  74 42                 6						je $l133 
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_SHELL,S_DRIVE_A    ;AN000;JW
 08D4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 08D8  8D 36 0068 R          1		LEA	SI, SC_SHELL				; 
 08DC  B8 0000 E             1		MOV	AX, MC_LINE				; 
 08DF  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 08E4  B9 0000 E             1		MOV	CX, MC_LINE				; 
 08E7  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 08EB  8D 36 0000 E          1		LEA	SI, S_DRIVE_A				; 
 08EF  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE,MC_LINE,SC_SHELL_1	;AN037;SEH
 08F4  B9 0000 E             1		MOV	CX, MC_LINE				; 
 08F7  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 08FB  8D 36 0070 R          1		LEA	SI, SC_SHELL_1				; 
 08FF  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE,MC_LINE,SC_SHELL_2	;AN037;SEH Only diskettes get /MSG i
				n SHELL command
 0904  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0907  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 090B  8D 36 007D R          1		LEA	SI, SC_SHELL_2				; 
 090F  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					.ELSE							;AN000;JW
 0914  EB 30                 3						jmp short $l132 
 0916                        2	$l133: 
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_SHELL,S_DOS_PATH   ;AN000;JW
 0916  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 091A  8D 36 0068 R          1		LEA	SI, SC_SHELL				; 
 091E  B8 0000 E             1		MOV	AX, MC_LINE				; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-123
GEN_COMS					;AN000;                                        

 0921  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0926  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0929  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 092D  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 0931  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE,MC_LINE,SC_SHELL_1	;AC037;SEH
 0936  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0939  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 093D  8D 36 0070 R          1		LEA	SI, SC_SHELL_1				; 
 0941  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					.ENDIF							;AN000;JW
 0946                        2	$l132: 
					APPEND_STRING		SC_LINE, MC_LINE, SC_SHELL_3	;AC037;SEH
 0946  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0949  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 094D  8D 36 0084 R          1		LEA	SI, SC_SHELL_3				; 
 0951  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					WRITE_LINE		SC_LINE 			;AN000; write SHELL command
 0956  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0959  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
												;
					;;;init S_STR120_1 to DEVICE=<path>\			;
					MERGE_STRING		S_STR120_1,M_STR120_1,SC_DEVICE,S_DOS_PATH;AN000;
 095E  8D 3E 0000 E          1		LEA	DI, S_STR120_1				; 
 0962  8D 36 0092 R          1		LEA	SI, SC_DEVICE				; 
 0966  B8 0000 E             1		MOV	AX, M_STR120_1				; 
 0969  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 096E  B9 0000 E             1		MOV	CX, M_STR120_1				; 
 0971  8D 3E 0000 E          1		LEA	DI, S_STR120_1				; 
 0975  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 0979  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
												;
					;;;S_STR120_1 = DEVICE=<path>\				;
					;;;write DEVICE=<path>\XMAEM.SYS<parameter>		;
					;;;write DEVICE=<path>\XMA2EMS.SYS<parameter>		;
					.IF < N_XMA eq E_XMA_PRESENT > near and 		;AC000; if expanded memory present J
				W
 097E  81 3E 0000 E 0000 E   3						cmp N_XMA,E_XMA_PRESENT 
 0984  74 03                 6						je $+5 
 0986  E9 0A09 R             5						jmp $l136 
					.IF < F_XMA eq E_XMA_YES >				;AN000;    and support to be include
				d
 0989  81 3E 0000 E 0000 E   3						cmp F_XMA,E_XMA_YES 
 098F  75 78                 6						jne $l136 
					.THEN							;AN000;
					   .IF < N_MOD80 eq E_IS_MOD80 >			;AN000;JW
 0991  81 3E 0000 E 0000 E   3						cmp N_MOD80,E_IS_MOD80 
 0997  75 38                 6						jne $l139 
					   .THEN						;AN000;JW
					      MERGE_STRING	   SC_LINE,MC_LINE,S_STR120_1,SC_XMAEM_SYS;AN000;
 0999  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-124
GEN_COMS					;AN000;                                        

 099D  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 09A1  B8 0000 E             1		MOV	AX, MC_LINE				; 
 09A4  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 09A9  B9 0000 E             1		MOV	CX, MC_LINE				; 
 09AC  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 09B0  8D 36 009B R          1		LEA	SI, SC_XMAEM_SYS				; 
 09B4  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      APPEND_STRING	   SC_LINE, MC_LINE, S_XMAEM	;AN000;
 09B9  B9 0000 E             1		MOV	CX, MC_LINE				; 
 09BC  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 09C0  8D 36 0000 E          1		LEA	SI, S_XMAEM				; 
 09C4  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					      WRITE_LINE	   SC_LINE			;AN000; write XMAEM command
 09C9  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 09CC  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					   .ENDIF						;AN000;JW
 09D1                        2	$l139: 
					   MERGE_STRING 	SC_LINE,MC_LINE,S_STR120_1,SC_XMA2EMS_SYS;AN000;
 09D1  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 09D5  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 09D9  B8 0000 E             1		MOV	AX, MC_LINE				; 
 09DC  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 09E1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 09E4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 09E8  8D 36 00A7 R          1		LEA	SI, SC_XMA2EMS_SYS				; 
 09EC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, S_XMA2EMS	;AN000;
 09F1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 09F4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 09F8  8D 36 0000 E          1		LEA	SI, S_XMA2EMS				; 
 09FC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write XMA2EMS command
 0A01  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0A04  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 0A09                        2	$l136: 
												;
					;;;S_STR120_1 = DEVICE=<path>\				;
					;;;write DEVICE=<path>\ANSI.SYS 			;
					;;;write DEVICE=<path>\ANSI.SYS /X ,additional parameter based on workspace option
					.IF < F_ANSI eq E_ANSI_YES >				;AN000; if ANSI support required
 0A09  81 3E 0000 E 0000 E   3						cmp F_ANSI,E_ANSI_YES 
 0A0F  75 38                 6						jne $l142 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,S_STR120_1,SC_ANSI_SYS;AN000;
 0A11  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0A15  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 0A19  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0A1C  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0A21  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0A24  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-125
GEN_COMS					;AN000;                                        

 0A28  8D 36 00B5 R          1		LEA	SI, SC_ANSI_SYS				; 
 0A2C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, S_ANSI	;AN000;
 0A31  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0A34  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0A38  8D 36 0000 E          1		LEA	SI, S_ANSI				; 
 0A3C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write ANSI command
 0A41  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0A44  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 0A49                        2	$l142: 
												;
					;;;S_STR120_1 = DEVICE=<path>\				;
					;;;write DEVICE=<path>\RAMDRIVE.SYS <parameter>		;
					.IF < F_VDISK eq E_VDISK_YES >				;AN000; if VDISK support required
 0A49  81 3E 0000 E 0000 E   3						cmp F_VDISK,E_VDISK_YES 
 0A4F  75 38                 6						jne $l145 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,S_STR120_1,SC_VDISK_SYS;AN000;
 0A51  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0A55  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 0A59  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0A5C  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0A61  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0A64  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0A68  8D 36 00C0 R          1		LEA	SI, SC_VDISK_SYS				; 
 0A6C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, S_VDISK	;AN000;
 0A71  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0A74  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0A78  8D 36 0000 E          1		LEA	SI, S_VDISK				; 
 0A7C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write VDISK command
 0A81  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0A84  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 0A89                        2	$l145: 
												;
					;;;init S_STR120_2 to number of designates		;
					WORD_TO_CHAR		N_DESIGNATES, S_STR120_2	;AN000; set S_STR120_2 = no. of desi
				gnates
 0A89  A1 0000 E             1		MOV	AX, N_DESIGNATES			; 
 0A8C  BF 0000 E             1		MOV	DI, OFFSET S_STR120_2		; 
 0A8F  9A 0000 ---- E        1		CALL	BIN_TO_CHAR_ROUTINE		; 
												;
					;;;S_STR120_1 = DEVICE=<path>\				;
					;;;write DEVICE=<path>\DISPLAY.SYS CON=(<display>,437,<desig>)
					.IF < F_CPSW eq E_CPSW_YES > near			;AN000; if code page switching requi
				red
 0A94  81 3E 0000 E 0000 E   3						cmp F_CPSW,E_CPSW_YES 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-126
GEN_COMS					;AN000;                                        

 0A9A  74 03                 6						je $+5 
 0A9C  E9 0B36 R             5						jmp $l148 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,S_STR120_1,SC_DISPLAY_SYS;AN000;
 0A9F  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0AA3  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 0AA7  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0AAA  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0AAF  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0AB2  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0AB6  8D 36 00CF R          1		LEA	SI, SC_DISPLAY_SYS				; 
 0ABA  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   .IF < ACTIVE eq EGA > or				;AN000;    if EGA adaptor
 0ABF  80 3E 0000 E 00 E     3						cmp ACTIVE,EGA 
 0AC4  74 07                 6						je $l153 
					   .IF < ALTERNATE eq EGA >				;AN000;
 0AC6  80 3E 0000 E 00 E     3						cmp ALTERNATE,EGA 
 0ACB  75 13                 6						jne $l152 
 0ACD                        3	$l153: 
					   .THEN						;AN000;
					      APPEND_STRING	SC_LINE, MC_LINE, SD_DISPLAY_EGA;AN001;GHG    set display to EGA
 0ACD  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0AD0  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0AD4  8D 36 00EC R          1		LEA	SI, SD_DISPLAY_EGA				; 
 0AD8  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   .ELSEIF < ACTIVE eq LCD > or 			;AN000;    if LCD adaptor
 0ADD  EB 1F                 3						jmp short $l151 
 0ADF  90                    3						nop 
 0AE0                        2	$l152: 
 0AE0  80 3E 0000 E 00 E     3						cmp ACTIVE,LCD 
 0AE5  74 07                 6						je $l155 
					   .IF < ALTERNATE eq LCD >				;AN000;
 0AE7  80 3E 0000 E 00 E     3						cmp ALTERNATE,LCD 
 0AEC  75 10                 6						jne $l151 
 0AEE                        3	$l155: 
					   .THEN						;AN000;
					      APPEND_STRING	SC_LINE, MC_LINE, SD_DISPLAY_LCD;AN001;GHG    set display to LCD
 0AEE  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0AF1  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0AF5  8D 36 00FB R          1		LEA	SI, SD_DISPLAY_LCD				; 
 0AF9  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   .ENDIF						;AN000;
 0AFE                        2	$l151: 
					   APPEND_STRING	SC_LINE, MC_LINE, SC_437	;AN000;    append hardware code page
 0AFE  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0B01  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0B05  8D 36 011C R          1		LEA	SI, SC_437				; 
 0B09  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, S_STR120_2	;AN000;    append no of designates
 0B0E  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0B11  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-127
GEN_COMS					;AN000;                                        

 0B15  8D 36 0000 E          1		LEA	SI, S_STR120_2				; 
 0B19  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000;
 0B1E  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0B21  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0B25  8D 36 0213 R          1		LEA	SI, SC_CLOSE_BRAC				; 
 0B29  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write DISPLAY.SYS command
 0B2E  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0B31  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 0B36                        2	$l148: 
												;
					;;;S_STR120_1 = DEVICE=<path>\				;
					;;;S_STR120_2 = number of designates			;
					;;;write DEVICE=<path>\PRINTER.SYS LPT1=(<cdp parameters>,437,<desig>)
					;;;				   LPT2=(<cdp parameters>,437,<desig>)
					;;;				   LPT3=(<cdp parameters>,437,<desig>)
					;;;N_WORD_1 = parallel port number			;
					;;;N_WORD_2 set if driver is prepared			;
					INIT_VAR		N_WORD_1, 1			;AN000; set port number = 1
 0B36  C7 06 0000 E 0001     1		MOV	N_WORD_1,1		; 
					INIT_VAR		N_WORD_2, 0			;AN000; set driver status = false
 0B3C  C7 06 0000 E 0000     1		MOV	N_WORD_2,0		; 
					.IF < F_CPSW eq E_CPSW_YES > near			;AN000; if code page switching requi
				red
 0B42  81 3E 0000 E 0000 E   3						cmp F_CPSW,E_CPSW_YES 
 0B48  74 03                 6						je $+5 
 0B4A  E9 0C38 R             5						jmp $l156 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,S_STR120_1,SC_PRINTER_SYS;AN000;
 0B4D  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0B51  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 0B55  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0B58  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0B5D  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0B60  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0B64  8D 36 0100 R          1		LEA	SI, SC_PRINTER_SYS				; 
 0B68  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   .REPEAT						;AN000;    repeat code block
 0B6D                        2	$l159: 
					      GET_PRINTER_PARAMS 0, N_WORD_1, N_RETCODE 	;AN000;       get printer parameters
 0B6D  B8 0000               1	    MOV  AX, 0											  ; 
 0B70  8B 1E 0000 E          1	    MOV  BX, N_WORD_1										
					  ; 
 0B74  9A 0000 ---- E        1	    CALL GET_PRINTER_PARAMS_ROUTINE								
					  ; 
 0B79  A3 0000 E             1	    MOV  N_RETCODE, AX 										  ; 
					      .IF < N_RETCODE eq 1 > and near			;AN000;       if valid return
 0B7C  83 3E 0000 E 01       3						cmp N_RETCODE,1 
 0B81  74 03                 6						je $+5 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-128
GEN_COMS					;AN000;                                        

 0B83  E9 0C1B R             5						jmp $l161 
					      .IF < S_CP_DRIVER gt 0 > and near 		;AN000; 	 and driver and prep
				are
 0B86  83 3E 0000 E 00       3						cmp S_CP_DRIVER,0 
 0B8B  7F 03                 6						jg $+5 
 0B8D  E9 0C1B R             5						jmp $l161 
					      .IF < S_CP_PREPARE gt 0 > near			;AN000; 	 parameters valid
 0B90  83 3E 0000 E 00       3						cmp S_CP_PREPARE,0 
 0B95  7F 03                 6						jg $+5 
 0B97  E9 0C1B R             5						jmp $l161 
					      .THEN						;AN000;
						 APPEND_STRING	SC_LINE, MC_LINE, SC_LPT	;AN000; 	 append LPT
 0B9A  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0B9D  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0BA1  8D 36 010E R          1		LEA	SI, SC_LPT				; 
 0BA5  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 WORD_TO_CHAR	N_WORD_1, S_STR120_3		;AN000;
 0BAA  A1 0000 E             1		MOV	AX, N_WORD_1			; 
 0BAD  BF 0000 E             1		MOV	DI, OFFSET S_STR120_3		; 
 0BB0  9A 0000 ---- E        1		CALL	BIN_TO_CHAR_ROUTINE		; 
						 APPEND_STRING	SC_LINE, MC_LINE, S_STR120_3	;AN000; 	 append lpt number
 0BB5  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0BB8  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0BBC  8D 36 0000 E          1		LEA	SI, S_STR120_3				; 
 0BC0  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE, MC_LINE, SC_EQUAL_OPEN ;AN000; 	 append =(
 0BC5  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0BC8  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0BCC  8D 36 0118 R          1		LEA	SI, SC_EQUAL_OPEN				; 
 0BD0  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE, MC_LINE, S_CP_DRIVER	;AN000; 	 append driver param
				eters
 0BD5  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0BD8  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0BDC  8D 36 0000 E          1		LEA	SI, S_CP_DRIVER				; 
 0BE0  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE, MC_LINE, SC_COMMA	;AN000; 	 append comma
 0BE5  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0BE8  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0BEC  8D 36 0123 R          1		LEA	SI, SC_COMMA				; 
 0BF0  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE, MC_LINE, S_STR120_2	;AN000; 	 append no of design
				ates
 0BF5  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0BF8  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0BFC  8D 36 0000 E          1		LEA	SI, S_STR120_2				; 
 0C00  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 APPEND_STRING	SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; 	 append close bracke
				t
 0C05  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0C08  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-129
GEN_COMS					;AN000;                                        

 0C0C  8D 36 0213 R          1		LEA	SI, SC_CLOSE_BRAC				; 
 0C10  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
						 INIT_VAR	N_WORD_2, 1			;AN000; 	 set driver status =
				 valid
 0C15  C7 06 0000 E 0001     1		MOV	N_WORD_2,1		; 
					      .ENDIF						;AN000;
 0C1B                        2	$l161: 
					      INC_VAR		N_WORD_1			;AN000;       inc printer number
 0C1B  FF 06 0000 E          1		INC	N_WORD_1			; 
					   .UNTIL < N_WORD_1 gt 3 > near			;AN000;    end of repeat block
 0C1F  83 3E 0000 E 03       3						cmp N_WORD_1,3 
 0C24  7F 03                 6						jg $+5 
 0C26  E9 0B6D R             5						jmp $l159 
					   .IF < N_WORD_2 eq 1 >				;AN000; if driver status is valid
 0C29  83 3E 0000 E 01       3						cmp N_WORD_2,1 
 0C2E  75 08                 6						jne $l156 
					   .THEN						;AN000;
					      WRITE_LINE	SC_LINE 			;AN000;    write PRINTER.SYS command
 0C30  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0C33  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					   .ENDIF						;AN000;
					.ENDIF							;AN000;
 0C38                        2	$l156: 
												;
					;;;init S_STR120_1 to INSTALL=<path>\			;
					MERGE_STRING		S_STR120_1,M_STR120_1,SC_INSTALL,S_DOS_PATH	 ;AN000;
 0C38  8D 3E 0000 E          1		LEA	DI, S_STR120_1				; 
 0C3C  8D 36 0126 R          1		LEA	SI, SC_INSTALL				; 
 0C40  B8 0000 E             1		MOV	AX, M_STR120_1				; 
 0C43  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0C48  B9 0000 E             1		MOV	CX, M_STR120_1				; 
 0C4B  8D 3E 0000 E          1		LEA	DI, S_STR120_1				; 
 0C4F  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 0C53  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
												;
					;;;write INSTALL=<path>\KEYB.COM US,,<path>\KEYBOARD.SYS
					COMPARE_STRINGS 	S_KEYBOARD, S_US		;AN000;
 0C58  8D 36 0000 E          1	    LEA  SI, S_KEYBOARD										
					  ; 
 0C5C  8D 3E 0000 E          1	    LEA  DI, S_US										
					  ; 
 0C60  9A 0000 ---- E        1	    CALL COMPARE_ROUTINE									
					  ; 
					.IF < c > and						;AN000; if keyboard not US (will be 
				handled in autoexec)
 0C65  73 72                 5						jnc $l167 
					.IF < N_KYBD_VAL eq E_KYBD_VAL_YES > near		;AN000; if keyboard is valid
 0C67  80 3E 0000 E 00 E     3						cmp N_KYBD_VAL,E_KYBD_VAL_YES 
 0C6C  75 6B                 6						jne $l167 
 0C6E  90                    6					nop 
 0C6F  90                    6					nop 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-130
GEN_COMS					;AN000;                                        

 0C70  90                    6					nop 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,S_STR120_1,SC_KEYB_C ;AN000;
 0C71  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0C75  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 0C79  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0C7C  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0C81  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0C84  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0C88  8D 36 0130 R          1		LEA	SI, SC_KEYB_C				; 
 0C8C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, S_US		;AN000;    append keyboard id = US
 0C91  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0C94  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0C98  8D 36 0000 E          1		LEA	SI, S_US				; 
 0C9C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, SC_COMMAS	;AN000;    append comma
 0CA1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0CA4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0CA8  8D 36 021E R          1		LEA	SI, SC_COMMAS				; 
 0CAC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE,S_DOS_PATH	;AN000;    append install path
 0CB1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0CB4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0CB8  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 0CBC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE,MC_LINE,SC_KEYBOARD_SYS ;AN000;    append KEYBOARD.SYS
 0CC1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0CC4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0CC8  8D 36 013B R          1		LEA	SI, SC_KEYBOARD_SYS				; 
 0CCC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write KEYB command
 0CD1  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0CD4  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 0CD9                        2	$l167: 
												;
					;;;S_STR120_1 = INSTALL=<path>\ 			;
					;;;write INSTALL=<path>\SHARE <parameter>		;
					.IF < F_SHARE eq E_SHARE_YES >				;AN000; if SHARE support required
 0CD9  81 3E 0000 E 0000 E   3						cmp F_SHARE,E_SHARE_YES 
 0CDF  75 38                 6						jne $l170 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,S_STR120_1,SC_SHARE;AN000;
 0CE1  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0CE5  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 0CE9  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0CEC  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0CF1  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0CF4  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0CF8  8D 36 0150 R          1		LEA	SI, SC_SHARE				; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-131
GEN_COMS					;AN000;                                        

 0CFC  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, S_SHARE	;AN000;
 0D01  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0D04  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0D08  8D 36 0000 E          1		LEA	SI, S_SHARE				; 
 0D0C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write SHARE command
 0D11  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0D14  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 0D19                        2	$l170: 
												;
					;;;S_STR120_1 = INSTALL=<path>\ 			;
					;;;write INSTALL=<path>\FASTOPEN <parameter>		;
					.IF < F_FASTOPEN eq E_FASTOPEN_YES >			;AN000; if FASTOPEN support required
 0D19  81 3E 0000 E 0000 E   3						cmp F_FASTOPEN,E_FASTOPEN_YES 
 0D1F  75 38                 6						jne $l173 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,S_STR120_1,SC_FASTOPEN;AN000;
 0D21  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0D25  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 0D29  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0D2C  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0D31  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0D34  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0D38  8D 36 015C R          1		LEA	SI, SC_FASTOPEN				; 
 0D3C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE, S_FASTOPEN	;AN000;
 0D41  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0D44  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0D48  8D 36 0000 E          1		LEA	SI, S_FASTOPEN				; 
 0D4C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write FASTOPEN command
 0D51  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0D54  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 0D59                        2	$l173: 
												;
					;;;S_STR120_1 = INSTALL=<path>\ 			;
					;;;write INSTALL=<path>\NLSFUNC <path>\COUNTRY.SYS	;
					.IF < F_CPSW eq E_CPSW_YES >				;AN000; if code page switching suppo
				rt required
 0D59  81 3E 0000 E 0000 E   3						cmp F_CPSW,E_CPSW_YES 
 0D5F  75 48                 6						jne $l176 
					.THEN							;AN000;
					   MERGE_STRING 	SC_LINE,MC_LINE,S_STR120_1,SC_NLSFUNC;AN000;
 0D61  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0D65  8D 36 0000 E          1		LEA	SI, S_STR120_1				; 
 0D69  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0D6C  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0D71  B9 0000 E             1		MOV	CX, MC_LINE				; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-132
GEN_COMS					;AN000;                                        

 0D74  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0D78  8D 36 016B R          1		LEA	SI, SC_NLSFUNC				; 
 0D7C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE,MC_LINE,S_DOS_PATH	;AN000;
 0D81  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0D84  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0D88  8D 36 0296 R          1		LEA	SI, S_DOS_PATH				; 
 0D8C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   APPEND_STRING	SC_LINE, MC_LINE,SC_COUNTRY_SYS ;AN000;
 0D91  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0D94  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0D98  8D 36 0028 R          1		LEA	SI, SC_COUNTRY_SYS				; 
 0D9C  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;    write NLSFUNC command
 0DA1  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0DA4  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
 0DA9                        2	$l176: 
												;
 0DA9  C3				RET							;AN000;
 0DAA				CREATE_CONFIG_SYS	ENDP					;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				;	Create DOSSHELL.BAT file
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 0DAA				CREATE_SHELL_BAT     PROC					;AN000;DT
												;AN000;DT
					;;;write SHELL <parameter>				;AN000;DT
					.IF < I_DEST_DRIVE eq E_DEST_DRIVE_C >			;AN000; If install fixed disk ;AN111
				;JW
 0DAA  81 3E 0000 E 0000 E   3						cmp I_DEST_DRIVE,E_DEST_DRIVE_C 
 0DB0  75 30                 6						jne $l179 
					   WRITE_LINE		SC_DRIVE_C			;AN013;JW
 0DB2  BB 0229 R             1	    MOV  BX, OFFSET SC_DRIVE_C			 ; 
 0DB5  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					   COPY_STRING		SC_LINE, MC_LINE, SC_CD 	;AN000;
 0DBA  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0DBE  8D 36 0000 R          1		LEA	SI, SC_CD				; 
 0DC2  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0DC5  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
					   APPEND_STRING	SC_LINE, MC_LINE, S_INSTALL_PATH ;AN000;
 0DCA  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0DCD  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0DD1  8D 36 0000 E          1		LEA	SI, S_INSTALL_PATH				; 
 0DD5  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000; write CD path command
 0DDA  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0DDD  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-133
GEN_COMS					;AN000;                                        

 0DE2                        2	$l179: 
												;
					WRITE_LINE	     SC_SHELLC_1			;AN000;DT
 0DE2  BB 0230 R             1	    MOV  BX, OFFSET SC_SHELLC_1			 ; 
 0DE5  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					MERGE_STRING	     SC_LINE,MC_LINE,SC_AT_SIGN,SC_BREAK      ;AN092;SEH break=off
 0DEA  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0DEE  8D 36 0293 R          1		LEA	SI, SC_AT_SIGN				; 
 0DF2  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0DF5  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0DFA  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0DFD  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0E01  8D 36 0006 R          1		LEA	SI, SC_BREAK				; 
 0E05  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					APPEND_STRING	     SC_LINE,MC_LINE,S_OFF		;AN092;SEH
 0E0A  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0E0D  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0E11  8D 36 0000 E          1		LEA	SI, S_OFF				; 
 0E15  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					WRITE_LINE	     SC_LINE				;AN092;SEH
 0E1A  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0E1D  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					MERGE_STRING	     SC_LINE,MC_LINE,SC_SHELLC,S_SHELL	;AN000;DT
 0E22  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0E26  8D 36 0272 R          1		LEA	SI, SC_SHELLC				; 
 0E2A  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0E2D  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0E32  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0E35  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0E39  8D 36 0000 E          1		LEA	SI, S_SHELL				; 
 0E3D  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					WRITE_LINE	     SC_LINE				;AN000;DT    write SHELL command
 0E42  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0E45  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					WRITE_LINE	     SC_SHELLC_2			;AN000;DT
 0E4A  BB 026A R             1	    MOV  BX, OFFSET SC_SHELLC_2			 ; 
 0E4D  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
												;
					;;;restore BREAK=<parameter>				;
					.IF < S_BREAK gt 0 >					;AN000;JW if field length > zero
 0E52  83 3E 0000 E 00       3						cmp S_BREAK,0 
 0E57  7E 38                 6						jng $l182 
					   MERGE_STRING 	SC_LINE,MC_LINE,SC_AT_SIGN,SC_BREAK ;AN000;JW
 0E59  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0E5D  8D 36 0293 R          1		LEA	SI, SC_AT_SIGN				; 
 0E61  B8 0000 E             1		MOV	AX, MC_LINE				; 
 0E64  9A 0000 ---- E        1		CALL	COPY_ROUTINE				; 
 0E69  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0E6C  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0E70  8D 36 0006 R          1		LEA	SI, SC_BREAK				; 
 0E74  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Page     1-134
GEN_COMS					;AN000;                                        

					   APPEND_STRING	SC_LINE,MC_LINE,S_BREAK 	;AN000;JW
 0E79  B9 0000 E             1		MOV	CX, MC_LINE				; 
 0E7C  8D 3E 0000 E          1		LEA	DI, SC_LINE				; 
 0E80  8D 36 0000 E          1		LEA	SI, S_BREAK				; 
 0E84  9A 0000 ---- E        1		CALL	APPEND_STRING_ROUTINE			; 
					   WRITE_LINE		SC_LINE 			;AN000;JW    write BREAK command
 0E89  BB 0000 E             1	    MOV  BX, OFFSET SC_LINE			 ; 
 0E8C  9A 0000 ---- E        1	    CALL WRITE_LINE_ROUTINE			 ; 
					.ENDIF							;AN000;JW
 0E91                        2	$l182: 
												;
												;
 0E91  C3				RET							;AN000;DT
 0E92				CREATE_SHELL_BAT     ENDP					;AN000;DT
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0E92				SELECT	 ENDS							;AN000;
					 END							;AN000;

Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              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
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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-2


COPY_FILES2  . . . . . . . . . .  	   8
COPY_STRING  . . . . . . . . . .  	   5
COPY_WORD  . . . . . . . . . . .  	   2
CREATE_AUTOEXEC  . . . . . . . .  	   4
CREATE_CONFIG  . . . . . . . . .  	   3
CREATE_FILE  . . . . . . . . . .  	   4
CREATE_SHELL . . . . . . . . . .  	   3
DEC_VAR  . . . . . . . . . . . .  	   1
DIR  . . . . . . . . . . . . . .  	   6
DISKCOPY_PANELS  . . . . . . . .  	   3
DISKCOPY_TO  . . . . . . . . . .  	   4
DISPLAY_MESSAGE  . . . . . . . .  	   3
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_INSTALLED_MEM  . . . . . . .  	   2
GET_KEYBOARD . . . . . . . . . .  	   5
GET_KEYBOARD_INDEX . . . . . . .  	   5
GET_NUMBER_PORTS . . . . . . . .  	  12
GET_PARTITION_SIZE . . . . . . .  	   7
GET_PRINTER_INFO . . . . . . . .  	   3
GET_PRINTER_PARAMS . . . . . . .  	   5
GET_PRINTER_TITLES . . . . . . .  	   3
GET_TIME . . . . . . . . . . . .  	   9
GOTO . . . . . . . . . . . . . .  	   1
HANDLE_FORMAT_ERROR  . . . . . .  	  10
HOOK15 . . . . . . . . . . . . .  	   1
HOOK_2F_FORMAT . . . . . . . . .  	   1
INC_VAR  . . . . . . . . . . . .  	   1
INIT . . . . . . . . . . . . . .  	   5
INIT_VAR . . . . . . . . . . . .  	   1
INIT_VAR_BALANCE . . . . . . . .  	   9
INIT_VAR_MAXIMIZE  . . . . . . .  	   9
INIT_VAR_MINIMIZE  . . . . . . .  	   9
INSERT_DISK  . . . . . . . . . .  	   4
INSTALL_FILES  . . . . . . . . .  	   2
LOAD_MESSAGES  . . . . . . . . .  	   2
MAKE_DIR . . . . . . . . . . . .  	   7
MAKE_DIR_PATHS . . . . . . . . .  	   2
MATCH_DISK_FILES . . . . . . . .  	   7
MERGE_STRING . . . . . . . . . .  	   8
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-3


OPEN_FILE  . . . . . . . . . . .  	   4
POPP . . . . . . . . . . . . . .  	   3
POP_HEADING  . . . . . . . . . .  	   2
POS_CURSOR . . . . . . . . . . .  	  18
PREPARE_FILE . . . . . . . . . .  	   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
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_TIME . . . . . . . . . . . .  	  14
UNHOOK15 . . . . . . . . . . . .  	   1
UNHOOK_2F  . . . . . . . . . . .  	   1
UPDATE_DISK_TABLE  . . . . . . .  	   4
WORD_TO_CHAR . . . . . . . . . .  	   3
WRITE_FILE . . . . . . . . . . .  	   5
WRITE_LINE . . . . . . . . . . .  	   2

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

DATA . . . . . . . . . . . . . .  	02CA	BYTE	PUBLIC	'DATA'
SELECT . . . . . . . . . . . . .  	0E92	PARA	PUBLIC	'SELECT'

Symbols:            

                N a m e         	Type	 Value	 Attr

ACTIVE . . . . . . . . . . . . .  	V BYTE	0000		External
ALTERNATE  . . . . . . . . . . .  	V BYTE	0000		External
ALT_FRENCH . . . . . . . . . . .  	NUMBER	0000		Communal
ALT_FR_ITEMS . . . . . . . . . .  	NUMBER	0000		Communal
ALT_ID_DEF . . . . . . . . . . .  	V BYTE	0000		External
ALT_ITALIAN  . . . . . . . . . .  	NUMBER	0000		Communal
ALT_IT_ITEMS . . . . . . . . . .  	NUMBER	0000		Communal
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-4


ALT_KYBD_FR  . . . . . . . . . .  	V BYTE	0000		External
ALT_KYBD_FR_1  . . . . . . . . .  	V WORD	0000		External
ALT_KYBD_IT  . . . . . . . . . .  	V BYTE	0000		External
ALT_KYBD_IT_1  . . . . . . . . .  	V BYTE	0000		External
ALT_KYBD_UK  . . . . . . . . . .  	V BYTE	0000		External
ALT_KYBD_UK_1  . . . . . . . . .  	V BYTE	0000		External
ALT_KYB_ID . . . . . . . . . . .  	V BYTE	0000		External
ALT_KYB_ID_PREV  . . . . . . . .  	V BYTE	0000		External
ALT_KYB_ITEMS  . . . . . . . . .  	NUMBER	0000		Communal
ALT_KYB_TABLE  . . . . . . . . .  	V BYTE	0000		External
ALT_KYB_TAB_1  . . . . . . . . .  	V BYTE	0000		External
ALT_TAB_PTR  . . . . . . . . . .  	V 0002	0000		External
ALT_UK . . . . . . . . . . . . .  	NUMBER	0000		Communal
ALT_UK_ITEMS . . . . . . . . . .  	NUMBER	0000		Communal
APPEND_STRING_ROUTINE  . . . . .  	L FAR 	0000		External
A_DRIVE  . . . . . . . . . . . .  	NUMBER	0003	

BEEP_ROUTINE . . . . . . . . . .  	L FAR 	0000		External
BIN_TO_CHAR_ROUTINE  . . . . . .  	L FAR 	0000		External
B_DRIVE  . . . . . . . . . . . .  	NUMBER	0001	

CGA  . . . . . . . . . . . . . .  	NUMBER	0000		Communal
CHANGE_ATTRIBUTE_ROUTINE . . . .  	L FAR 	0000		External
CHANGE_AUTOEXEC_ROUTINE  . . . .  	L FAR 	0000		External
CHECK_DISK_ROUTINE . . . . . . .  	L FAR 	0000		External
CHECK_DOS_PATH_ROUTINE . . . . .  	L FAR 	0000		External
CHECK_VALID_MEDIA_ROUTINE  . . .  	L FAR 	0000		External
CHECK_VALID_PATH . . . . . . . .  	L FAR 	0000		External
CHECK_WRITE_ROUTINE  . . . . . .  	L FAR 	0000		External
CHK_EX_MEM_ROUTINE . . . . . . .  	L FAR 	0000		External
CHK_W_PROTECT_FLAG . . . . . . .  	L FAR 	0000		External
CHMOD_FILE_ROUTINE . . . . . . .  	L FAR 	0000		External
CLOSE_FILE_ROUTINE . . . . . . .  	L FAR 	0000		External
CMD_BUFF . . . . . . . . . . . .  	V BYTE	0000		External
COMPARE_ROUTINE  . . . . . . . .  	L FAR 	0000		External
COPY_INST_1200_1440  . . . . . .  	V BYTE	0000		External
COPY_OPER_1200_1440  . . . . . .  	V BYTE	0000		External
COPY_ROUTINE . . . . . . . . . .  	L FAR 	0000		External
COPY_SEL_EGA . . . . . . . . . .  	V BYTE	0000		External
COPY_SEL_LCD . . . . . . . . . .  	V BYTE	0000		External
COPY_SEL_SHEL  . . . . . . . . .  	V BYTE	0000		External
COPY_SHELL_1200_1440 . . . . . .  	V BYTE	0000		External
CREATE_AUTOEXEC_BAT  . . . . . .  	N PROC	0000	SELECT	Global	Length = 06EE
CREATE_CONFIG_SYS  . . . . . . .  	N PROC	06EE	SELECT	Global	Length = 06BC
CREATE_FILE_ROUTINE  . . . . . .  	L FAR 	0000		External
CREATE_SHELL_BAT . . . . . . . .  	N PROC	0DAA	SELECT	Global	Length = 00E8
CTY_A_ITEMS  . . . . . . . . . .  	NUMBER	0000		Communal
CTY_B_ITEMS  . . . . . . . . . .  	NUMBER	0000		Communal
CTY_TAB_A  . . . . . . . . . . .  	V BYTE	0000		External
CTY_TAB_A_1  . . . . . . . . . .  	V BYTE	0000		External
CTY_TAB_B  . . . . . . . . . . .  	V BYTE	0000		External
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-5


CTY_TAB_B_1  . . . . . . . . . .  	V BYTE	0000		External
C_DRIVE  . . . . . . . . . . . .  	NUMBER	0002	

DATA_INVALID . . . . . . . . . .  	NUMBER	0001	
DATA_VALID . . . . . . . . . . .  	NUMBER	0000	
DEF_DEST_A . . . . . . . . . . .  	NUMBER	0003	
DEF_DEST_B . . . . . . . . . . .  	NUMBER	0002	
DEF_DEST_C . . . . . . . . . . .  	NUMBER	0001	
DEST_PANEL . . . . . . . . . . .  	V WORD	0000		External
DISKETTES_EXIST  . . . . . . . .  	NUMBER	0001	
DISK_1_START . . . . . . . . . .  	V BYTE	0000		External
DISK_1_TABLE . . . . . . . . . .  	V BYTE	0000		External
DISK_1_VAL_ITEM  . . . . . . . .  	V BYTE	0000		External
DISK_2_START . . . . . . . . . .  	V BYTE	0000		External
DISK_2_TABLE . . . . . . . . . .  	V BYTE	0000		External
DISK_2_VAL_ITEM  . . . . . . . .  	V BYTE	0000		External
DISK_PANEL . . . . . . . . . . .  	V WORD	0000		External
DISPLAY_MESSAGE_ROUTINE  . . . .  	L FAR 	0000		External
DO_NOT_USE_DEFAULT . . . . . . .  	NUMBER	0001	
DRIVE_A  . . . . . . . . . . . .  	NUMBER	0000		Communal
DRIVE_B  . . . . . . . . . . . .  	NUMBER	0000		Communal
DSKCPY_EXIT  . . . . . . . . . .  	NUMBER	0001	
DSKCPY_TO_A_360  . . . . . . . .  	NUMBER	0001	
DSKCPY_TO_A_720  . . . . . . . .  	NUMBER	0000	
DSKCPY_TO_B  . . . . . . . . . .  	NUMBER	0002	
D_ANSI_1 . . . . . . . . . . . .  	V WORD	0000		External
D_BUFFERS_1  . . . . . . . . . .  	V 0002	0000		External
D_BUFFERS_2  . . . . . . . . . .  	V 0002	0000		External
D_DOS_LOC_1  . . . . . . . . . .  	V 0002	0000		External
D_FASTOPEN_1 . . . . . . . . . .  	V WORD	0000		External
D_FASTOPEN_2 . . . . . . . . . .  	V WORD	0000		External
D_FCBS_1 . . . . . . . . . . . .  	V WORD	0000		External
D_FILES_1  . . . . . . . . . . .  	V WORD	0000		External
D_FILES_2  . . . . . . . . . . .  	V WORD	0000		External
D_LASTDRIVE_1  . . . . . . . . .  	V WORD	0000		External
D_PROMPT_1 . . . . . . . . . . .  	V WORD	0000		External
D_SHELL_1  . . . . . . . . . . .  	V WORD	0000		External
D_SHELL_2  . . . . . . . . . . .  	V WORD	0000		External
D_XMA2EMS_1  . . . . . . . . . .  	V 0002	0000		External

EGA  . . . . . . . . . . . . . .  	NUMBER	0000		Communal
ERASE_FILE_ROUTINE . . . . . . .  	L FAR 	0000		External
ERROR_KEYS . . . . . . . . . . .  	V BYTE	0000		External
ERROR_KEYS_LEN . . . . . . . . .  	NUMBER	0000		Communal
ERR_ACCESSING_FILE . . . . . . .  	NUMBER	0007	
ERR_ALLOCATING_MEM . . . . . . .  	NUMBER	000A	
ERR_CDP_CPP  . . . . . . . . . .  	NUMBER	000B	
ERR_FINDING_NAME . . . . . . . .  	NUMBER	0006	
ERR_FINDING_VALUE  . . . . . . .  	NUMBER	0004	
ERR_LINE_TOO_LONG  . . . . . . .  	NUMBER	0005	
ERR_NOT_ENOUGH_MEM . . . . . . .  	NUMBER	0001	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-6


ERR_NUMBER_MATCH . . . . . . . .  	NUMBER	0009	
ERR_OPENING_FILE . . . . . . . .  	NUMBER	0002	
ERR_PRN_DEFN . . . . . . . . . .  	NUMBER	000C	
ERR_READING_FILE . . . . . . . .  	NUMBER	0003	
ERR_TOO_MANY_DEFS  . . . . . . .  	NUMBER	0008	
EXEC_DIR . . . . . . . . . . . .  	NUMBER	0001	
EXEC_NO_DIR  . . . . . . . . . .  	NUMBER	0000	
EXEC_PROGRAM_ROUTINE . . . . . .  	L FAR 	0000		External
EXPECTED_VERSION . . . . . . . .  	NUMBER	0004	
E_1440_SECTORS . . . . . . . . .  	NUMBER	0012	
E_1440_TRACKS  . . . . . . . . .  	NUMBER	0050	
E_ANSI_B . . . . . . . . . . . .  	NUMBER	0000		Communal
E_ANSI_C . . . . . . . . . . . .  	NUMBER	0000		Communal
E_ANSI_NO  . . . . . . . . . . .  	NUMBER	0000		Communal
E_ANSI_YES . . . . . . . . . . .  	NUMBER	0000		Communal
E_APPEND_NO  . . . . . . . . . .  	NUMBER	0000		Communal
E_APPEND_YES . . . . . . . . . .  	NUMBER	0000		Communal
E_CLEAN_NO . . . . . . . . . . .  	NUMBER	0000		Communal
E_CLEAN_YES  . . . . . . . . . .  	NUMBER	0000		Communal
E_CPSW_B . . . . . . . . . . . .  	NUMBER	0000		Communal
E_CPSW_C . . . . . . . . . . . .  	NUMBER	0000		Communal
E_CPSW_DISP  . . . . . . . . . .  	NUMBER	0000		Communal
E_CPSW_NA  . . . . . . . . . . .  	NUMBER	0000		Communal
E_CPSW_NO  . . . . . . . . . . .  	NUMBER	0000		Communal
E_CPSW_NOT_REC . . . . . . . . .  	NUMBER	0000		Communal
E_CPSW_NOT_VAL . . . . . . . . .  	NUMBER	0000		Communal
E_CPSW_VALID . . . . . . . . . .  	NUMBER	0000		Communal
E_CPSW_YES . . . . . . . . . . .  	NUMBER	0000		Communal
E_CR . . . . . . . . . . . . . .  	NUMBER	0000		Communal
E_CTY_KB_PREDEF  . . . . . . . .  	NUMBER	0000		Communal
E_CTY_KB_USER  . . . . . . . . .  	NUMBER	0000		Communal
E_CTY_LIST_1 . . . . . . . . . .  	NUMBER	0000		Communal
E_CTY_LIST_2 . . . . . . . . . .  	NUMBER	0000		Communal
E_DEST_DOS . . . . . . . . . . .  	NUMBER	0000		Communal
E_DEST_DRIVE_A . . . . . . . . .  	NUMBER	0000		Communal
E_DEST_DRIVE_B . . . . . . . . .  	NUMBER	0000		Communal
E_DEST_DRIVE_C . . . . . . . . .  	NUMBER	0000		Communal
E_DEST_SELECT  . . . . . . . . .  	NUMBER	0000		Communal
E_DEST_SHELL . . . . . . . . . .  	NUMBER	0000		Communal
E_DEST_USER  . . . . . . . . . .  	NUMBER	0000		Communal
E_DISK1_INSTALL  . . . . . . . .  	NUMBER	0000		Communal
E_DISK1_REPLACE  . . . . . . . .  	NUMBER	0000		Communal
E_DISKETTE_1200  . . . . . . . .  	NUMBER	0000		Communal
E_DISKETTE_1440  . . . . . . . .  	NUMBER	0000		Communal
E_DISKETTE_360 . . . . . . . . .  	NUMBER	0000		Communal
E_DISKETTE_720 . . . . . . . . .  	NUMBER	0000		Communal
E_DISKETTE_INV . . . . . . . . .  	NUMBER	0000		Communal
E_DISK_1 . . . . . . . . . . . .  	NUMBER	0000		Communal
E_DISK_2 . . . . . . . . . . . .  	NUMBER	0000		Communal
E_DISK_COL . . . . . . . . . . .  	NUMBER	0000		Communal
E_DISK_EDOS_MEM  . . . . . . . .  	NUMBER	0000		Communal
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-7


E_DISK_EXT_DOS . . . . . . . . .  	NUMBER	0000		Communal
E_DISK_FREE_MEM  . . . . . . . .  	NUMBER	0000		Communal
E_DISK_INV . . . . . . . . . . .  	NUMBER	0000		Communal
E_DISK_LOG_DRI . . . . . . . . .  	NUMBER	0000		Communal
E_DISK_NO_PART . . . . . . . . .  	NUMBER	0000		Communal
E_DISK_PRI . . . . . . . . . . .  	NUMBER	0000		Communal
E_DISK_ROW . . . . . . . . . . .  	NUMBER	0000		Communal
E_DISK_VAL_PART  . . . . . . . .  	NUMBER	0000		Communal
E_DRIVE_COL  . . . . . . . . . .  	NUMBER	0000		Communal
E_DRIVE_ROW  . . . . . . . . . .  	NUMBER	0000		Communal
E_DSKCPY_OK  . . . . . . . . . .  	NUMBER	0000		Communal
E_DSKCPY_RETRY . . . . . . . . .  	NUMBER	0000		Communal
E_ENTER  . . . . . . . . . . . .  	NUMBER	0000		Communal
E_ENTIRE_DISK  . . . . . . . . .  	NUMBER	0000		Communal
E_ESCAPE . . . . . . . . . . . .  	NUMBER	0000		Communal
E_F3 . . . . . . . . . . . . . .  	NUMBER	0000		Communal
E_FASTOPEN_C . . . . . . . . . .  	NUMBER	0000		Communal
E_FASTOPEN_NO  . . . . . . . . .  	NUMBER	0000		External
E_FASTOPEN_YES . . . . . . . . .  	NUMBER	0000		Communal
E_FILES  . . . . . . . . . . . .  	NUMBER	0000		Communal
E_FILE_ATTR  . . . . . . . . . .  	NUMBER	0000		Communal
E_FORMAT_FAT . . . . . . . . . .  	NUMBER	0000		Communal
E_FORMAT_NEW . . . . . . . . . .  	NUMBER	0000		Communal
E_FORMAT_NO  . . . . . . . . . .  	NUMBER	0000		Communal
E_FORMAT_SELECT  . . . . . . . .  	NUMBER	0000		Communal
E_FORMAT_USED  . . . . . . . . .  	NUMBER	0000		Communal
E_FREE_MEM_DISK  . . . . . . . .  	NUMBER	0000		Communal
E_FREE_MEM_EDOS  . . . . . . . .  	NUMBER	0000		Communal
E_GRAFTABL_B . . . . . . . . . .  	NUMBER	0000		Communal
E_GRAFTABL_C . . . . . . . . . .  	NUMBER	0000		Communal
E_GRAFTABL_NA  . . . . . . . . .  	NUMBER	0000		Communal
E_GRAFTABL_NO  . . . . . . . . .  	NUMBER	0000		Communal
E_GRAFTABL_YES . . . . . . . . .  	NUMBER	0000		Communal
E_GRAPHICS_B . . . . . . . . . .  	NUMBER	0000		Communal
E_GRAPHICS_C . . . . . . . . . .  	NUMBER	0000		Communal
E_GRAPHICS_NO  . . . . . . . . .  	NUMBER	0000		Communal
E_GRAPHICS_YES . . . . . . . . .  	NUMBER	0000		Communal
E_HIDE_SEL . . . . . . . . . . .  	NUMBER	0000		Communal
E_HIDE_STARTUP . . . . . . . . .  	NUMBER	0000		Communal
E_INST_1200_1440 . . . . . . . .  	NUMBER	0000		Communal
E_IS_MOD80 . . . . . . . . . . .  	NUMBER	0000		Communal
E_KYBD_ALT_NO  . . . . . . . . .  	NUMBER	0000		Communal
E_KYBD_ALT_YES . . . . . . . . .  	NUMBER	0000		Communal
E_KYBD_LIST_1  . . . . . . . . .  	NUMBER	0000		Communal
E_KYBD_LIST_2  . . . . . . . . .  	NUMBER	0000		Communal
E_KYBD_VAL_DEF . . . . . . . . .  	NUMBER	0000		Communal
E_KYBD_VAL_NO  . . . . . . . . .  	NUMBER	0000		Communal
E_KYBD_VAL_YES . . . . . . . . .  	NUMBER	0000		Communal
E_KYB_LOAD_ERR . . . . . . . . .  	NUMBER	0000		Communal
E_KYB_LOAD_SUC . . . . . . . . .  	NUMBER	0000		Communal
E_KYB_LOAD_UND . . . . . . . . .  	NUMBER	0000		Communal
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-8


E_KYB_LOAD_US  . . . . . . . . .  	NUMBER	0000		Communal
E_LF . . . . . . . . . . . . . .  	NUMBER	0000		Communal
E_NA . . . . . . . . . . . . . .  	NUMBER	0000		Communal
E_NO . . . . . . . . . . . . . .  	NUMBER	0000		Communal
E_NOCPSW_DISP  . . . . . . . . .  	NUMBER	0000		Communal
E_OPER_1200_1440 . . . . . . . .  	NUMBER	0000		Communal
E_OPTION_A_C . . . . . . . . . .  	NUMBER	0000		Communal
E_OPTION_B_C . . . . . . . . . .  	NUMBER	0000		Communal
E_PARALLEL . . . . . . . . . . .  	NUMBER	0000		Communal
E_PART_DEFAULT . . . . . . . . .  	NUMBER	0000		Communal
E_PART_EXT_DOS . . . . . . . . .  	NUMBER	0000		Communal
E_PART_FAT . . . . . . . . . . .  	NUMBER	0000		Communal
E_PART_FORMAT  . . . . . . . . .  	NUMBER	0000		Communal
E_PART_IGNORE  . . . . . . . . .  	NUMBER	0000		Communal
E_PART_KSAM  . . . . . . . . . .  	NUMBER	0000		Communal
E_PART_LOG_DRI . . . . . . . . .  	NUMBER	0000		Communal
E_PART_OTHER . . . . . . . . . .  	NUMBER	0000		Communal
E_PART_PRI_DOS . . . . . . . . .  	NUMBER	0000		Communal
E_PART_UNDEF . . . . . . . . . .  	NUMBER	0000		Communal
E_PART_UNFORMAT  . . . . . . . .  	NUMBER	0000		Communal
E_PART_USER  . . . . . . . . . .  	NUMBER	0000		Communal
E_PATH_NO  . . . . . . . . . . .  	NUMBER	0000		Communal
E_PATH_YES . . . . . . . . . . .  	NUMBER	0000		Communal
E_PROMPT_NO  . . . . . . . . . .  	NUMBER	0000		Communal
E_PROMPT_YES . . . . . . . . . .  	NUMBER	0000		Communal
E_QUIT . . . . . . . . . . . . .  	NUMBER	0000		Communal
E_RETURN . . . . . . . . . . . .  	NUMBER	0000		Communal
E_REVIEW_ACCEPT  . . . . . . . .  	NUMBER	0000		Communal
E_REVIEW_VIEW  . . . . . . . . .  	NUMBER	0000		Communal
E_SELECT_FDISK . . . . . . . . .  	NUMBER	0000		Communal
E_SELECT_INV . . . . . . . . . .  	NUMBER	0000		Communal
E_SELECT_MENU  . . . . . . . . .  	NUMBER	0000		Communal
E_SEL_EGA  . . . . . . . . . . .  	NUMBER	0000		Communal
E_SEL_LCD  . . . . . . . . . . .  	NUMBER	0000		Communal
E_SEL_SHEL . . . . . . . . . . .  	NUMBER	0000		Communal
E_SERIAL . . . . . . . . . . . .  	NUMBER	0000		Communal
E_SHARE_C  . . . . . . . . . . .  	NUMBER	0000		Communal
E_SHARE_NO . . . . . . . . . . .  	NUMBER	0000		Communal
E_SHARE_YES  . . . . . . . . . .  	NUMBER	0000		Communal
E_SHELL_1200_1440  . . . . . . .  	NUMBER	0000		Communal
E_SHELL_B  . . . . . . . . . . .  	NUMBER	0000		Communal
E_SHELL_C  . . . . . . . . . . .  	NUMBER	0000		Communal
E_SHELL_NO . . . . . . . . . . .  	NUMBER	0000		Communal
E_SHELL_YES  . . . . . . . . . .  	NUMBER	0000		Communal
E_SPACE  . . . . . . . . . . . .  	NUMBER	0000		Communal
E_SPACE_DISK . . . . . . . . . .  	NUMBER	0000		Communal
E_SPACE_EDOS . . . . . . . . . .  	NUMBER	0000		Communal
E_SPACE_NONE . . . . . . . . . .  	NUMBER	0000		Communal
E_TAB  . . . . . . . . . . . . .  	NUMBER	0000		Communal
E_VDISK_B  . . . . . . . . . . .  	NUMBER	0000		Communal
E_VDISK_C  . . . . . . . . . . .  	NUMBER	0000		Communal
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-9


E_VDISK_NO . . . . . . . . . . .  	NUMBER	0000		Communal
E_VDISK_YES  . . . . . . . . . .  	NUMBER	0000		Communal
E_WORKSPACE_BAL  . . . . . . . .  	NUMBER	0000		Communal
E_WORKSPACE_MAX  . . . . . . . .  	NUMBER	0000		Communal
E_WORKSPACE_MIN  . . . . . . . .  	NUMBER	0000		Communal
E_XMA_ABSENT . . . . . . . . . .  	NUMBER	0000		Communal
E_XMA_C  . . . . . . . . . . . .  	NUMBER	0000		Communal
E_XMA_NA . . . . . . . . . . . .  	NUMBER	0000		Communal
E_XMA_NO . . . . . . . . . . . .  	NUMBER	0000		Communal
E_XMA_PRESENT  . . . . . . . . .  	NUMBER	0000		Communal
E_XMA_YES  . . . . . . . . . . .  	NUMBER	0000		Communal
E_YES  . . . . . . . . . . . . .  	NUMBER	0000		Communal

FALSE  . . . . . . . . . . . . .  	NUMBER	0000	
FIND_FILE_ROUTINE  . . . . . . .  	L FAR 	0000		External
FK_DATE  . . . . . . . . . . . .  	V BYTE	0000		External
FK_DATE_LEN  . . . . . . . . . .  	NUMBER	0000		Communal
FK_ENT . . . . . . . . . . . . .  	V BYTE	0000		External
FK_ENT_ESC . . . . . . . . . . .  	V BYTE	0000		External
FK_ENT_ESC_F3  . . . . . . . . .  	V BYTE	0000		External
FK_ENT_ESC_F3_LEN  . . . . . . .  	NUMBER	0000		Communal
FK_ENT_ESC_LEN . . . . . . . . .  	NUMBER	0000		Communal
FK_ENT_F3  . . . . . . . . . . .  	V BYTE	0000		External
FK_ENT_F3_LEN  . . . . . . . . .  	NUMBER	0000		Communal
FK_ENT_LEN . . . . . . . . . . .  	NUMBER	0000		Communal
FK_FORMAT  . . . . . . . . . . .  	V BYTE	0000		External
FK_FORMAT_LEN  . . . . . . . . .  	NUMBER	0000		Communal
FK_REBOOT  . . . . . . . . . . .  	V BYTE	0000		External
FK_REBOOT_LEN  . . . . . . . . .  	NUMBER	0000		Communal
FK_REVIEW  . . . . . . . . . . .  	V BYTE	0000		External
FK_REVIEW_LEN  . . . . . . . . .  	NUMBER	0000		External
FK_SCROLL  . . . . . . . . . . .  	V BYTE	0000		External
FK_SCROLL_LEN  . . . . . . . . .  	NUMBER	0000		Communal
FK_TAB . . . . . . . . . . . . .  	V BYTE	0000		External
FK_TAB_LEN . . . . . . . . . . .  	NUMBER	0000		Communal
FK_TEXT  . . . . . . . . . . . .  	V BYTE	0000		External
FK_TEXT_LEN  . . . . . . . . . .  	NUMBER	0000		Communal
FORMAT_WHICH . . . . . . . . . .  	V BYTE	0000		External
FREE_EDOS_SPACE  . . . . . . . .  	NUMBER	0001	
F_ANSI . . . . . . . . . . . . .  	V WORD	0000		External
F_APPEND . . . . . . . . . . . .  	V WORD	0000		External
F_CPSW . . . . . . . . . . . . .  	V WORD	0000		External
F_FASTOPEN . . . . . . . . . . .  	V WORD	0000		External
F_FORMAT . . . . . . . . . . . .  	V WORD	0000		External
F_GRAFTABL . . . . . . . . . . .  	V WORD	0000		External
F_GRAPHICS . . . . . . . . . . .  	V WORD	0000		External
F_PARTITION  . . . . . . . . . .  	V 0002	0000		External
F_PATH . . . . . . . . . . . . .  	V WORD	0000		External
F_PROMPT . . . . . . . . . . . .  	V WORD	0000		External
F_REVIEW . . . . . . . . . . . .  	V WORD	0000		External
F_SHARE  . . . . . . . . . . . .  	V WORD	0000		External
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-10


F_SHELL  . . . . . . . . . . . .  	V WORD	0000		External
F_VDISK  . . . . . . . . . . . .  	V WORD	0000		External
F_XMA  . . . . . . . . . . . . .  	V 0002	0000		External

GET_CNTY_DEF_ROUTINE . . . . . .  	L FAR 	0000		External
GET_CNTY_INDEX_ROUTINE . . . . .  	L FAR 	0000		External
GET_KYBD_INDEX_ROUTINE . . . . .  	L FAR 	0000		External
GET_KYBD_ROUTINE . . . . . . . .  	L FAR 	0000		External
GET_PRINTER_INFO_ROUTINE . . . .  	L FAR 	0000		External
GET_PRINTER_PARAMS_ROUTINE . . .  	L FAR 	0000		External
GET_PRINTER_TITLES_ROUTINE . . .  	L FAR 	0000		External

HIDE_SEL . . . . . . . . . . . .  	V BYTE	0000		External
HIDE_STARTUP . . . . . . . . . .  	V BYTE	0000		External
HOOK_INT_23  . . . . . . . . . .  	L FAR 	0000		External
HOOK_INT_24  . . . . . . . . . .  	L FAR 	0000		External
HOOK_INT_2F  . . . . . . . . . .  	L FAR 	0000		External
HOOK_INT_2F_256KB  . . . . . . .  	L FAR 	0000		External
HOOK_INT_2F_FORMAT . . . . . . .  	L FAR 	0000		External

INSTALLRW  . . . . . . . . . . .  	NUMBER	0080	
INT_24_ERROR . . . . . . . . . .  	V WORD	0000		External
INT_24_FLAG  . . . . . . . . . .  	V BYTE	0000		External
I_COUNTRY  . . . . . . . . . . .  	V WORD	0000		External
I_CTY_KYBD . . . . . . . . . . .  	V 0002	0000		External
I_DESTINATION  . . . . . . . . .  	V WORD	0000		External
I_DEST_DRIVE . . . . . . . . . .  	V WORD	0000		External
I_KEYBOARD . . . . . . . . . . .  	V WORD	0000		External
I_KYBD_ALT . . . . . . . . . . .  	V WORD	0000		External
I_PORT . . . . . . . . . . . . .  	V WORD	0000		External
I_PRINTER  . . . . . . . . . . .  	V WORD	0000		External
I_REDIRECT . . . . . . . . . . .  	V WORD	0000		External
I_USER_INDEX . . . . . . . . . .  	V WORD	0000		External
I_WORKSPACE  . . . . . . . . . .  	V 0002	0000		External

KYBD_A_ITEMS . . . . . . . . . .  	NUMBER	0000		Communal
KYBD_B_ITEMS . . . . . . . . . .  	NUMBER	0000		Communal
KYBD_TAB_A . . . . . . . . . . .  	V BYTE	0000		External
KYBD_TAB_A_1 . . . . . . . . . .  	V BYTE	0000		External
KYBD_TAB_B . . . . . . . . . . .  	V BYTE	0000		External
KYBD_TAB_B_1 . . . . . . . . . .  	V BYTE	0000		External

LCD  . . . . . . . . . . . . . .  	NUMBER	0000		Communal
LEN_ALT_KYBD_ID  . . . . . . . .  	NUMBER	0003	

MACHINE_TYPE . . . . . . . . . .  	V BYTE	0000		External
MAJOR_VERSION  . . . . . . . . .  	NUMBER	0004	
MAKE_DIR_PATHS_ROUTINE . . . . .  	L FAR 	0000		External
MATCH_FILES_ROUTINE  . . . . . .  	L FAR 	0000		External
MAX_DAY  . . . . . . . . . . . .  	NUMBER	0000		Communal
MAX_HOUR . . . . . . . . . . . .  	NUMBER	0000		Communal
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-11


MAX_INPUT_VAL  . . . . . . . . .  	V WORD	0000		External
MAX_MINUTE . . . . . . . . . . .  	NUMBER	0000		Communal
MAX_MONTH  . . . . . . . . . . .  	NUMBER	0000		Communal
MAX_NUMPRINT . . . . . . . . . .  	NUMBER	0000		Communal
MAX_NUM_DISKETTE . . . . . . . .  	NUMBER	0002	
MAX_SECOND . . . . . . . . . . .  	NUMBER	0000		Communal
MAX_YEAR . . . . . . . . . . . .  	NUMBER	0000		Communal
MC_437 . . . . . . . . . . . . .  	NUMBER	0005	
MC_ANSI_SYS  . . . . . . . . . .  	NUMBER	0009	
MC_APPEND  . . . . . . . . . . .  	NUMBER	0007	
MC_AT_SIGN . . . . . . . . . . .  	NUMBER	0001	
MC_BREAK . . . . . . . . . . . .  	NUMBER	0006	
MC_BUFFERS . . . . . . . . . . .  	NUMBER	0008	
MC_CD  . . . . . . . . . . . . .  	NUMBER	0004	
MC_CHCP  . . . . . . . . . . . .  	NUMBER	0005	
MC_CLOSE_BRAC  . . . . . . . . .  	NUMBER	0002	
MC_COM . . . . . . . . . . . . .  	NUMBER	0003	
MC_COMMA . . . . . . . . . . . .  	NUMBER	0001	
MC_COMMAND_COM . . . . . . . . .  	NUMBER	000B	
MC_COMMAS  . . . . . . . . . . .  	NUMBER	0002	
MC_COUNTRY . . . . . . . . . . .  	NUMBER	0008	
MC_COUNTRY_SYS . . . . . . . . .  	NUMBER	000B	
MC_CPSW  . . . . . . . . . . . .  	NUMBER	0005	
MC_DEVICE  . . . . . . . . . . .  	NUMBER	0007	
MC_DISPLAY_EGA . . . . . . . . .  	NUMBER	0008	
MC_DISPLAY_LCD . . . . . . . . .  	NUMBER	0008	
MC_DISPLAY_SYS . . . . . . . . .  	NUMBER	0011	
MC_DRIVE_C . . . . . . . . . . .  	NUMBER	0003	
MC_ECHO  . . . . . . . . . . . .  	NUMBER	0009	
MC_EQUAL_COM . . . . . . . . . .  	NUMBER	0004	
MC_EQUAL_OPEN  . . . . . . . . .  	NUMBER	0002	
MC_FASTOPEN  . . . . . . . . . .  	NUMBER	000D	
MC_FCBS  . . . . . . . . . . . .  	NUMBER	0005	
MC_FILES . . . . . . . . . . . .  	NUMBER	0006	
MC_GRAFTABL  . . . . . . . . . .  	NUMBER	0009	
MC_GRAPHICS  . . . . . . . . . .  	NUMBER	0009	
MC_INSTALL . . . . . . . . . . .  	NUMBER	0008	
MC_KEYBOARD_SYS  . . . . . . . .  	NUMBER	000C	
MC_KEYB_A  . . . . . . . . . . .  	NUMBER	0005	
MC_KEYB_C  . . . . . . . . . . .  	NUMBER	0009	
MC_KEYB_SWITCH . . . . . . . . .  	NUMBER	0005	
MC_LASTDRIVE . . . . . . . . . .  	NUMBER	000A	
MC_LINE  . . . . . . . . . . . .  	NUMBER	0000		Communal
MC_LPT . . . . . . . . . . . . .  	NUMBER	0003	
MC_MODE_COM  . . . . . . . . . .  	NUMBER	0008	
MC_MODE_CON  . . . . . . . . . .  	NUMBER	0013	
MC_MODE_LPT  . . . . . . . . . .  	NUMBER	0008	
MC_NLSFUNC . . . . . . . . . . .  	NUMBER	000C	
MC_PATH  . . . . . . . . . . . .  	NUMBER	0005	
MC_PREPARE . . . . . . . . . . .  	NUMBER	000B	
MC_PRINTER_SYS . . . . . . . . .  	NUMBER	000C	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-12


MC_PRINT_COM . . . . . . . . . .  	NUMBER	0009	
MC_PROMPT  . . . . . . . . . . .  	NUMBER	0007	
MC_SET_COMSPEC . . . . . . . . .  	NUMBER	000C	
MC_SHARE . . . . . . . . . . . .  	NUMBER	000A	
MC_SHELL . . . . . . . . . . . .  	NUMBER	0006	
MC_SHELLC  . . . . . . . . . . .  	NUMBER	0008	
MC_SHELLC_1  . . . . . . . . . .  	NUMBER	0036	
MC_SHELLC_2  . . . . . . . . . .  	NUMBER	0004	
MC_SHELLP  . . . . . . . . . . .  	NUMBER	0008	
MC_SHELL_1 . . . . . . . . . . .  	NUMBER	000B	
MC_SHELL_2 . . . . . . . . . . .  	NUMBER	0005	
MC_SHELL_3 . . . . . . . . . . .  	NUMBER	000A	
MC_SLASH_X . . . . . . . . . . .  	NUMBER	0003	
MC_STACKS  . . . . . . . . . . .  	NUMBER	0007	
MC_VDISK_SYS . . . . . . . . . .  	NUMBER	000D	
MC_VER . . . . . . . . . . . . .  	NUMBER	0003	
MC_VERIFY  . . . . . . . . . . .  	NUMBER	0007	
MC_XMA2EMS_SYS . . . . . . . . .  	NUMBER	000C	
MC_XMAEM_SYS . . . . . . . . . .  	NUMBER	000A	
MD_DISPLAY_EGA . . . . . . . . .  	NUMBER	0003	
MD_DISPLAY_LCD . . . . . . . . .  	NUMBER	0003	
MEM_SIZE . . . . . . . . . . . .  	V WORD	0000		External
MINOR_VERSION  . . . . . . . . .  	NUMBER	0000	
MIN_DAY  . . . . . . . . . . . .  	NUMBER	0000		Communal
MIN_HOUR . . . . . . . . . . . .  	NUMBER	0000		Communal
MIN_INPUT_VAL  . . . . . . . . .  	V WORD	0000		External
MIN_MINUTE . . . . . . . . . . .  	NUMBER	0000		Communal
MIN_MONTH  . . . . . . . . . . .  	NUMBER	0000		Communal
MIN_NUMPRINT . . . . . . . . . .  	NUMBER	0000		Communal
MIN_SECOND . . . . . . . . . . .  	NUMBER	0000		Communal
MIN_YEAR . . . . . . . . . . . .  	NUMBER	0000		Communal
MOD25_OR_MOD30 . . . . . . . . .  	NUMBER	0000		Communal
MOD_XCOPY  . . . . . . . . . . .  	L FAR 	0000		External
MONO . . . . . . . . . . . . . .  	NUMBER	0000		Communal
MSG_INV_BOOT_MEDIA . . . . . . .  	NUMBER	0004	
MSG_INV_DISK_MEDIA . . . . . . .  	NUMBER	0005	
MSG_INV_DOS  . . . . . . . . . .  	NUMBER	0001	
MSG_INV_INSTALL  . . . . . . . .  	NUMBER	0007	
MSG_INV_PARMS  . . . . . . . . .  	NUMBER	0006	
MSG_LOADING  . . . . . . . . . .  	NUMBER	0008	
MSG_RELOADING  . . . . . . . . .  	NUMBER	0009	
MT_BREAK . . . . . . . . . . . .  	NUMBER	0000		Communal
MT_BUFFERS . . . . . . . . . . .  	NUMBER	0000		Communal
MT_CPSW  . . . . . . . . . . . .  	NUMBER	0000		Communal
MT_FCBS  . . . . . . . . . . . .  	NUMBER	0000		Communal
MT_FILES . . . . . . . . . . . .  	NUMBER	0000		Communal
MT_LASTDRIVE . . . . . . . . . .  	NUMBER	0000		Communal
MT_STACKS  . . . . . . . . . . .  	NUMBER	0000		Communal
MT_VERIFY  . . . . . . . . . . .  	NUMBER	0000		Communal
M_ANSI . . . . . . . . . . . . .  	NUMBER	0000		Communal
M_APPEND . . . . . . . . . . . .  	NUMBER	0000		Communal
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-13


M_APPEND_P . . . . . . . . . . .  	NUMBER	0000		Communal
M_BREAK  . . . . . . . . . . . .  	NUMBER	0000		Communal
M_BUFFERS  . . . . . . . . . . .  	NUMBER	0000		Communal
M_CPSW . . . . . . . . . . . . .  	NUMBER	0000		Communal
M_CP_DRIVER  . . . . . . . . . .  	NUMBER	0000		Communal
M_CP_PREPARE . . . . . . . . . .  	NUMBER	0000		Communal
M_DEST_DRIVE . . . . . . . . . .  	NUMBER	0000		Communal
M_DISK_1_ITEMS . . . . . . . . .  	NUMBER	0000		Communal
M_DISK_2_ITEMS . . . . . . . . .  	NUMBER	0000		Communal
M_DOS_EDOS_PART  . . . . . . . .  	NUMBER	0003	
M_DOS_EXISTS . . . . . . . . . .  	NUMBER	0001	
M_DOS_LOC  . . . . . . . . . . .  	NUMBER	0000		Communal
M_DOS_PATH . . . . . . . . . . .  	NUMBER	0032	
M_EDOS_EXISTS  . . . . . . . . .  	NUMBER	0002	
M_EDOS_SPACE . . . . . . . . . .  	NUMBER	0008	
M_FASTOPEN . . . . . . . . . . .  	NUMBER	0000		Communal
M_FCBS . . . . . . . . . . . . .  	NUMBER	0000		Communal
M_FILES  . . . . . . . . . . . .  	NUMBER	0000		Communal
M_FREE_SPACE . . . . . . . . . .  	NUMBER	0010	
M_GRAPHICS . . . . . . . . . . .  	NUMBER	0000		Communal
M_GRAPH_PARM . . . . . . . . . .  	NUMBER	0000		Communal
M_INSTALL_PATH . . . . . . . . .  	NUMBER	0000		Communal
M_KEYBOARD . . . . . . . . . . .  	NUMBER	0000		Communal
M_KYBD_ALT . . . . . . . . . . .  	NUMBER	0000		Communal
M_LASTDRIVE  . . . . . . . . . .  	NUMBER	0000		Communal
M_LOGICAL_EXISTS . . . . . . . .  	NUMBER	0004	
M_MODE_PARM  . . . . . . . . . .  	NUMBER	0000		Communal
M_PATH . . . . . . . . . . . . .  	NUMBER	0000		Communal
M_PRINT_FILE . . . . . . . . . .  	NUMBER	0000		Communal
M_PROMPT . . . . . . . . . . . .  	NUMBER	0000		Communal
M_SHARE  . . . . . . . . . . . .  	NUMBER	0000		Communal
M_SHELL  . . . . . . . . . . . .  	NUMBER	0000		Communal
M_STACKS . . . . . . . . . . . .  	NUMBER	0000		Communal
M_STR120_1 . . . . . . . . . . .  	NUMBER	0000		Communal
M_STR120_2 . . . . . . . . . . .  	NUMBER	0000		Communal
M_STR120_3 . . . . . . . . . . .  	NUMBER	0000		Communal
M_STR120_4 . . . . . . . . . . .  	NUMBER	0000		Communal
M_STR40  . . . . . . . . . . . .  	NUMBER	0000		Communal
M_USER_STRING  . . . . . . . . .  	NUMBER	0000		Communal
M_VDISK  . . . . . . . . . . . .  	NUMBER	0000		Communal
M_VERIFY . . . . . . . . . . . .  	NUMBER	0000		Communal
M_XMA2EMS  . . . . . . . . . . .  	NUMBER	0000		Communal
M_XMAEM  . . . . . . . . . . . .  	NUMBER	0000		Communal

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	
N_BYTE_1 . . . . . . . . . . . .  	V BYTE	0000		External
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-14


N_COUNTER  . . . . . . . . . . .  	V WORD	0000		External
N_COUNTRY  . . . . . . . . . . .  	V WORD	0000		External
N_CPSW . . . . . . . . . . . . .  	V WORD	0000		External
N_CP_PRI . . . . . . . . . . . .  	V WORD	0000		External
N_CP_SEC . . . . . . . . . . . .  	V WORD	0000		External
N_CTY_LIST . . . . . . . . . . .  	V 0002	0000		External
N_CTY_RES  . . . . . . . . . . .  	V BYTE	0000		External
N_DAY  . . . . . . . . . . . . .  	V 0002	0000		External
N_DESIGNATES . . . . . . . . . .  	V WORD	0000		External
N_DEST . . . . . . . . . . . . .  	V BYTE	0000		External
N_DEST_DRIVE . . . . . . . . . .  	V BYTE	0000		External
N_DISK1_MODE . . . . . . . . . .  	V WORD	0000		External
N_DISKETTE_A . . . . . . . . . .  	V BYTE	0000		External
N_DISKETTE_B . . . . . . . . . .  	V BYTE	0000		External
N_DISKETTE_TOT . . . . . . . . .  	V BYTE	0000		External
N_DISK_1 . . . . . . . . . . . .  	V WORD	0000		External
N_DISK_1_S1  . . . . . . . . . .  	V 0002	0000		External
N_DISK_1_S2  . . . . . . . . . .  	V 0002	0000		External
N_DISK_2 . . . . . . . . . . . .  	V WORD	0000		External
N_DISK_2_S1  . . . . . . . . . .  	V 0002	0000		External
N_DISK_2_S2  . . . . . . . . . .  	V 0002	0000		External
N_DISK_NUM . . . . . . . . . . .  	V BYTE	0000		External
N_DISPLAY  . . . . . . . . . . .  	V BYTE	0000		External
N_DRIVE_OPTION . . . . . . . . .  	V WORD	0000		External
N_DSKCPY_ERR . . . . . . . . . .  	V BYTE	0000		External
N_FORMAT_MODE  . . . . . . . . .  	V WORD	0000		External
N_HANDLE . . . . . . . . . . . .  	V WORD	0000		External
N_HOUR . . . . . . . . . . . . .  	V WORD	0000		External
N_HOUSE_CLEAN  . . . . . . . . .  	V BYTE	0000		External
N_KYBD_ALT . . . . . . . . . . .  	V BYTE	0000		External
N_KYBD_LIST  . . . . . . . . . .  	V 0002	0000		External
N_KYBD_VAL . . . . . . . . . . .  	V BYTE	0000		External
N_KYB_LOAD . . . . . . . . . . .  	V WORD	0000		External
N_LEVEL1_PART  . . . . . . . . .  	V BYTE	0000		External
N_LEVEL2_PART  . . . . . . . . .  	V BYTE	0000		External
N_LEVEL3_PART  . . . . . . . . .  	V BYTE	0000		External
N_LEVEL4_PART  . . . . . . . . .  	V BYTE	0000		External
N_MINUTE . . . . . . . . . . . .  	V WORD	0000		External
N_MOD80  . . . . . . . . . . . .  	V WORD	0000		External
N_MONTH  . . . . . . . . . . . .  	V WORD	0000		External
N_NAME_PART  . . . . . . . . . .  	V BYTE	0000		External
N_NUMPRINT . . . . . . . . . . .  	V 0002	0000		External
N_PARALLEL . . . . . . . . . . .  	V WORD	0000		External
N_PRINTER_TYPE . . . . . . . . .  	V BYTE	0000		External
N_RETCODE  . . . . . . . . . . .  	V WORD	0000		External
N_SECOND . . . . . . . . . . . .  	V WORD	0000		External
N_SELECT_MODE  . . . . . . . . .  	V WORD	0000		External
N_SERIAL . . . . . . . . . . . .  	V WORD	0000		External
N_SIZE_PART  . . . . . . . . . .  	V 0002	0000		External
N_STATUS_PART  . . . . . . . . .  	V BYTE	0000		External
N_TYPE_PART  . . . . . . . . . .  	V BYTE	0000		External
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-15


N_USER_FUNC  . . . . . . . . . .  	V 0002	0000		External
N_USER_NUMERIC . . . . . . . . .  	V WORD	0000		External
N_VALID_KEYS . . . . . . . . . .  	V WORD	0000		External
N_WORD_1 . . . . . . . . . . . .  	V WORD	0000		External
N_WORD_2 . . . . . . . . . . . .  	V WORD	0000		External
N_WORD_3 . . . . . . . . . . . .  	V WORD	0000		External
N_WORD_4 . . . . . . . . . . . .  	V WORD	0000		External
N_WORD_5 . . . . . . . . . . . .  	V WORD	0000		External
N_WORD_6 . . . . . . . . . . . .  	V WORD	0000		External
N_WORK_PREV  . . . . . . . . . .  	V WORD	0000		External
N_WRITE_ERR_CODE . . . . . . . .  	V 0002	0000		External
N_WRITE_HANDLE . . . . . . . . .  	V WORD	0000		External
N_XMA  . . . . . . . . . . . . .  	V 0002	0000		External
N_YEAR . . . . . . . . . . . . .  	V WORD	0000		External
N_ZERO_DISKETTE  . . . . . . . .  	NUMBER	0000		Communal

OLD_INT_23 . . . . . . . . . . .  	V DWORD	0000		External
OLD_INT_24 . . . . . . . . . . .  	V DWORD	0000		External
OLD_INT_2F . . . . . . . . . . .  	V DWORD	0000		External
OPEN_FILE_ROUTINE  . . . . . . .  	L FAR 	0000		External

PARM_BLOCK . . . . . . . . . . .  	V WORD	0000		External
PC_437 . . . . . . . . . . . . .  	L BYTE	011E	DATA
PC_ANSI_SYS  . . . . . . . . . .  	L BYTE	00B7	DATA
PC_APPEND  . . . . . . . . . . .  	L BYTE	018F	DATA
PC_AT_SIGN . . . . . . . . . . .  	L BYTE	0295	DATA
PC_BREAK . . . . . . . . . . . .  	L BYTE	0008	DATA
PC_BUFFERS . . . . . . . . . . .  	L BYTE	0037	DATA
PC_CD  . . . . . . . . . . . . .  	L BYTE	0002	DATA
PC_CHCP  . . . . . . . . . . . .  	L BYTE	0224	DATA
PC_CLOSE_BRAC  . . . . . . . . .  	L BYTE	0215	DATA
PC_COM . . . . . . . . . . . . .  	L BYTE	0115	DATA
PC_COMMA . . . . . . . . . . . .  	L BYTE	0125	DATA
PC_COMMAND_COM . . . . . . . . .  	L BYTE	01AF	DATA
PC_COMMAS  . . . . . . . . . . .  	L BYTE	0220	DATA
PC_COUNTRY . . . . . . . . . . .  	L BYTE	0020	DATA
PC_COUNTRY_SYS . . . . . . . . .  	L BYTE	002A	DATA
PC_CPSW  . . . . . . . . . . . .  	L BYTE	0010	DATA
PC_DEVICE  . . . . . . . . . . .  	L BYTE	0094	DATA
PC_DISPLAY_EGA . . . . . . . . .  	L BYTE	00E4	DATA
PC_DISPLAY_LCD . . . . . . . . .  	L BYTE	00F3	DATA
PC_DISPLAY_SYS . . . . . . . . .  	L BYTE	00D1	DATA
PC_DRIVE_C . . . . . . . . . . .  	L BYTE	022B	DATA
PC_ECHO  . . . . . . . . . . . .  	L BYTE	017B	DATA
PC_EQUAL_COM . . . . . . . . . .  	L BYTE	0202	DATA
PC_EQUAL_OPEN  . . . . . . . . .  	L BYTE	011A	DATA
PC_FASTOPEN  . . . . . . . . . .  	L BYTE	015E	DATA
PC_FCBS  . . . . . . . . . . . .  	L BYTE	0046	DATA
PC_FILES . . . . . . . . . . . .  	L BYTE	004D	DATA
PC_GRAFTABL  . . . . . . . . . .  	L BYTE	01C7	DATA
PC_GRAPHICS  . . . . . . . . . .  	L BYTE	01BC	DATA
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-16


PC_INSTALL . . . . . . . . . . .  	L BYTE	0128	DATA
PC_KEYBOARD_SYS  . . . . . . . .  	L BYTE	013D	DATA
PC_KEYB_A  . . . . . . . . . . .  	L BYTE	0219	DATA
PC_KEYB_C  . . . . . . . . . . .  	L BYTE	0132	DATA
PC_KEYB_SWITCH . . . . . . . . .  	L BYTE	014B	DATA
PC_LASTDRIVE . . . . . . . . . .  	L BYTE	0055	DATA
PC_LPT . . . . . . . . . . . . .  	L BYTE	0110	DATA
PC_MODE_COM  . . . . . . . . . .  	L BYTE	01EE	DATA
PC_MODE_CON  . . . . . . . . . .  	L BYTE	01D9	DATA
PC_MODE_LPT  . . . . . . . . . .  	L BYTE	01F8	DATA
PC_NLSFUNC . . . . . . . . . . .  	L BYTE	016D	DATA
PC_PATH  . . . . . . . . . . . .  	L BYTE	0188	DATA
PC_PREPARE . . . . . . . . . . .  	L BYTE	0208	DATA
PC_PRINTER_SYS . . . . . . . . .  	L BYTE	0102	DATA
PC_PRINT_COM . . . . . . . . . .  	L BYTE	028A	DATA
PC_PROMPT  . . . . . . . . . . .  	L BYTE	0198	DATA
PC_SET_COMSPEC . . . . . . . . .  	L BYTE	01A1	DATA
PC_SHARE . . . . . . . . . . . .  	L BYTE	0152	DATA
PC_SHELL . . . . . . . . . . . .  	L BYTE	006A	DATA
PC_SHELLC  . . . . . . . . . . .  	L BYTE	0274	DATA
PC_SHELLC_1  . . . . . . . . . .  	L BYTE	0232	DATA
PC_SHELLC_2  . . . . . . . . . .  	L BYTE	026C	DATA
PC_SHELLP  . . . . . . . . . . .  	L BYTE	027E	DATA
PC_SHELL_1 . . . . . . . . . . .  	L BYTE	0072	DATA
PC_SHELL_2 . . . . . . . . . . .  	L BYTE	007F	DATA
PC_SHELL_3 . . . . . . . . . . .  	L BYTE	0086	DATA
PC_SLASH_X . . . . . . . . . . .  	L BYTE	0041	DATA
PC_STACKS  . . . . . . . . . . .  	L BYTE	0061	DATA
PC_VDISK_SYS . . . . . . . . . .  	L BYTE	00C2	DATA
PC_VER . . . . . . . . . . . . .  	L BYTE	01D2	DATA
PC_VERIFY  . . . . . . . . . . .  	L BYTE	0017	DATA
PC_XMA2EMS_SYS . . . . . . . . .  	L BYTE	00A9	DATA
PC_XMAEM_SYS . . . . . . . . . .  	L BYTE	009D	DATA
PD_DISPLAY_EGA . . . . . . . . .  	L BYTE	00EE	DATA
PD_DISPLAY_LCD . . . . . . . . .  	L BYTE	00FD	DATA
POP_ROUTINE  . . . . . . . . . .  	L FAR 	0000		External
POS_ZERO . . . . . . . . . . . .  	L FAR 	0000		External
PREPARE_FILE_ROUTINE . . . . . .  	L FAR 	0000		External
PRESENT_WITHOUT_PART . . . . . .  	NUMBER	0001	
PRESENT_WITH_PART  . . . . . . .  	NUMBER	0002	
PRINTER_TABLES . . . . . . . . .  	NUMBER	0000		Communal
PS2_FLAG . . . . . . . . . . . .  	V BYTE	0000		External
PUSH_ROUTINE . . . . . . . . . .  	L FAR 	0000		External
P_DOS_PATH . . . . . . . . . . .  	L BYTE	0298	DATA	Length = 0032
P_DRIVE_PART . . . . . . . . . .  	V BYTE	0000		External
P_STR120_1 . . . . . . . . . . .  	V BYTE	0000		External
P_USER_STRING  . . . . . . . . .  	V BYTE	0000		External

READ_FILE_ROUTINE  . . . . . . .  	L FAR 	0000		External
RELEASE_PRINTER_INFO_ROUTINE . .  	L FAR 	0000		External
REMOVE_END_BLANKS  . . . . . . .  	L FAR 	0000		External
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-17


RENAME_FILE_ROUTINE  . . . . . .  	L FAR 	0000		External
RESTORE_INT_23 . . . . . . . . .  	L FAR 	0000		External
RESTORE_INT_24 . . . . . . . . .  	L FAR 	0000		External
RESTORE_INT_2F . . . . . . . . .  	L FAR 	0000		External

SAVE_AREA  . . . . . . . . . . .  	V BYTE	0000		External
SAVE_FILE_ROUTINE  . . . . . . .  	L FAR 	0000		External
SAVE_PRINTER_PARAMS_ROUTINE  . .  	L FAR 	0000		External
SCAN_DISK_TABLE_ROUTINE  . . . .  	L FAR 	0000		External
SCAN_INFO_FILE_ROUTINE . . . . .  	L FAR 	0000		External
SCAN_PARAMETERS_ROUTINE  . . . .  	L FAR 	0000		External
SC_1 . . . . . . . . . . . . . .  	V WORD	0000		External
SC_2 . . . . . . . . . . . . . .  	V WORD	0000		External
SC_437 . . . . . . . . . . . . .  	L WORD	011C	DATA
SC_ANSI_SYS  . . . . . . . . . .  	L WORD	00B5	DATA
SC_APPEND  . . . . . . . . . . .  	L WORD	018D	DATA
SC_AT_SIGN . . . . . . . . . . .  	L WORD	0293	DATA
SC_BREAK . . . . . . . . . . . .  	L WORD	0006	DATA
SC_BUFFERS . . . . . . . . . . .  	L WORD	0035	DATA
SC_CD  . . . . . . . . . . . . .  	L WORD	0000	DATA
SC_CHCP  . . . . . . . . . . . .  	L WORD	0222	DATA
SC_CLOSE_BRAC  . . . . . . . . .  	L WORD	0213	DATA
SC_COM . . . . . . . . . . . . .  	L WORD	0113	DATA
SC_COMMA . . . . . . . . . . . .  	L WORD	0123	DATA
SC_COMMAND_COM . . . . . . . . .  	L WORD	01AD	DATA
SC_COMMAS  . . . . . . . . . . .  	L WORD	021E	DATA
SC_COUNTRY . . . . . . . . . . .  	L WORD	001E	DATA
SC_COUNTRY_SYS . . . . . . . . .  	L WORD	0028	DATA
SC_CPSW  . . . . . . . . . . . .  	L WORD	000E	DATA
SC_DEVICE  . . . . . . . . . . .  	L WORD	0092	DATA
SC_DISPLAY_EGA . . . . . . . . .  	L WORD	00E2	DATA	Global
SC_DISPLAY_LCD . . . . . . . . .  	L WORD	00F1	DATA	Global
SC_DISPLAY_SYS . . . . . . . . .  	L WORD	00CF	DATA
SC_DRIVE_C . . . . . . . . . . .  	L WORD	0229	DATA
SC_ECHO  . . . . . . . . . . . .  	L WORD	0179	DATA
SC_EQUAL_COM . . . . . . . . . .  	L WORD	0200	DATA
SC_EQUAL_OPEN  . . . . . . . . .  	L WORD	0118	DATA
SC_EXT . . . . . . . . . . . . .  	V WORD	0000		External
SC_FASTOPEN  . . . . . . . . . .  	L WORD	015C	DATA
SC_FCBS  . . . . . . . . . . . .  	L WORD	0044	DATA
SC_FILES . . . . . . . . . . . .  	L WORD	004B	DATA
SC_GRAFTABL  . . . . . . . . . .  	L WORD	01C5	DATA
SC_GRAPHICS  . . . . . . . . . .  	L WORD	01BA	DATA
SC_INSTALL . . . . . . . . . . .  	L WORD	0126	DATA
SC_KEYBOARD_SYS  . . . . . . . .  	L WORD	013B	DATA
SC_KEYB_A  . . . . . . . . . . .  	L WORD	0217	DATA
SC_KEYB_C  . . . . . . . . . . .  	L WORD	0130	DATA
SC_KEYB_SWITCH . . . . . . . . .  	L WORD	0149	DATA
SC_LASTDRIVE . . . . . . . . . .  	L WORD	0053	DATA
SC_LINE  . . . . . . . . . . . .  	V WORD	0000		External
SC_LOG . . . . . . . . . . . . .  	V WORD	0000		External
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-18


SC_LPT . . . . . . . . . . . . .  	L WORD	010E	DATA
SC_MODE_COM  . . . . . . . . . .  	L WORD	01EC	DATA
SC_MODE_CON  . . . . . . . . . .  	L WORD	01D7	DATA
SC_MODE_LPT  . . . . . . . . . .  	L WORD	01F6	DATA
SC_NLSFUNC . . . . . . . . . . .  	L WORD	016B	DATA
SC_PATH  . . . . . . . . . . . .  	L WORD	0186	DATA
SC_PREPARE . . . . . . . . . . .  	L WORD	0206	DATA
SC_PRI . . . . . . . . . . . . .  	V WORD	0000		External
SC_PRINTER_SYS . . . . . . . . .  	L WORD	0100	DATA
SC_PRINT_COM . . . . . . . . . .  	L WORD	0288	DATA
SC_PROMPT  . . . . . . . . . . .  	L WORD	0196	DATA
SC_SET_COMSPEC . . . . . . . . .  	L WORD	019F	DATA
SC_SHARE . . . . . . . . . . . .  	L WORD	0150	DATA
SC_SHELL . . . . . . . . . . . .  	L WORD	0068	DATA
SC_SHELLC  . . . . . . . . . . .  	L WORD	0272	DATA
SC_SHELLC_1  . . . . . . . . . .  	L WORD	0230	DATA
SC_SHELLC_2  . . . . . . . . . .  	L WORD	026A	DATA
SC_SHELLP  . . . . . . . . . . .  	L WORD	027C	DATA
SC_SHELL_1 . . . . . . . . . . .  	L WORD	0070	DATA
SC_SHELL_2 . . . . . . . . . . .  	L WORD	007D	DATA
SC_SHELL_3 . . . . . . . . . . .  	L WORD	0084	DATA
SC_SLASH_X . . . . . . . . . . .  	L WORD	003F	DATA
SC_STACKS  . . . . . . . . . . .  	L WORD	005F	DATA
SC_VDISK_SYS . . . . . . . . . .  	L WORD	00C0	DATA
SC_VER . . . . . . . . . . . . .  	L WORD	01D0	DATA
SC_VERIFY  . . . . . . . . . . .  	L WORD	0015	DATA
SC_XMA2EMS_SYS . . . . . . . . .  	L WORD	00A7	DATA
SC_XMAEM_SYS . . . . . . . . . .  	L WORD	009B	DATA
SD_DISPLAY_EGA . . . . . . . . .  	L WORD	00EC	DATA	Global
SD_DISPLAY_LCD . . . . . . . . .  	L WORD	00FB	DATA	Global
SEARCH_FILE  . . . . . . . . . .  	V 0002	0000		External
SELECT_STACK . . . . . . . . . .  	V WORD	0000		External
SET_DISPLAY_MODE_ROUTINE . . . .  	L FAR 	0000		External
SHELL  . . . . . . . . . . . . .  	NUMBER	0000		Communal
SH_FILES . . . . . . . . . . . .  	NUMBER	0000		Communal
SOURCE1  . . . . . . . . . . . .  	NUMBER	0000	
SOURCE_PANEL . . . . . . . . . .  	V WORD	0000		External
STACK_INDEX  . . . . . . . . . .  	V BYTE	0000		External
STACK_SIZE . . . . . . . . . . .  	NUMBER	0000		Communal
STARTUP  . . . . . . . . . . . .  	NUMBER	0000		Communal
STDERR . . . . . . . . . . . . .  	NUMBER	0002	
STDOUT . . . . . . . . . . . . .  	NUMBER	0001	
ST_BREAK . . . . . . . . . . . .  	V WORD	0000		External
ST_BUFFERS . . . . . . . . . . .  	V WORD	0000		External
ST_CPSW  . . . . . . . . . . . .  	V WORD	0000		External
ST_FCBS  . . . . . . . . . . . .  	V WORD	0000		External
ST_FILES . . . . . . . . . . . .  	V WORD	0000		External
ST_LASTDRIVE . . . . . . . . . .  	V WORD	0000		External
ST_STACKS  . . . . . . . . . . .  	V WORD	0000		External
ST_VERIFY  . . . . . . . . . . .  	V WORD	0000		External
SUB_ERROR  . . . . . . . . . . .  	V BYTE	0000		External
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-19


SUPPORT_STATUS . . . . . . . . .  	V WORD	0000		External
S_ANSI . . . . . . . . . . . . .  	V WORD	0000		External
S_ANSI_B . . . . . . . . . . . .  	V WORD	0000		External
S_ANSI_C . . . . . . . . . . . .  	V WORD	0000		External
S_APPEND . . . . . . . . . . . .  	V WORD	0000		External
S_APPEND_B . . . . . . . . . . .  	V WORD	0000		External
S_APPEND_C . . . . . . . . . . .  	V WORD	0000		External
S_APPEND_P . . . . . . . . . . .  	V WORD	0000		External
S_AUTOEX_C . . . . . . . . . . .  	V 0002	0000		External
S_AUTO_C . . . . . . . . . . . .  	V WORD	0000		External
S_AUTO_FDISK . . . . . . . . . .  	V WORD	0000		External
S_AUTO_MENU  . . . . . . . . . .  	V 0002	0000		External
S_AUTO_NEW . . . . . . . . . . .  	V 0002	0000		External
S_AUTO_NEW_B . . . . . . . . . .  	V WORD	0000		External
S_AUTO_NEW_C . . . . . . . . . .  	V WORD	0000		External
S_AUTO_REBOOT  . . . . . . . . .  	V WORD	0000		External
S_AUTO_REN . . . . . . . . . . .  	V 0002	0000		External
S_A_DRIVE  . . . . . . . . . . .  	V WORD	0000		External
S_A_STARS  . . . . . . . . . . .  	V WORD	0000		External
S_BREAK  . . . . . . . . . . . .  	V WORD	0000		External
S_BUFFERS  . . . . . . . . . . .  	V WORD	0000		External
S_B_DRIVE  . . . . . . . . . . .  	V WORD	0000		External
S_COLON  . . . . . . . . . . . .  	V WORD	0000		External
S_COMMAND_COM  . . . . . . . . .  	V WORD	0000		External
S_CONFIG_AUTO  . . . . . . . . .  	V BYTE	0000		External
S_CONFIG_C . . . . . . . . . . .  	V WORD	0000		External
S_CONFIG_NEW . . . . . . . . . .  	V WORD	0000		External
S_CONFIG_NEW_B . . . . . . . . .  	V WORD	0000		External
S_CONFIG_NEW_C . . . . . . . . .  	V WORD	0000		External
S_CONFIG_REN . . . . . . . . . .  	V WORD	0000		External
S_CONSYS_C . . . . . . . . . . .  	V 0002	0000		External
S_CPSW . . . . . . . . . . . . .  	V WORD	0000		External
S_CP_DRIVER  . . . . . . . . . .  	V 0002	0000		External
S_CP_PREPARE . . . . . . . . . .  	V WORD	0000		External
S_CP_SEL . . . . . . . . . . . .  	V WORD	0000		External
S_C_DRIVE  . . . . . . . . . . .  	V WORD	0000		External
S_DEST_DRIVE . . . . . . . . . .  	V WORD	0000		External
S_DISKCOPY . . . . . . . . . . .  	V WORD	0000		External
S_DISKCOPY_PARM  . . . . . . . .  	V WORD	0000		External
S_DOS_COM_360  . . . . . . . . .  	V WORD	0000		External
S_DOS_LOC  . . . . . . . . . . .  	V WORD	0000		External
S_DOS_PATH . . . . . . . . . . .  	L WORD	0296	DATA
S_DOS_SEL_360  . . . . . . . . .  	V WORD	0000		External
S_DOS_SHEL_DISK  . . . . . . . .  	V WORD	0000		External
S_DOS_UTIL1_DISK . . . . . . . .  	V 0002	0000		External
S_DOS_UTIL2_DISK . . . . . . . .  	V 0002	0000		External
S_DOS_UTIL3_DISK . . . . . . . .  	V 0002	0000		External
S_DRIVE_A  . . . . . . . . . . .  	V WORD	0000		External
S_DRIVE_C  . . . . . . . . . . .  	V WORD	0000		External
S_DSKCPY_TO_B  . . . . . . . . .  	V WORD	0000		External
S_FASTOPEN . . . . . . . . . . .  	V WORD	0000		External
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-20


S_FASTOPEN_B . . . . . . . . . .  	V WORD	0000		External
S_FASTOPEN_C . . . . . . . . . .  	V WORD	0000		External
S_FCBS . . . . . . . . . . . . .  	V WORD	0000		External
S_FDISK  . . . . . . . . . . . .  	V WORD	0000		External
S_FILES  . . . . . . . . . . . .  	V WORD	0000		External
S_FORMAT . . . . . . . . . . . .  	V WORD	0000		External
S_FORMAT_A . . . . . . . . . . .  	V 0002	0000		External
S_FORMAT_B . . . . . . . . . . .  	V 0002	0000		External
S_GRAFTABL_B . . . . . . . . . .  	V WORD	0000		External
S_GRAFTABL_C . . . . . . . . . .  	V WORD	0000		External
S_GRAPHICS . . . . . . . . . . .  	V WORD	0000		External
S_GRAPHICS_B . . . . . . . . . .  	V WORD	0000		External
S_GRAPHICS_C . . . . . . . . . .  	V WORD	0000		External
S_GRAPHPRO_B . . . . . . . . . .  	V WORD	0000		External
S_GRAPHPRO_C . . . . . . . . . .  	V WORD	0000		External
S_GRAPH_PARM . . . . . . . . . .  	V WORD	0000		External
S_INSTALL_PATH . . . . . . . . .  	V WORD	0000		External
S_KEYB . . . . . . . . . . . . .  	V WORD	0000		External
S_KEYBOARD . . . . . . . . . . .  	V WORD	0000		External
S_KYBD_ALT . . . . . . . . . . .  	V 0002	0000		External
S_LASTDRIVE  . . . . . . . . . .  	V 0002	0000		External
S_MODE . . . . . . . . . . . . .  	V WORD	0000		External
S_MODE_PARM  . . . . . . . . . .  	V 0002	0000		External
S_OFF  . . . . . . . . . . . . .  	V 0002	0000		External
S_ON . . . . . . . . . . . . . .  	V WORD	0000		External
S_OS2_AUTO_C . . . . . . . . . .  	V WORD	0000		External
S_OS2_CONFIG_C . . . . . . . . .  	V WORD	0000		External
S_PATH . . . . . . . . . . . . .  	V WORD	0000		External
S_PREP_EGA . . . . . . . . . . .  	V WORD	0000		External
S_PREP_LCD . . . . . . . . . . .  	V 0002	0000		External
S_PRINT_FILE . . . . . . . . . .  	V WORD	0000		External
S_PROMPT . . . . . . . . . . . .  	V WORD	0000		External
S_RECOVER_B  . . . . . . . . . .  	V 0002	0000		External
S_RECOVER_C  . . . . . . . . . .  	V 0002	0000		External
S_REPLACE  . . . . . . . . . . .  	V WORD	0000		External
S_REPLACE_PAR1 . . . . . . . . .  	V WORD	0000		External
S_SELCOM_C . . . . . . . . . . .  	V WORD	0000		External
S_SELCOM_NEW_B . . . . . . . . .  	V WORD	0000		External
S_SELDAT_C . . . . . . . . . . .  	V WORD	0000		External
S_SELDAT_NEW_B . . . . . . . . .  	V WORD	0000		External
S_SELECT_TMP . . . . . . . . . .  	V WORD	0000		External
S_SELEXE_C . . . . . . . . . . .  	V WORD	0000		External
S_SELEXE_NEW_B . . . . . . . . .  	V WORD	0000		External
S_SELHLP_C . . . . . . . . . . .  	V 0002	0000		External
S_SELHLP_NEW_B . . . . . . . . .  	V WORD	0000		External
S_SELPRT_C . . . . . . . . . . .  	V 0002	0000		External
S_SELPRT_NEW_B . . . . . . . . .  	V WORD	0000		External
S_SHARE  . . . . . . . . . . . .  	V WORD	0000		External
S_SHELL  . . . . . . . . . . . .  	V WORD	0000		External
S_SHELL2 . . . . . . . . . . . .  	V BYTE	0000		External
S_SHELL_NEW  . . . . . . . . . .  	V 0002	0000		External
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-21


S_SHELL_NEW_B  . . . . . . . . .  	V WORD	0000		External
S_SLASH  . . . . . . . . . . . .  	V WORD	0000		External
S_SLASH_A  . . . . . . . . . . .  	V WORD	0000		External
S_SLASH_Q  . . . . . . . . . . .  	V WORD	0000		External
S_SLASH_R  . . . . . . . . . . .  	V WORD	0000		External
S_SLASH_S  . . . . . . . . . . .  	V WORD	0000		External
S_SPACE  . . . . . . . . . . . .  	V WORD	0000		External
S_STACKS . . . . . . . . . . . .  	V WORD	0000		External
S_STR120_1 . . . . . . . . . . .  	V WORD	0000		External
S_STR120_2 . . . . . . . . . . .  	V WORD	0000		External
S_STR120_3 . . . . . . . . . . .  	V WORD	0000		External
S_STR120_4 . . . . . . . . . . .  	V WORD	0000		External
S_STR40  . . . . . . . . . . . .  	V WORD	0000		External
S_SWISS  . . . . . . . . . . . .  	V WORD	0000		External
S_SYS_C  . . . . . . . . . . . .  	V WORD	0000		External
S_US . . . . . . . . . . . . . .  	V 0002	0000		External
S_USER_STRING  . . . . . . . . .  	V WORD	0000		External
S_VDISK  . . . . . . . . . . . .  	V WORD	0000		External
S_VDISK_B  . . . . . . . . . . .  	V WORD	0000		External
S_VDISK_C  . . . . . . . . . . .  	V WORD	0000		External
S_VERIFY . . . . . . . . . . . .  	V WORD	0000		External
S_VOL_SEL  . . . . . . . . . . .  	V WORD	0000		External
S_XMA2EMS  . . . . . . . . . . .  	V WORD	0000		External
S_XMAEM  . . . . . . . . . . . .  	V WORD	0000		External

TABLE_ONE  . . . . . . . . . . .  	NUMBER	0001	
TABLE_TWO  . . . . . . . . . . .  	NUMBER	0002	
TRUE . . . . . . . . . . . . . .  	NUMBER	0001	

UPDATE_DISK_TABLE_ROUTINE  . . .  	L FAR 	0000		External
USE_DEFAULT  . . . . . . . . . .  	NUMBER	0000	

WRITE_FILE_ROUTINE . . . . . . .  	L FAR 	0000		External
WRITE_LINE_ROUTINE . . . . . . .  	L FAR 	0000		External
W_PROTECT_FLAG . . . . . . . . .  	L FAR 	0000		External

$L1  . . . . . . . . . . . . . .  	L NEAR	0038	SELECT
$L100  . . . . . . . . . . . . .  	L NEAR	0726	SELECT
$L101  . . . . . . . . . . . . .  	L NEAR	06FE	SELECT
$L107  . . . . . . . . . . . . .  	L NEAR	0755	SELECT
$L110  . . . . . . . . . . . . .  	L NEAR	07C1	SELECT
$L111  . . . . . . . . . . . . .  	L NEAR	075E	SELECT
$L114  . . . . . . . . . . . . .  	L NEAR	0810	SELECT
$L117  . . . . . . . . . . . . .  	L NEAR	0808	SELECT
$L12 . . . . . . . . . . . . . .  	L NEAR	00D1	SELECT
$L120  . . . . . . . . . . . . .  	L NEAR	083F	SELECT
$L123  . . . . . . . . . . . . .  	L NEAR	086E	SELECT
$L126  . . . . . . . . . . . . .  	L NEAR	089D	SELECT
$L129  . . . . . . . . . . . . .  	L NEAR	08CC	SELECT
$L132  . . . . . . . . . . . . .  	L NEAR	0946	SELECT
$L133  . . . . . . . . . . . . .  	L NEAR	0916	SELECT
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-22


$L136  . . . . . . . . . . . . .  	L NEAR	0A09	SELECT
$L139  . . . . . . . . . . . . .  	L NEAR	09D1	SELECT
$L142  . . . . . . . . . . . . .  	L NEAR	0A49	SELECT
$L145  . . . . . . . . . . . . .  	L NEAR	0A89	SELECT
$L148  . . . . . . . . . . . . .  	L NEAR	0B36	SELECT
$L15 . . . . . . . . . . . . . .  	L NEAR	0108	SELECT
$L151  . . . . . . . . . . . . .  	L NEAR	0AFE	SELECT
$L152  . . . . . . . . . . . . .  	L NEAR	0AE0	SELECT
$L153  . . . . . . . . . . . . .  	L NEAR	0ACD	SELECT
$L155  . . . . . . . . . . . . .  	L NEAR	0AEE	SELECT
$L156  . . . . . . . . . . . . .  	L NEAR	0C38	SELECT
$L159  . . . . . . . . . . . . .  	L NEAR	0B6D	SELECT
$L161  . . . . . . . . . . . . .  	L NEAR	0C1B	SELECT
$L167  . . . . . . . . . . . . .  	L NEAR	0CD9	SELECT
$L170  . . . . . . . . . . . . .  	L NEAR	0D19	SELECT
$L173  . . . . . . . . . . . . .  	L NEAR	0D59	SELECT
$L176  . . . . . . . . . . . . .  	L NEAR	0DA9	SELECT
$L179  . . . . . . . . . . . . .  	L NEAR	0DE2	SELECT
$L18 . . . . . . . . . . . . . .  	L NEAR	016E	SELECT
$L182  . . . . . . . . . . . . .  	L NEAR	0E91	SELECT
$L2  . . . . . . . . . . . . . .  	L NEAR	0010	SELECT
$L21 . . . . . . . . . . . . . .  	L NEAR	013F	SELECT
$L27 . . . . . . . . . . . . . .  	L NEAR	01A5	SELECT
$L30 . . . . . . . . . . . . . .  	L NEAR	01E5	SELECT
$L33 . . . . . . . . . . . . . .  	L NEAR	023B	SELECT
$L36 . . . . . . . . . . . . . .  	L NEAR	026A	SELECT
$L37 . . . . . . . . . . . . . .  	L NEAR	025A	SELECT
$L40 . . . . . . . . . . . . . .  	L NEAR	02A2	SELECT
$L41 . . . . . . . . . . . . . .  	L NEAR	027B	SELECT
$L44 . . . . . . . . . . . . . .  	L NEAR	0292	SELECT
$L47 . . . . . . . . . . . . . .  	L NEAR	033E	SELECT
$L53 . . . . . . . . . . . . . .  	L NEAR	0336	SELECT
$L54 . . . . . . . . . . . . . .  	L NEAR	0318	SELECT
$L55 . . . . . . . . . . . . . .  	L NEAR	0305	SELECT
$L57 . . . . . . . . . . . . . .  	L NEAR	0326	SELECT
$L58 . . . . . . . . . . . . . .  	L NEAR	0427	SELECT
$L61 . . . . . . . . . . . . . .  	L NEAR	034F	SELECT
$L63 . . . . . . . . . . . . . .  	L NEAR	0419	SELECT
$L66 . . . . . . . . . . . . . .  	L NEAR	0433	SELECT
$L68 . . . . . . . . . . . . . .  	L NEAR	0511	SELECT
$L74 . . . . . . . . . . . . . .  	L NEAR	05C3	SELECT
$L77 . . . . . . . . . . . . . .  	L NEAR	05BB	SELECT
$L8  . . . . . . . . . . . . . .  	L NEAR	008A	SELECT
$L80 . . . . . . . . . . . . . .  	L NEAR	05F3	SELECT
$L83 . . . . . . . . . . . . . .  	L NEAR	06D6	SELECT
$L89 . . . . . . . . . . . . . .  	L NEAR	06B3	SELECT
$L9  . . . . . . . . . . . . . .  	L NEAR	006A	SELECT
$L90 . . . . . . . . . . . . . .  	L NEAR	065A	SELECT
$L94 . . . . . . . . . . . . . .  	L NEAR	068D	SELECT
$L97 . . . . . . . . . . . . . .  	L NEAR	06ED	SELECT
$LL1 . . . . . . . . . . . . . .  	NUMBER	0001	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26
SELECT - SELECT.EXE				;AN000;                              Symbols-23


$LL100 . . . . . . . . . . . . .  	NUMBER	0064	
$LL107 . . . . . . . . . . . . .  	NUMBER	006B	
$LL110 . . . . . . . . . . . . .  	NUMBER	006E	
$LL114 . . . . . . . . . . . . .  	NUMBER	0072	
$LL117 . . . . . . . . . . . . .  	NUMBER	0075	
$LL12  . . . . . . . . . . . . .  	NUMBER	000C	
$LL120 . . . . . . . . . . . . .  	NUMBER	0078	
$LL123 . . . . . . . . . . . . .  	NUMBER	007B	
$LL126 . . . . . . . . . . . . .  	NUMBER	007E	
$LL129 . . . . . . . . . . . . .  	NUMBER	0081	
$LL132 . . . . . . . . . . . . .  	NUMBER	0084	
$LL136 . . . . . . . . . . . . .  	NUMBER	0088	
$LL139 . . . . . . . . . . . . .  	NUMBER	008B	
$LL142 . . . . . . . . . . . . .  	NUMBER	008E	
$LL145 . . . . . . . . . . . . .  	NUMBER	0091	
$LL148 . . . . . . . . . . . . .  	NUMBER	0094	
$LL15  . . . . . . . . . . . . .  	NUMBER	000F	
$LL156 . . . . . . . . . . . . .  	NUMBER	009C	
$LL161 . . . . . . . . . . . . .  	NUMBER	00A1	
$LL167 . . . . . . . . . . . . .  	NUMBER	00A7	
$LL170 . . . . . . . . . . . . .  	NUMBER	00AA	
$LL173 . . . . . . . . . . . . .  	NUMBER	00AD	
$LL176 . . . . . . . . . . . . .  	NUMBER	00B0	
$LL179 . . . . . . . . . . . . .  	NUMBER	00B3	
$LL18  . . . . . . . . . . . . .  	NUMBER	0012	
$LL182 . . . . . . . . . . . . .  	NUMBER	00B6	
$LL21  . . . . . . . . . . . . .  	NUMBER	0015	
$LL27  . . . . . . . . . . . . .  	NUMBER	001B	
$LL30  . . . . . . . . . . . . .  	NUMBER	001E	
$LL33  . . . . . . . . . . . . .  	NUMBER	0021	
$LL36  . . . . . . . . . . . . .  	NUMBER	0024	
$LL40  . . . . . . . . . . . . .  	NUMBER	0028	
$LL44  . . . . . . . . . . . . .  	NUMBER	002C	
$LL47  . . . . . . . . . . . . .  	NUMBER	002F	
$LL58  . . . . . . . . . . . . .  	NUMBER	003A	
$LL63  . . . . . . . . . . . . .  	NUMBER	003F	
$LL68  . . . . . . . . . . . . .  	NUMBER	0044	
$LL74  . . . . . . . . . . . . .  	NUMBER	004A	
$LL77  . . . . . . . . . . . . .  	NUMBER	004D	
$LL8 . . . . . . . . . . . . . .  	NUMBER	0008	
$LL80  . . . . . . . . . . . . .  	NUMBER	0050	
$LL83  . . . . . . . . . . . . .  	NUMBER	0053	
$LL89  . . . . . . . . . . . . .  	NUMBER	0059	
$LL97  . . . . . . . . . . . . .  	NUMBER	0061	
$NOPS  . . . . . . . . . . . . .  	NUMBER	0003	
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  gen_coms		
@VERSION . . . . . . . . . . . .  	TEXT  510		

Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:26

SELECT - SELECT.EXE				;AN000;                              Symbols-24






   5456 Source  Lines
  33252 Total   Lines
   1385 Symbols

  35210 + 56920 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
