1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
|
PAGE 55,132 ;AN000;
NAME SELECT ;AN000;
TITLE SELECT - DOS - SELECT.EXE ;AN000;
SUBTTL SELECT8.asm ;AN000;
.ALPHA ;AN000;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; SELECT8.ASM : Copyright 1988 Microsoft
;
; DATE: August 8/87
;
; COMMENTS: Assemble with MASM 3.0 (using the /A option)
;
;
; CHANGE HISTORY:
;
; ;AN000; DT added support for creation of the DOSSHELL.BAT as a
; separately installed file. (D233)
; ;AN002; GHG for P1146
; ;AN003; GHG for D234
; ;AN004; GHG for P65
; ;AN005; DT for single drive support
; ;AN006; JW correct critical error problems during format/copy
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
EXTRN EXEC_ERR:BYTE ;AN063;SEH
EXTRN BCHAR:BYTE ;AN000;DT
EXTRN DSKCPY_ERR:BYTE ;AN000;DT
EXTRN DSKCPY_WHICH:BYTE ;AN000;DT
EXTRN DSKCPY_OPTION:BYTE ;AN000;DT
EXTRN DSKCPY_PAN1:WORD ;AN000;DT
EXTRN DSKCPY_PAN2:WORD ;AN000;DT
EXTRN DSKCPY_PAN3:WORD ;AN000;DT
EXTRN DSKCPY_SOURCE:WORD ;AN000;DT
DATA ENDS ;AN000;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.XLIST ;AN000;
INCLUDE PANEL.MAC ;AN000;
INCLUDE SELECT.INC ;AN000;
INCLUDE PAN-LIST.INC ;AN000;
INCLUDE CASTRUC.INC ;AN000;
INCLUDE STRUC.INC ;AN000;
INCLUDE MACROS.INC ;AN000;
INCLUDE EXT.INC ;AN000;
INCLUDE VARSTRUC.INC ;AN000;
INCLUDE ROUT_EXT.INC ;AN000;
.LIST ;AN000;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EXTRN ALLOCATE_MEMORY_CALL:FAR ;AN063;SEH
EXTRN DEALLOCATE_MEMORY_CALL:FAR ;AN063;SEH
EXTRN ALLOCATE_BLOCK:FAR ;AN000;DT
EXTRN PM_BASECHAR:BYTE ;AN000;
EXTRN PM_BASEATTR:BYTE ;AN000;
EXTRN CRD_CCBVECOFF:WORD ;AN000;
EXTRN CRD_CCBVECSEG:WORD ;AN000;
SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;
ASSUME CS:SELECT,DS:DATA ;AN000;
;
INCLUDE CASEXTRN.INC ;AN000;
;
EXTRN EXIT_SELECT:near ;AN000;
EXTRN CREATE_CONFIG_SYS:NEAR ;AN000;
EXTRN CREATE_AUTOEXEC_BAT:NEAR ;AN000;
EXTRN CREATE_SHELL_BAT:NEAR ;AN000;DT
EXTRN DEALLOCATE_HELP:FAR ;AN007;JW
;
EXTRN INSTALL_TO_360_DRIVE:NEAR ;AN000;DT
EXTRN INSTALL_ERROR:NEAR ;AN000;
EXTRN EXIT_DOS:NEAR ;AN000;
EXTRN PROCESS_ESC_F3:NEAR ;AN000;
EXTRN EXIT_DOS_CONT:NEAR ;AN000;
EXTRN GET_ENTER_KEY:NEAR ;AN063;SEH
EXTRN GET_OVERLAY:NEAR ;AN063;SEH
extrn Free_Parser:near
PUBLIC DISKETTE_INSTALL ;AN111;JW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Install is to drive B: or drive A:
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISKETTE_INSTALL: ;AC111;JW
;
INIT_VAR F_PATH, E_PATH_NO ;AN000;
INIT_VAR F_APPEND, E_APPEND_NO ;AN000;
INIT_VAR F_PROMPT, E_PROMPT_NO ;AN000;
INIT_VAR F_XMA, E_XMA_NO ;AN000;
INIT_VAR F_FASTOPEN, E_FASTOPEN_NO ;AN000;
INIT_VAR F_SHARE, E_SHARE_NO ;AN000;
INIT_VAR S_INSTALL_PATH,0 ;AN000;set install path field = 0
;
.IF < N_DISKETTE_A eq E_DISKETTE_360 > ;AN111;JW
GOTO INSTALL_TO_360_DRIVE ;AN111;JW
.ENDIF ;AN111;JW
;
.IF < N_DISKETTE_A eq E_DISKETTE_720 > ;AN111;JW
GOTO INSTALL_TO_720_DRIVE ;AN111;JW
.ENDIF ;AN111;JW
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; install is to 1.44M drives
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Introduction to 1440KB install ;
INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
PREPARE_PANEL PAN_START1440 ;AN000;
PREPARE_PANEL PAN_HBAR ;AN000;
PREPARE_CHILDREN ;AN000; prepare child panels
DISPLAY_PANEL ;AN000;
;
GET_FUNCTION FK_ENT ;AN000;
;
.IF < I_DEST_DRIVE eq E_DEST_DRIVE_B > near ;AN111;JW
;;;insert startup diskette in drive B: ;
INIT_PQUEUE PAN_INST_PROMPT ;AN000; initialize queue
PREPARE_PANEL SUB_INS_START_B ;AN000; insert startup diskette in drive B:
PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
PREPARE_CHILDREN ;AN000; prepare child panels
DISPLAY_PANEL ;AN000; display panel
;
GET_FUNCTION FK_ENT ;AN000;
;
;;;formatting disk screen ;
INIT_PQUEUE FORMAT_DISKET ;AN000; initialize queue
DISPLAY_PANEL ;AN000;
;
;;;format startup diskette in drive B: ;
.REPEAT ;AN006;JW
EXEC_PROGRAM S_FORMAT,S_FORMAT_B,PARM_BLOCK,EXEC_NO_DIR;AN000; format startup disket & copy system files
.LEAVE nc ;AN006;JW
HANDLE_FORMAT_ERROR ;AN000;JW
.UNTIL ;AN006;JW
;
;;;create config and autoexec files on startup diskette ;
CREATE_CONFIG S_CONFIG_NEW_B, N_RETCODE ;AN000; create CONFIG.SYS file
.IF c ;AN000;
GOTO INSTALL_ERROR ;AN000;
.ENDIF ;AN000;
CREATE_AUTOEXEC S_AUTO_NEW_B,E_DEST_SHELL,N_RETCODE;AN000; create AUTOEXEC.BAT file with SHELL pars
.IF < c > near ;AN000;
GOTO INSTALL_ERROR ;AN000;
.ENDIF ;AN000;
;
.ELSE near ;AN111; install is to 1.44 meg A: drive JW
;
;;;format startup diskette in drive A: ;
;;;use format int2f call to display panels ;
INIT_VAR FORMAT_WHICH,STARTUP ;AN111;JW
.REPEAT ;AN006;JW
HOOK_2F_FORMAT ;AN111;JW
EXEC_PROGRAM S_FORMAT,S_FORMAT_A,PARM_BLOCK,EXEC_NO_DIR ;AN000; format startup disket & copy system files
.LEAVE nc ;AN006;JW
UNHOOK_2F ;AN111;JW
HANDLE_FORMAT_ERROR ;AN000;JW
INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360 ;AN000;
.UNTIL ;AN006;JW
UNHOOK_2F ;AN111;JW
;
;;;create config and autoexec files on startup diskette ;
CREATE_CONFIG S_CONSYS_C, N_RETCODE ;AN000; create CONFIG.SYS file
.IF c ;AN000;
GOTO INSTALL_ERROR ;AN000;
.ENDIF ;AN000;
CREATE_AUTOEXEC S_AUTOEX_C,E_DEST_SHELL,N_RETCODE ;AN000; create AUTOEXEC.BAT file with SHELL pars
.IF c ;AN000;
GOTO INSTALL_ERROR ;AN000;
.ENDIF ;AN000;
;
;;; insert the INSTALL diskette in drive A: ;
INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360 ;AN000;
;
.ENDIF ;AN000;
;
;;;copying files screen ;
INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
PREPARE_PANEL SUB_COPYING ;AN111; prepare copying files message JW
DISPLAY_PANEL ;AN000;
;
.IF < I_DEST_DRIVE eq E_DEST_DRIVE_A > ;AN111;JW
INIT_VAR SOURCE_PANEL, SUB_REM_DOS_A ;AN000;
INIT_VAR DEST_PANEL, SUB_INS_STARTT_S360 ;AN000;
.ENDIF ;AN000;
;
;;;copy all files from INSTALL diskette to STARTUP diskette
COPY_FILES I_DEST_DRIVE,COPY_INST_1200_1440,E_INST_1200_1440;AN000;
.IF c ;AN000;
GOTO INSTALL_ERROR ;AN000;
.ENDIF ;AN000;
;
;;; insert OPERATING diskette in A: ;
INSERT_DISK SUB_REM_SEL_A, S_DOS_UTIL1_DISK ;AN000;
;
;;;copying files screen ;
INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
PREPARE_PANEL SUB_COPYING ;AN000; prepare copying files message
DISPLAY_PANEL ;AN000;
;
.IF < I_DEST_DRIVE eq E_DEST_DRIVE_A > ;AN111;JW
INIT_VAR SOURCE_PANEL, SUB_REM_SEL_A ;AN111;JW
INIT_VAR DEST_PANEL, SUB_INS_STARTT_S360 ;AN111;JW
.ENDIF ;AN000;
;
;;;copy all files from OPERATING diskette to STARTUP diskette;
COPY_FILES I_DEST_DRIVE,COPY_OPER_1200_1440,E_OPER_1200_1440;AN000;
.IF c ;AN000;
GOTO INSTALL_ERROR ;AN000;
.ENDIF ;AN000;
.if < f_shell eq e_shell_yes > near ; install the shell?
;;; insert MS-SHELL diskette in A: ;
INSERT_DISK SUB_INS_MSSHELL_A, S_DOS_SHEL_DISK ;AN000;
;
;;;copying files screen ;
INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
PREPARE_PANEL SUB_COPYING ;AN000; prepare copying files message
DISPLAY_PANEL ;AN000;
;
.IF < I_DEST_DRIVE eq E_DEST_DRIVE_A > ;AN111;JW
INIT_VAR SOURCE_PANEL, SUB_INS_MSSHELL_A ;AN111;JW
INIT_VAR DEST_PANEL, SUB_INS_STARTT_S360 ;AN111;JW
.ENDIF ;AN000;
;
;;;copy all files from OPERATING diskette to STARTUP diskette;
COPY_FILES I_DEST_DRIVE,COPY_SHELL_1200_1440,E_SHELL_1200_1440;AN000;
.IF c ;AN000;
GOTO INSTALL_ERROR ;AN000;
.ENDIF ;AN000;
.endif ; installing the shell
;
.IF < I_DEST_DRIVE eq E_DEST_DRIVE_B > ;AN111;JW
CREATE_SHELL S_SHELL_NEW_B, N_RETCODE ;AN000;DT
.IF c ;AN000;DT
GOTO INSTALL_ERROR ;AN000;DT
.ENDIF ;AN000;DT
.ELSE ;AN000;
CREATE_SHELL S_SHELL_NEW, N_RETCODE ;AN000;DT
.IF c ;AN000;DT
GOTO INSTALL_ERROR ;AN000;DT
.ENDIF ;AN000;DT
.ENDIF ;AN000;
;
;;;installation complete screen ;
INIT_PQUEUE PAN_COMPLETE2 ;AN000; initialize queue
PREPARE_PANEL SUB_COMP_KYS_1C ;AN000;
DISPLAY_PANEL ;AN000;
SAVE_PANEL_LIST ;AN000;
;
GET_FUNCTION FK_REBOOT ;AN000;
;;;;;;;;control will not return here. user has to reboot;;;;;;;;; end of install to 1.44M drive
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Install to 720K drive
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INSTALL_TO_720_DRIVE:
.IF < MEM_SIZE eq 256 >
DEALLOCATE_MEMORY
call Free_Parser
.IF < C >
GOTO INSTALL_ERROR
.ENDIF
CALL GET_OVERLAY
INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360
.ENDIF
;;;Introduction to 720KB install
INIT_PQUEUE PAN_INSTALL_DOS
PREPARE_PANEL PAN_START720
PREPARE_PANEL PAN_HBAR
PREPARE_CHILDREN
DISPLAY_PANEL
GET_FUNCTION FK_ENT
CALL DEALLOCATE_HELP
.IF < I_DEST_DRIVE eq E_DEST_DRIVE_A > near
;;;diskcopy INSTALL diskette to STARTUP diskette
DISKCOPY_TO DSKCPY_TO_A_360,NO_SOURCE1,S_DOS_SEL_360
DISKCOPY_PANELS SUB_REM_DOS_A,SUB_COPYING,SUB_INS_STARTT_S360
.REPEAT
INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
CALL HOOK_INT_2F
EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR
CALL RESTORE_INT_2F
.IF < c >
GOTO INSTALL_ERROR
.ENDIF
.UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
; delete unneeded files
ERASE_FILE S_AUTOEX_C
ERASE_FILE S_CONSYS_C
ERASE_FILE S_SELEXE_C
ERASE_FILE S_SELHLP_C
ERASE_FILE S_SELPRT_C
ERASE_FILE S_SELDAT_C
; make config.sys and autoexec.bat
create_config s_consys_c, n_retcode
.if c
goto install_error
.endif
create_autoexec s_autoex_c, e_dest_dos, n_retcode
.if c
goto install_error
.endif
;;; diskcopy OPERATE diskette to WORKING diskette
.REPEAT
DISKCOPY_TO DSKCPY_TO_A_360,SOURCE1,S_DOS_UTIL1_DISK
DISKCOPY_PANELS SUB_REM_SEL_A,SUB_COPYING,SUB_INS_WORKING_A
INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
CALL HOOK_INT_2F
EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR
CALL RESTORE_INT_2F
.IF < c >
GOTO INSTALL_ERROR
.ENDIF
.LEAVE < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360
.UNTIL
;;;perhaps diskcopy MS-SHELL to SHELL
.IF < f_shell eq e_shell_yes > near
.REPEAT
INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360
DISKCOPY_TO DSKCPY_TO_A_360,SOURCE1,S_DOS_SHEL_DISK
DISKCOPY_PANELS SUB_INS_MSSHELL_A,SUB_COPYING,SUB_INS_SHELL_S360
INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
CALL HOOK_INT_2F
EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR
CALL RESTORE_INT_2F
.IF < c >
GOTO INSTALL_ERROR
.ENDIF
.UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
; make config.sys and autoexec.bat
create_config s_consys_c, n_retcode
.if c
goto install_error
.endif
create_autoexec s_autoex_c, e_dest_shell, n_retcode
.if c
goto install_error
.endif
create_shell s_shell_new, n_retcode
.IF c near
goto install_error
.ENDIF
.ENDIF
.ELSE near ; This is a two floppy system. Install from A to B.
;;;diskcopy INSTALL diskette to STARTUP diskette
DISKCOPY_TO DSKCPY_TO_B,SOURCE1,S_DOS_SEL_360
DISKCOPY_PANELS SUB_INS_START_B,SUB_COPYING,NOPANEL
.REPEAT
INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
CALL HOOK_INT_2F
EXEC_PROGRAM S_DISKCOPY,S_DSKCPY_TO_B,PARM_BLOCK,EXEC_NO_DIR
CALL RESTORE_INT_2F
.IF < c >
GOTO INSTALL_ERROR
.ENDIF
.UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
; delete unneeded files
ERASE_FILE S_AUTO_NEW_B
ERASE_FILE S_CONFIG_NEW_B
ERASE_FILE S_SELEXE_NEW_B
ERASE_FILE S_SELHLP_NEW_B
ERASE_FILE S_SELPRT_NEW_B
ERASE_FILE S_SELDAT_NEW_B
; make config.sys and autoexec.bat
create_config s_config_new_b, n_retcode
.if c
goto install_error
.endif
create_autoexec s_auto_new_b, e_dest_dos, n_retcode
.if c
goto install_error
.endif
;;; diskcopy OPERATE diskette to WORKING diskette
.REPEAT
DISKCOPY_TO DSKCPY_TO_B,SOURCE1,S_DOS_UTIL1_DISK
DISKCOPY_PANELS SUB_INS_OP_WORK,SUB_COPYING,NOPANEL
INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
CALL HOOK_INT_2F
EXEC_PROGRAM S_DISKCOPY,S_DSKCPY_TO_B,PARM_BLOCK,EXEC_NO_DIR
CALL RESTORE_INT_2F
.IF < c >
GOTO INSTALL_ERROR
.ENDIF
.LEAVE < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360
.UNTIL
;;;perhaps diskcopy MS-SHELL to SHELL
.IF < f_shell eq e_shell_yes > near
.REPEAT
INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360
DISKCOPY_TO DSKCPY_TO_B,SOURCE1,S_DOS_SHEL_DISK
DISKCOPY_PANELS SUB_INS_SHELL_DISKS,SUB_COPYING,NOPANEL
INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
CALL HOOK_INT_2F
EXEC_PROGRAM S_DISKCOPY,S_DSKCPY_TO_B,PARM_BLOCK,EXEC_NO_DIR
CALL RESTORE_INT_2F
.IF < c >
GOTO INSTALL_ERROR
.ENDIF
.UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
; make config.sys and autoexec.bat
create_config s_config_new_b, n_retcode
.if c
goto install_error
.endif
create_autoexec s_auto_new_b, e_dest_shell, n_retcode
.if c
goto install_error
.endif
create_shell s_shell_new_b, n_retcode
.if c
goto install_error
.endif
.ENDIF
.ENDIF ; end if two drive 720 installation
;;;installation complete and change diskettes screen
INIT_PQUEUE PAN_COMPLETE2
PREPARE_PANEL SUB_COMP_KYS_2
DISPLAY_PANEL
SAVE_PANEL_LIST
GET_FUNCTION FK_REBOOT
;;;;;;;;control will not return here. user has to reboot
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SELECT ENDS
END
|