5 TITLE SELECT
- DOS
- SELECT
.EXE
;AN000;
6 SUBTTL SELECT8
.asm
;AN000;
8 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
10 ; SELECT8.ASM : Copyright 1988 Microsoft
14 ; COMMENTS: Assemble with MASM 3.0 (using the /A option)
19 ; ;AN000; DT added support for creation of the DOSSHELL.BAT as a
20 ; separately installed file. (D233)
21 ; ;AN002; GHG for P1146
22 ; ;AN003; GHG for D234
24 ; ;AN005; DT for single drive support
25 ; ;AN006; JW correct critical error problems during format/copy
27 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
28 DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
29 EXTRN EXEC_ERR
:BYTE ;AN063;SEH
30 EXTRN BCHAR
:BYTE ;AN000;DT
31 EXTRN DSKCPY_ERR
:BYTE ;AN000;DT
32 EXTRN DSKCPY_WHICH
:BYTE ;AN000;DT
33 EXTRN DSKCPY_OPTION
:BYTE ;AN000;DT
34 EXTRN DSKCPY_PAN1
:WORD ;AN000;DT
35 EXTRN DSKCPY_PAN2
:WORD ;AN000;DT
36 EXTRN DSKCPY_PAN3
:WORD ;AN000;DT
37 EXTRN DSKCPY_SOURCE
:WORD ;AN000;DT
39 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
42 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
44 INCLUDE PANEL
.MAC
;AN000;
45 INCLUDE SELECT
.INC ;AN000;
46 INCLUDE PAN
-LIST
.INC ;AN000;
47 INCLUDE CASTRUC
.INC ;AN000;
48 INCLUDE STRUC.INC ;AN000;
49 INCLUDE MACROS
.INC ;AN000;
50 INCLUDE EXT
.INC ;AN000;
51 INCLUDE VARSTRUC
.INC ;AN000;
52 INCLUDE ROUT_EXT
.INC ;AN000;
54 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
57 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
58 EXTRN ALLOCATE_MEMORY_CALL
:FAR ;AN063;SEH
59 EXTRN DEALLOCATE_MEMORY_CALL
:FAR ;AN063;SEH
60 EXTRN ALLOCATE_BLOCK
:FAR ;AN000;DT
61 EXTRN PM_BASECHAR
:BYTE ;AN000;
62 EXTRN PM_BASEATTR
:BYTE ;AN000;
63 EXTRN CRD_CCBVECOFF
:WORD ;AN000;
64 EXTRN CRD_CCBVECSEG
:WORD ;AN000;
65 SELECT
SEGMENT PARA
PUBLIC 'SELECT' ;AN000;
66 ASSUME
CS:SELECT
,DS:DATA ;AN000;
68 INCLUDE CASEXTRN
.INC ;AN000;
70 EXTRN EXIT_SELECT
:near ;AN000;
71 EXTRN CREATE_CONFIG_SYS
:NEAR ;AN000;
72 EXTRN CREATE_AUTOEXEC_BAT
:NEAR ;AN000;
73 EXTRN CREATE_SHELL_BAT
:NEAR ;AN000;DT
74 EXTRN DEALLOCATE_HELP
:FAR ;AN007;JW
76 EXTRN INSTALL_TO_360_DRIVE
:NEAR ;AN000;DT
77 EXTRN INSTALL_ERROR
:NEAR ;AN000;
78 EXTRN EXIT_DOS
:NEAR ;AN000;
79 EXTRN PROCESS_ESC_F3
:NEAR ;AN000;
80 EXTRN EXIT_DOS_CONT
:NEAR ;AN000;
81 EXTRN GET_ENTER_KEY
:NEAR ;AN063;SEH
82 EXTRN GET_OVERLAY
:NEAR ;AN063;SEH
83 extrn Free_Parser
:near
84 PUBLIC DISKETTE_INSTALL
;AN111;JW
85 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
87 ; Install is to drive B: or drive A:
89 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
90 DISKETTE_INSTALL: ;AC111;JW
92 INIT_VAR F_PATH
, E_PATH_NO
;AN000;
93 INIT_VAR F_APPEND
, E_APPEND_NO
;AN000;
94 INIT_VAR F_PROMPT
, E_PROMPT_NO
;AN000;
95 INIT_VAR F_XMA
, E_XMA_NO
;AN000;
96 INIT_VAR F_FASTOPEN
, E_FASTOPEN_NO
;AN000;
97 INIT_VAR F_SHARE
, E_SHARE_NO
;AN000;
98 INIT_VAR S_INSTALL_PATH
,0 ;AN000;set install path field = 0
100 .IF < N_DISKETTE_A
eq E_DISKETTE_360
> ;AN111;JW
101 GOTO INSTALL_TO_360_DRIVE
;AN111;JW
104 .IF < N_DISKETTE_A
eq E_DISKETTE_720
> ;AN111;JW
105 GOTO INSTALL_TO_720_DRIVE
;AN111;JW
108 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
110 ; install is to 1.44M drives
112 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
113 ;;;Introduction to 1440KB install ;
114 INIT_PQUEUE PAN_INSTALL_DOS
;AN000; initialize queue
115 PREPARE_PANEL PAN_START1440
;AN000;
116 PREPARE_PANEL PAN_HBAR
;AN000;
117 PREPARE_CHILDREN
;AN000; prepare child panels
118 DISPLAY_PANEL
;AN000;
120 GET_FUNCTION FK_ENT
;AN000;
122 .IF < I_DEST_DRIVE
eq E_DEST_DRIVE_B
> near ;AN111;JW
123 ;;;insert startup diskette in drive B: ;
124 INIT_PQUEUE PAN_INST_PROMPT
;AN000; initialize queue
125 PREPARE_PANEL SUB_INS_START_B
;AN000; insert startup diskette in drive B:
126 PREPARE_PANEL PAN_HBAR
;AN000; prepare horizontal bar
127 PREPARE_CHILDREN
;AN000; prepare child panels
128 DISPLAY_PANEL
;AN000; display panel
130 GET_FUNCTION FK_ENT
;AN000;
132 ;;;formatting disk screen ;
133 INIT_PQUEUE FORMAT_DISKET
;AN000; initialize queue
134 DISPLAY_PANEL
;AN000;
136 ;;;format startup diskette in drive B: ;
138 EXEC_PROGRAM S_FORMAT
,S_FORMAT_B
,PARM_BLOCK
,EXEC_NO_DIR
;AN000; format startup disket & copy system files
140 HANDLE_FORMAT_ERROR
;AN000;JW
143 ;;;create config and autoexec files on startup diskette ;
144 CREATE_CONFIG S_CONFIG_NEW_B
, N_RETCODE
;AN000; create CONFIG.SYS file
146 GOTO INSTALL_ERROR
;AN000;
148 CREATE_AUTOEXEC S_AUTO_NEW_B
,E_DEST_SHELL
,N_RETCODE
;AN000; create AUTOEXEC.BAT file with SHELL pars
149 .IF < c
> near ;AN000;
150 GOTO INSTALL_ERROR
;AN000;
153 .ELSE near ;AN111; install is to 1.44 meg A: drive JW
155 ;;;format startup diskette in drive A: ;
156 ;;;use format int2f call to display panels ;
157 INIT_VAR FORMAT_WHICH
,STARTUP
;AN111;JW
159 HOOK_2F_FORMAT
;AN111;JW
160 EXEC_PROGRAM S_FORMAT
,S_FORMAT_A
,PARM_BLOCK
,EXEC_NO_DIR
;AN000; format startup disket & copy system files
163 HANDLE_FORMAT_ERROR
;AN000;JW
164 INSERT_DISK SUB_REM_DOS_A
, S_DOS_SEL_360
;AN000;
168 ;;;create config and autoexec files on startup diskette ;
169 CREATE_CONFIG S_CONSYS_C
, N_RETCODE
;AN000; create CONFIG.SYS file
171 GOTO INSTALL_ERROR
;AN000;
173 CREATE_AUTOEXEC S_AUTOEX_C
,E_DEST_SHELL
,N_RETCODE
;AN000; create AUTOEXEC.BAT file with SHELL pars
175 GOTO INSTALL_ERROR
;AN000;
178 ;;; insert the INSTALL diskette in drive A: ;
179 INSERT_DISK SUB_REM_DOS_A
, S_DOS_SEL_360
;AN000;
183 ;;;copying files screen ;
184 INIT_PQUEUE PAN_INSTALL_DOS
;AN000; initialize queue
185 PREPARE_PANEL SUB_COPYING
;AN111; prepare copying files message JW
186 DISPLAY_PANEL
;AN000;
188 .IF < I_DEST_DRIVE
eq E_DEST_DRIVE_A
> ;AN111;JW
189 INIT_VAR SOURCE_PANEL
, SUB_REM_DOS_A
;AN000;
190 INIT_VAR DEST_PANEL
, SUB_INS_STARTT_S360
;AN000;
193 ;;;copy all files from INSTALL diskette to STARTUP diskette
194 COPY_FILES I_DEST_DRIVE
,COPY_INST_1200_1440
,E_INST_1200_1440
;AN000;
196 GOTO INSTALL_ERROR
;AN000;
199 ;;; insert OPERATING diskette in A: ;
200 INSERT_DISK SUB_REM_SEL_A
, S_DOS_UTIL1_DISK
;AN000;
202 ;;;copying files screen ;
203 INIT_PQUEUE PAN_INSTALL_DOS
;AN000; initialize queue
204 PREPARE_PANEL SUB_COPYING
;AN000; prepare copying files message
205 DISPLAY_PANEL
;AN000;
207 .IF < I_DEST_DRIVE
eq E_DEST_DRIVE_A
> ;AN111;JW
208 INIT_VAR SOURCE_PANEL
, SUB_REM_SEL_A
;AN111;JW
209 INIT_VAR DEST_PANEL
, SUB_INS_STARTT_S360
;AN111;JW
212 ;;;copy all files from OPERATING diskette to STARTUP diskette;
213 COPY_FILES I_DEST_DRIVE
,COPY_OPER_1200_1440
,E_OPER_1200_1440
;AN000;
215 GOTO INSTALL_ERROR
;AN000;
218 .if < f_shell
eq e_shell_yes
> near ; install the shell?
220 ;;; insert MS-SHELL diskette in A: ;
221 INSERT_DISK SUB_INS_MSSHELL_A
, S_DOS_SHEL_DISK
;AN000;
223 ;;;copying files screen ;
224 INIT_PQUEUE PAN_INSTALL_DOS
;AN000; initialize queue
225 PREPARE_PANEL SUB_COPYING
;AN000; prepare copying files message
226 DISPLAY_PANEL
;AN000;
228 .IF < I_DEST_DRIVE
eq E_DEST_DRIVE_A
> ;AN111;JW
229 INIT_VAR SOURCE_PANEL
, SUB_INS_MSSHELL_A
;AN111;JW
230 INIT_VAR DEST_PANEL
, SUB_INS_STARTT_S360
;AN111;JW
233 ;;;copy all files from OPERATING diskette to STARTUP diskette;
234 COPY_FILES I_DEST_DRIVE
,COPY_SHELL_1200_1440
,E_SHELL_1200_1440
;AN000;
236 GOTO INSTALL_ERROR
;AN000;
239 .endif
; installing the shell
241 .IF < I_DEST_DRIVE
eq E_DEST_DRIVE_B
> ;AN111;JW
242 CREATE_SHELL S_SHELL_NEW_B
, N_RETCODE
;AN000;DT
244 GOTO INSTALL_ERROR
;AN000;DT
247 CREATE_SHELL S_SHELL_NEW
, N_RETCODE
;AN000;DT
249 GOTO INSTALL_ERROR
;AN000;DT
253 ;;;installation complete screen ;
254 INIT_PQUEUE PAN_COMPLETE2
;AN000; initialize queue
255 PREPARE_PANEL SUB_COMP_KYS_1C
;AN000;
256 DISPLAY_PANEL
;AN000;
257 SAVE_PANEL_LIST
;AN000;
259 GET_FUNCTION FK_REBOOT
;AN000;
260 ;;;;;;;;control will not return here. user has to reboot;;;;;;;;; end of install to 1.44M drive
261 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
263 ; Install to 720K drive
265 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
266 INSTALL_TO_720_DRIVE:
267 .IF < MEM_SIZE
eq 256 >
274 INSERT_DISK SUB_REM_DOS_A
, S_DOS_COM_360
277 ;;;Introduction to 720KB install
278 INIT_PQUEUE PAN_INSTALL_DOS
279 PREPARE_PANEL PAN_START720
280 PREPARE_PANEL PAN_HBAR
288 .IF < I_DEST_DRIVE
eq E_DEST_DRIVE_A
> near
290 ;;;diskcopy INSTALL diskette to STARTUP diskette
291 DISKCOPY_TO DSKCPY_TO_A_360
,NO_SOURCE1
,S_DOS_SEL_360
292 DISKCOPY_PANELS SUB_REM_DOS_A
,SUB_COPYING
,SUB_INS_STARTT_S360
294 INIT_VAR N_DSKCPY_ERR
,E_DSKCPY_OK
296 EXEC_PROGRAM S_DISKCOPY
,S_DISKCOPY_PARM
,PARM_BLOCK
,EXEC_NO_DIR
301 .UNTIL
< N_DSKCPY_ERR ne E_DSKCPY_RETRY
>
302 ; delete unneeded files
303 ERASE_FILE S_AUTOEX_C
304 ERASE_FILE S_CONSYS_C
305 ERASE_FILE S_SELEXE_C
306 ERASE_FILE S_SELHLP_C
307 ERASE_FILE S_SELPRT_C
308 ERASE_FILE S_SELDAT_C
309 ; make config.sys and autoexec.bat
310 create_config s_consys_c
, n_retcode
314 create_autoexec s_autoex_c
, e_dest_dos
, n_retcode
319 ;;; diskcopy OPERATE diskette to WORKING diskette
321 DISKCOPY_TO DSKCPY_TO_A_360
,SOURCE1
,S_DOS_UTIL1_DISK
322 DISKCOPY_PANELS SUB_REM_SEL_A
,SUB_COPYING
,SUB_INS_WORKING_A
323 INIT_VAR N_DSKCPY_ERR
,E_DSKCPY_OK
325 EXEC_PROGRAM S_DISKCOPY
,S_DISKCOPY_PARM
,PARM_BLOCK
,EXEC_NO_DIR
330 .LEAVE < N_DSKCPY_ERR ne E_DSKCPY_RETRY
>
331 INSERT_DISK SUB_REM_DOS_A
, S_DOS_SEL_360
334 ;;;perhaps diskcopy MS-SHELL to SHELL
335 .IF < f_shell
eq e_shell_yes
> near
337 INSERT_DISK SUB_REM_DOS_A
, S_DOS_SEL_360
338 DISKCOPY_TO DSKCPY_TO_A_360
,SOURCE1
,S_DOS_SHEL_DISK
339 DISKCOPY_PANELS SUB_INS_MSSHELL_A
,SUB_COPYING
,SUB_INS_SHELL_S360
340 INIT_VAR N_DSKCPY_ERR
,E_DSKCPY_OK
342 EXEC_PROGRAM S_DISKCOPY
,S_DISKCOPY_PARM
,PARM_BLOCK
,EXEC_NO_DIR
347 .UNTIL
< N_DSKCPY_ERR ne E_DSKCPY_RETRY
>
348 ; make config.sys and autoexec.bat
349 create_config s_consys_c
, n_retcode
353 create_autoexec s_autoex_c
, e_dest_shell
, n_retcode
357 create_shell s_shell_new
, n_retcode
363 .ELSE near ; This is a two floppy system. Install from A to B.
365 ;;;diskcopy INSTALL diskette to STARTUP diskette
366 DISKCOPY_TO DSKCPY_TO_B
,SOURCE1
,S_DOS_SEL_360
367 DISKCOPY_PANELS SUB_INS_START_B
,SUB_COPYING
,NOPANEL
369 INIT_VAR N_DSKCPY_ERR
,E_DSKCPY_OK
371 EXEC_PROGRAM S_DISKCOPY
,S_DSKCPY_TO_B
,PARM_BLOCK
,EXEC_NO_DIR
376 .UNTIL
< N_DSKCPY_ERR ne E_DSKCPY_RETRY
>
377 ; delete unneeded files
378 ERASE_FILE S_AUTO_NEW_B
379 ERASE_FILE S_CONFIG_NEW_B
380 ERASE_FILE S_SELEXE_NEW_B
381 ERASE_FILE S_SELHLP_NEW_B
382 ERASE_FILE S_SELPRT_NEW_B
383 ERASE_FILE S_SELDAT_NEW_B
384 ; make config.sys and autoexec.bat
385 create_config s_config_new_b
, n_retcode
389 create_autoexec s_auto_new_b
, e_dest_dos
, n_retcode
394 ;;; diskcopy OPERATE diskette to WORKING diskette
396 DISKCOPY_TO DSKCPY_TO_B
,SOURCE1
,S_DOS_UTIL1_DISK
397 DISKCOPY_PANELS SUB_INS_OP_WORK
,SUB_COPYING
,NOPANEL
398 INIT_VAR N_DSKCPY_ERR
,E_DSKCPY_OK
400 EXEC_PROGRAM S_DISKCOPY
,S_DSKCPY_TO_B
,PARM_BLOCK
,EXEC_NO_DIR
405 .LEAVE < N_DSKCPY_ERR ne E_DSKCPY_RETRY
>
406 INSERT_DISK SUB_REM_DOS_A
, S_DOS_SEL_360
409 ;;;perhaps diskcopy MS-SHELL to SHELL
410 .IF < f_shell
eq e_shell_yes
> near
412 INSERT_DISK SUB_REM_DOS_A
, S_DOS_SEL_360
413 DISKCOPY_TO DSKCPY_TO_B
,SOURCE1
,S_DOS_SHEL_DISK
414 DISKCOPY_PANELS SUB_INS_SHELL_DISKS
,SUB_COPYING
,NOPANEL
415 INIT_VAR N_DSKCPY_ERR
,E_DSKCPY_OK
417 EXEC_PROGRAM S_DISKCOPY
,S_DSKCPY_TO_B
,PARM_BLOCK
,EXEC_NO_DIR
422 .UNTIL
< N_DSKCPY_ERR ne E_DSKCPY_RETRY
>
423 ; make config.sys and autoexec.bat
424 create_config s_config_new_b
, n_retcode
428 create_autoexec s_auto_new_b
, e_dest_shell
, n_retcode
432 create_shell s_shell_new_b
, n_retcode
437 .ENDIF
; end if two drive 720 installation
440 ;;;installation complete and change diskettes screen
441 INIT_PQUEUE PAN_COMPLETE2
442 PREPARE_PANEL SUB_COMP_KYS_2
445 GET_FUNCTION FK_REBOOT
446 ;;;;;;;;control will not return here. user has to reboot
447 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
450 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;