5 TITLE SELECT
- DOS
- SELECT
.EXE
;AN000;
6 SUBTTL SELECT5A
.asm
;AN000;
8 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
10 ; SELECT5A.ASM : Copyright 1988 Microsoft
14 ; COMMENTS: Assemble with MASM 3.0 (using the /A option)
16 ; Panel flow is defined in the following files:
25 ; Module contains code for :
32 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
33 DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
34 EXTRN SEL_FLG
:BYTE ;AN000;
38 INCLUDE PANEL
.MAC
;AN000;
39 INCLUDE SELECT
.INC ;AN000;
40 INCLUDE CASTRUC
.INC ;AN000;
41 INCLUDE STRUC.INC ;AN000;
42 INCLUDE MACROS
.INC ;AN000;
43 INCLUDE EXT
.INC ;AN000;
44 INCLUDE VARSTRUC
.INC ;AN000;
45 INCLUDE ROUT_EXT
.INC ;AN000;
46 INCLUDE PAN
-LIST
.INC ;AN000;
48 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49 SELECT
SEGMENT PARA
PUBLIC 'SELECT' ;AN000;segment for far routine
50 ASSUME
CS:SELECT
,DS:DATA ;AN000;
52 INCLUDE CASEXTRN
.INC ;AN000;
54 EXTRN CREATE_AUTOEXEC_BAT
:NEAR ;AN000;
55 EXTRN CREATE_CONFIG_SYS
:NEAR ;AN000;
56 EXTRN CREATE_SHELL_BAT
:NEAR ;AN000;DT
57 EXTRN SCAN_INFO_CALL
:NEAR ;AN000;DT
59 PUBLIC DATE_TIME_SCREEN
;AN000;
60 EXTRN PROCESS_ESC_F3
:near ;AN000;
61 EXTRN FORMAT_DISK_SCREEN
:near ;AN000;
62 EXTRN EXIT_DOS
:near ;AN000;
63 EXTRN INSTALL_ERROR
:near ;AN000;
64 EXTRN EXIT_SELECT
:NEAR ;AN000;
65 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
67 ; ������������������������������������Ŀ
70 ; ��������������������������������������
72 ; The INSTALL DATE and TIME SCREEN is presented if the active date is 1/1/80.
73 ; If the user is installing to drive C: , this is the first screen presented
74 ; after the system is reboot due to the execution of FDISK.
75 ; The user cannot go back to the previous screen or terminate the
76 ; install process from this screen.
77 ; If the user did not change the date or time presented on the screen,
79 ; Valid keys are ENTER, F1, and numeric characters.
80 ; If installing from 360KB diskettes, must prompt for INSTALL diskette
82 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
83 DATE_TIME_SCREEN: ;AN000;
85 .IF < N_SELECT_MODE
eq E_SELECT_FDISK
> and ;AN000;DT
86 .IF < N_DISKETTE_A
eq E_DISKETTE_360
> ;AN000;DT
87 CALL CURSOROFF
;AN082;SEH
88 INSERT_DISK SUB_INSTALL_COPY
, S_SELECT_TMP
;AN000;JW
89 CALL SCAN_INFO_CALL
;AN000;DT
92 INIT_VAR STACK_INDEX
, 0 ;AN000; clear SELECT STACK
94 CHECK_WRITE_PROTECT DRIVE_A
, N_RETCODE
;AC000;JW
96 GOTO INSTALL_ERROR
;AN000;
98 OR SEL_FLG
,INSTALLRW
;AN000; indicate INSTALL diskette is R/W
101 GET_DATE N_YEAR
, N_MONTH
, N_DAY
;AN000; get system date
102 .IF c
;AN000; if system date is 1/1/1980
103 GOTO FORMAT_DISK_SCREEN
;AN000; goto next screen (FORMAT_DISK)
106 GET_TIME N_HOUR
, N_MINUTE
, N_SECOND
;AN000; get system time
108 COPY_WORD N_WORD_1
, N_YEAR
;AN000; copy year to temp var
109 COPY_WORD N_WORD_2
, N_MONTH
;AN000; copy month to temp var
110 COPY_WORD N_WORD_3
, N_DAY
;AN000; copy day to temp var
111 COPY_WORD N_WORD_4
, N_HOUR
;AN000; copy hour to temp var
112 COPY_WORD N_WORD_5
, N_MINUTE
;AN000; copy minute to temp var
113 COPY_WORD N_WORD_6
, N_SECOND
;AN000; copy second to temp var
115 INIT_PQUEUE PAN_DATE_TIME
;AN000; initialize queue
116 PREPARE_PANEL PAN_HBAR
;AN000; prepare horizontal bar
117 PREPARE_CHILDREN
;AN000; prepare child panels
118 INIT_NUMERIC NUM_YEAR
,N_WORD_1
,MAX_YEAR
,S_STR120_1
;AN000; display current year
119 INIT_NUMERIC NUM_MONTH
,N_WORD_2
,MAX_MONTH
,S_STR120_2
;AN000; display current month
120 INIT_NUMERIC NUM_DAY
,N_WORD_3
,MAX_DAY
,S_STR120_3
;AN000; display current day
121 INIT_NUMERIC NUM_HOUR
,N_WORD_4
,MAX_HOUR
,SC_LINE
;AN000; display current hour
122 INIT_NUMERIC NUM_MINUTE
,N_WORD_5
,MAX_MINUTE
,S_MODE_PARM
;AN000; display current minute
123 INIT_NUMERIC NUM_SECOND
,N_WORD_6
,MAX_SECOND
,S_CP_DRIVER
;AN000; display current second
124 CALL CURSORON
;AN082;SEH
125 DISPLAY_PANEL
;AN000;
127 INIT_VAR N_COUNTER
, 1 ;AN000; set counter = 1
129 DATE_TIME_LOOP: ;AN000;
131 .REPEAT ;AN000; repeat code block
135 .WHEN
< N_COUNTER
eq 1 > ;AN000; counter = 1
136 GET_NUMERIC NUM_YEAR
,N_WORD_1
,MIN_YEAR
,MAX_YEAR
,FK_DATE
,S_STR120_1
;AN000; get new year value
137 COPY_WORD N_WORD_1
, N_USER_NUMERIC
;AN000; save new year value
139 .WHEN
< N_COUNTER
eq 2 > ;AN000; counter = 2
140 GET_NUMERIC NUM_MONTH
,N_WORD_2
,MIN_MONTH
,MAX_MONTH
,FK_DATE
,S_STR120_2
;AN000; get new month value
141 COPY_WORD N_WORD_2
, N_USER_NUMERIC
;AN000; save new month value
143 .WHEN
< N_COUNTER
eq 3 > ;AN000; counter = 3
144 GET_NUMERIC NUM_DAY
,N_WORD_3
,MIN_DAY
,MAX_DAY
,FK_DATE
,S_STR120_3
;AN000; get new day value
145 COPY_WORD N_WORD_3
, N_USER_NUMERIC
;AN000; save new day value
147 .WHEN
< N_COUNTER
eq 4 > ;AN000; counter = 4
148 GET_NUMERIC NUM_HOUR
,N_WORD_4
,MIN_HOUR
,MAX_HOUR
,FK_DATE
,SC_LINE
;AN000; get new hour value
149 COPY_WORD N_WORD_4
, N_USER_NUMERIC
;AN000; save new hour value
151 .WHEN
< N_COUNTER
eq 5 > ;AN000; counter = 5
152 GET_NUMERIC NUM_MINUTE
,N_WORD_5
,MIN_MINUTE
,MAX_MINUTE
,FK_DATE
,S_MODE_PARM
;AN000; get new minute value
153 COPY_WORD N_WORD_5
, N_USER_NUMERIC
;AN000; save new minute value
155 .OTHERWISE
;AN000; counter = 6
156 GET_NUMERIC NUM_SECOND
,N_WORD_6
,MIN_SECOND
,MAX_SECOND
,FK_DATE
,S_CP_DRIVER
;AN000; get new second value
157 COPY_WORD N_WORD_6
, N_USER_NUMERIC
;AN000; save new second value
161 INC_VAR N_COUNTER
;AN000; inc counter
163 .IF < N_COUNTER a
6 > ;AN000; if counter > 6
164 INIT_VAR N_COUNTER
, 1 ;AN000; set counter = 1
167 .UNTIL
< N_USER_FUNC
eq E_ENTER
> near ;AN000; break loop if user entered ENTER
169 CHECK_DATE_CHANGE N_WORD_1
,N_WORD_2
,N_WORD_3
,N_YEAR
,N_MONTH
,N_DAY
;AN000; check if new date is different
170 .IF c
;AN000; if new date different
171 SET_DATE N_WORD_1
, N_WORD_2
, N_WORD_3
;AN000; set new system date
172 .IF c
;AN000; if new date invalid
173 INIT_VAR N_COUNTER
, 3 ;AN000; set counter = 3
174 GOTO DATE_TIME_LOOP
;AN000; goto get day again
178 CHECK_TIME_CHANGE N_WORD_4
,N_WORD_5
,N_WORD_6
,N_HOUR
,N_MINUTE
,N_SECOND
;AN000; check if new time is different
179 .IF c
;AN000; if new time is different
180 SET_TIME N_WORD_4
, N_WORD_5
, N_WORD_6
;AN000; set new system time
183 GOTO FORMAT_DISK_SCREEN
;AN000; goto next screen (FORMAT_DISK)
184 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;